iBATIS

Al final creo que me he decidido por iBATIS. No he hecho más que unas pruebas sencillas con varios -Hibernate, iBATIS, JPOX, etc-, pero al final iBATIS me ha parecido el más "controlable".

Hibernate me ha fallado con la ingeniería inversa, no es capaz de tragarse el mismo los ficheros de configuración que él ha generado, aparte que los plugins y herramientas adicionales parecen bastante descuidadas.

JPOX ni siquiera he conseguido hacerlo funcionar -el plugin para eclipse, ni siquiera lo he probado a mano-. De todas formas, parece que toca los bytecodes después de compilar el código y eso me da "mal rollo".

iBATIS no me ha dado ninguna pega. El plugin para eclipse ha funcionado a la primera y el código generado funciona a la primera. Además, me gusta el tener los SQL visibles en un fichero, ya que siempre da la sensación de tener más control sobre lo que se está haciendo.

Un compañero mio probó cayenne, y aunque la ingeniería inversa se hace estupendamente con una interface gráfica de usuario, en los java beans mete cosas propias de él y no me convenció.

Por supuesto, y siguiendo mi costumbre, he puesto mis pruebas sobre iBATIS en la Chuwiki. Estoy deseando que me toque codificar algo contra una BD…

Creo que me he metido mucho con Hibernate

Sigo con mis pruebas de herramientas/librería de persistencia en base de datos.

Con Hibernate conseguí que funcionara. El ejemplo tonto con una única tabla funcionó casi a la primera. Las HibernateTools – Middlegen para sacar los .xml y los .java a partir de la base de datos me dieron más problemas, pero también funcionaron.

Luego hice pruebas con iBatis. La filosofía de trabajo es distinta, pero el plugin de eclipse me funcionó bien e iBatis genera código hasta un nivel más alto, genera una interface de DAO y una implementación iBatis.

Investigando, descubro que hay una especificación de Java, llamada JPA -Java Persistent API, parte V del tutorial de JEE-, que pretende indicar cómo trabajar con objetos java persistentes -que se guardan más o menos solos en base de datos, sin que el programador tenga que preocuparse de los SQL-.

También descubro que la gente de Apache ha hecho otra especificación similar, JDO, para lo mismo, pero que pretende ser más completa que JPA.

También descubro JPOX, una implementación que cubre las dos especificaciones anteriores: JPA y JDO. Sin embargo, no he conseguido que me funcione. Desde eclipse con el plugin correspondiente me falla al crear las tablas en base de datos y de momento me ha dado pereza crearlas a mano. En cuanto a maven, tienen una mezcolanza rara. Parece que se han quedado en maven 1 según la documentación, pero si te lo bajas con maven 2 está disponible, aunque no encuentro documentación para configurarlo.

Y descubro también que eclipse dali viene con una perpectiva y un "wizard" de proyecto para trabajar con objetos persistentes JPA. Por supuesto, tampoco me ha funcionado.

Y para marear más la perdiz, y todavía sin probar, Glassfish de java lleva una implementación de JPA, hay también otra implemantación de Apache OpenJPA,

En fin, todo un mundo y un abanico de posibilidades. Para probarlas todas no basta con que se paren dos meses la producción, harán falta varios años . De cualquier forma, Hibernate es uno de los que menos problemas me ha dado -descontando los de MiddleGen- y yo creo que sin duda es el más conocido. Aunque la filosofía de trabajo es distinta, iBatis también es conocido y da la impresión de que tienes más control sobre lo que estás haciendo. Ambos están "soportados" por SpringFramework –ver capítulo 12– que sí pienso empezar a usar, así que creo que me centraré un poco más en Hibernate e iBatis.

Hibernate, iBatis, JPA, …

¡ Menudo lío !

Siempre hemos programado nuestro código java contra base de datos en JDBC puro y duro. Llegamos a hacernos nuestro "equivalente" a herramientas como iBatis, pero usando siempre Hashtable para tener los resultados o hacer las inserciones y, desde luego, mucho más cutre que cualquiera de los anteriores. Eso sí, el nuestro construye sobre la marcha los paneles SWING y JTables para mostrar o modificar los resultados.

Sin embargo, ahora que me pongo a mirar un poco más en serio, veo multitud de herramientas similares que hacen cosas parecidas. Y ahí empieza la duda. ¿Cual usar?.

Hibernate parece el candidato más conocido y del que más se habla -al menos, eso me parece por lo que veo en los foros-. Sin embargo, en mis primeras pruebas, mis impresones no han sido muy buenas. Un sitio web relativamente caótico, unas Hibernatetools-middlegen más caóticas todavía. El plugin para eclipse no me ha funcionado. Veo que la "ingeniería inversa" de sacar los xml a partir de tablas creadas da problemas. Al menos a mí, con la primera base de datos seria que pruebo, los xml generados por la herramienta, luego dan error en Hibernate cuando trata de leerlos. Y veo que está demasiado pensado para Web y JEE. Sin embargo, la forma de trabajo desde código Java parece la más elegante y cómoda.

Ayer me puse a jugar un poco con iBatis. No llega, desde luego, al nivel de Hibernate, pero se le acerca. Además, en mis primeras pruebas me ha causado mejor impresión. El sitio web parece mejor organizado, las pruebas que he hecho me han funcionado rápido. Tiene un plugin abator de eclipse para a partir de tablas creadas en base de datos generar los beans, los DAO y los .xml de configuración. Hoy haré pruebas con tablas más en serio.

Y ayer también, me puse a mirar por encima JPA. Veo que también trabaja con beans simples de java -los llamans POJOs- que hace persistentes, al igual que Hibernate. Así que es otra que tendré que  mirar.

Y sigo con la duda. ¿Cual usar?. Cada vez estoy más convencido de que deberíamos parar todos los proyectos un par de meses para dedicarnos a hacer pruebas con este tipo de cosas y otros frameworks que hay por ahí. Seguro que recuperamos el tiempo con creces.