sábado, 12 de abril de 2008

Elección de un "Java Persistence Framework"

La gran parte de los desarrollo que hoy se realizan en J2EE tienen como objetivo final el tratamiento de datos, estándo éstos almacenados habitualmente en una Base de Datos relacional. La transición desde el mundo relacional hasta el de la Orientación a Objetos es un viaje que no tiene por qué ser sencillo. Normalmente, partiendo de un modelo de datos normalizado, se tiende a generar un objeto contenedor de datos que se encarga de la persistencia y mapeo de datos contra el Modelo de Datos. Estas "reglas no escritas" suelen servir para la gran parte de los desarrollos y lo que suele realizarse es definir el típico DAO que contiene la información de select, update y delete contra la/s tabla/s de BBDD que tienen asociados.

Hasta aquí todo suele funcionar, sobre todo cuando los objetos son simples que no guardan relación unos con otros. Pero existen casos en los que la generación de un DAO puede traer problemas:

- La generación del DAO es manual, lo que implica que la posibilidad de fallo es elevada a en la programación. Además, las "utilidades" de programación que ayuden a la generación de DAOs es más bien escasa.

- El control transaccional de las instrucciones con la BBDD tiene que estar controlado en un nivel superior en el caso de que exista relaciones entre objetos.

- Para muchos, programar es un arte, y hay artistas que la simple construcción de un DAO pueden hacerla lo suficientemente compleja como para que el mantenimiento de la aplicación se complique sobremanera.

- El mecanismo manual no tiene per se funcionalidades de cacheo, clustering, etc... Si se quieren hay que hacerlo.

Es por las razones anteriores por las que es interesante la adopción de un Java Persistence Framework que, con tareas muy simples de configuración o desarrollo permitan al desarrollador aislarse del mundo relacional y centrarse en el de objetos. De hecho, existe multitud de artefactos que permiten la generación de las configuraciones y objetos necesarios para el mapeo objeto-bbdd. Este artículo Adopting a Java Persistence Framework: Which, When, and What? creo que hace una comparativa bastante interesante de los 4 frameworks de este tipo más usados (incluyen JPA por ser el estándar de referencia, no por que se utilice ampliamente), aunque hecho en falta un análisis más profundo de Castor, Kodo e iBatis.

Mi recomendación a este respecto resume mucho lo anterior:
- Si quieres algo rápido, estándar y no quieres tener dependencia de estar desplegado en un servidor de aplicaciones de EJBs --> Hibernate es tu opción (sobre todo si utilizas Spring como framework de Desarrollo)
- Si tu problema no es el de los recursos y quieres delegar en el Servidor de Aplicaciones la gran parte de las operaciones --> utiliza los EJBs de entidad. Sobre todo en la versión 3, en la que se mejoran muchos aspectos, sobre todo la facilidad a la hora de programar.

De todos modos, no es oro todo lo que reluce y, en muchos casos, seguiremos teniendo que utilizar sentencias SQL mediante JDBC. Las señoritas, SELECT, UPDATE y DELETE están algo más maquilladas, pero siguen estando ahí. Aquellos que no les tenían simpatía podrán verlas menos a menudo, pero no les recomiendo tener una mala relación. Terminarán quedando para tomar un café antes de lo que imaginan.

0 comentarios: