Siena, persistencia sin más líos

Cuando uno comienza a utilizar cierta tecnología o se acostumbra a cierta comodidad que brindan ciertos frameworks (cómo lo son play! o RoR) y después de un tiempo te topas con algo cómo Hibernate (que no digo que sea malo) sientes ese tufillo de cierta manera que marea o desespera (¡vamos un archivo properties o xml por cada clase!, es algo farragoso y muy poco productivo).

Buscando por la red me topé con un proyecto muy interesante llamado Siena.
Francamente muy bueno, lo he estado utilizando con play! y va cómo la seda.

Lo recomiendo, si no les gusta escribir sql ni ficheros properties o xml, Siena es la solución, además que en cuanto a rendimiento no es tan diferente a Hibernate (de hecho lo siento más rápido que Hibernate).

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

Hibernate

A partir de la versión 3, que ya tiene un rato, ya no es necesario usar XML o properties por cada entidad o clase, porque puedes usar anotaciones de JPA estándar y además Hibernate te da unas anotaciones adicionales para ciertas validaciones o definiciones de columnas agregadas, etc.

Muy interesante.

Luce muy similar a Hibernate, en cuanto a la configuración, es decir, en el "getting started guide" parece que lo puedes usar con anotaciones también.

Ya buscandole un poco más aparece una lista de cosas que luce interesante ( o quizá no , depende de quién las vea )

Por ejemplo Siena no se pueden hacer joins, pero puedes hacer código para NoSQL. DIce haber sido inspirado por el Datastore de python de Google App Engine.

Aquí están los FAQ's

Es bueno conocer una herramienta más para elegir.

Imagen de ezamudio

BigTable?

Si se puede usar con BigTable, en aplicaciones que corran en el App engine, entonces es muy interesante para esos casos, porque no se puede usar Hibernate con App Engine.

Imagen de luxspes

Siena, mas lios?: Lamentablemente no implementa el estandar JPA.

Bueno , JPA (el estandar al que Hibernate se apega) si esta disponible para el Google App Engine (aparentemente esta implementacion esta basada en otro proyecto que tambien se apega a JPA llamado DataNucleus).

Que implicaciones tiene apegarse o no al estandar JPA? Bueno, si te apegas al estandar, puedes construir una aplicacion portable entre distintos ORMs, con soporte para diferentes mecanismo de persistencia, (como en bases de datos SQL, archivos XML y/o la famos BigTable), lamentablemente, Siena no implementa el estandar JPA, asi que el codigo con Siena no es portable, lo cual, en mi opinion, lo deja en fuerte desventaja.

@luxspes Yo no veo que haya

@luxspes
Yo no veo que haya muchos ORMs buenos, estables y simples en Java. Francamente Hibernate es el único bueno (IMO), pero era algo farragoso tener que andar por cada clase modelo crear un xml (gracias a Ezamudio le volveré a poner el ojo ;) ). Luego usando el estándar JPA no puedes usar GAE...Usando Siena puedes usar lo que quieras, además de ser muy simple ;).

Otra cosa es que no es muy necesario portar el código entre ORMs, que en mi opinión, para Java podemos decir que básicamente el ORM por excelencia es Hibernate.

Imagen de ezamudio

JPA en GAE

Imagen de luxspes

Hibernate es muy bueno, pero no el unico, y no siempre el mejor

Yo no veo que haya muchos ORMs buenos, estables y simples en Java

Siguiendo el estandar JPA, estan Hibernate, como bien mencionas, y EclipseLink (antes conocido como TopLink). Esta tambien OpenJPA y DataNucleus (este ultimo compatible con GAE, como ya habia mencionado en mi post anterior)

Y si agregamos a la lista los no estandarizados... te paso aqui una pequeña comparativa para que te des una idea del lo abundantes que son los ORM...

Por otro lado, si quieres entrarle a a algo deberas raro, prueba Rel ;-)

Otra cosa es que no es muy necesario portar el código entre ORMs, que en mi opinión, para Java podemos decir que básicamente el ORM por excelencia es Hibernate.

Una pequeña empresita, llamada Oracle (ahora dueña de Java, y dueña de Toplink (ahora EclipseLink)) sospecho que esta en desacuerdo contigo...

RE: JPA en GAE

Si lo hay...sin embargo no es "tan estándar" necesitas algunos cambios, al menos es lo que entiendo, no sin antes haber leído:

Puesto que JPA presenta una interfaz estándar para interactuar con bases de datos relacionales, la implementación App Engine no admite algunas funciones de JPA. Hemos hecho todo lo posible para informar de estas funciones siempre que sea posible.

RE: Hibernate es muy bueno, pero no el unico, y no siempre el me

Lo sé, y con Oracle las cosas van a cambiar mucho. Con lo de EclipseLink veo una desventaja VIAJAR AL PASADO A CONFIGURAR CON XML, bueno, en mi opinión creo que algo que te vuelve poco productivo (por mis experiencias, que no espero que sean iguales a las tuyas) el configurar las cosas por XML (razón por la cual mucha gente achaca lo poco productivo que es o puede ser un programador J2EE -sé que después de este comentario es casi seguro que se hablará de proyectos grandes o de las 'well-known enterprise applications', que desde mi punto de vista no tiene nada que ver-).

Mi punto es, que Hibernate (a estos momentos) es el ORM por excelencia y que siendo Java existen millares de ORMS; eso no queda en duda (Hibernate es el más usado, el de más documentación; además de ser sencillo). PERO, ¿realmente ese millar de orms te ayudan a ser productivo, o ya de menos son estables (cómo ó más qué hibernate)?...Por ejemplo te topas en un framework cómo Play!, y francamente cambia tu paradigma de aplicaciones web (poca o nula configuración sin sacrificar rendimiento -a lo que está enfocado Siena, hacer de un programador más productivo-).

Para gustos los colores, a mi me gusta mucho Siena ya que se integra fácilmente al paradigma convention over configuration, habrá otros que les guste configurar...y otros que no les guste ni uno ni otro porqué prefieren escribir SQL ellos mismos. Cada quien, es una sugerencia más que (en mi experiencia) ayuda mucho y aunque sólo la utilizo para hacer deployments en GAE me ha servido.

Imagen de luxspes

Eclipse Link es JPA, el XML, es opcional

Lo sé, y con Oracle las cosas van a cambiar mucho. Con lo de EclipseLink veo una desventaja VIAJAR AL PASADO A CONFIGURAR CON XML, bueno, en mi opinión creo que algo que te vuelve poco productivo

Eclipse Link es JPA (al igual que Hibernate),y el XML (para ambos), es opcional si quieres complicarte la vida, lo usas, si no, no. No sera que la razon por la que te gusta tanto Siena, y lo consideras mejor que JPA, es por que simplemente conoces bien a Siena, y no conoces a JPA?

RE: Eclipse Link es JPA, el XML, es opcional

Quizás, pero algo que dices del 'XML Opcional', creo que entonces las documentaciones (tanto de EclipseLink, cómo de Hibernate) necesitan una actualizada. Y, no entiendo me mareo, en muchas partes dicen X framework es JPA (lo he visto al menos con 5 o 6 frameworks)...Por lo que veo es que Hibernate, Eclipse y "the gazillion of persistence frameworks" son implementaciones (creo que se incluye Siena)...¿Entonces que conviene usar JPA puro?; me podrías guiar un poco en este aspecto (por ejemplo mandándome links de documentación, eso me ayudaría mucho).

Imagen de luxspes

Tutorial oficial de JPA aqui.

Tutorial oficial de JPA aqui. JPA es un conjunto de interfaces y clases base que todos los frameworks que digan ser compatibles deben implementar, de esa forma si, por ejemplo, tu quieres hacer una consultas escribes:

 

Y ese mismo codigo te sirve para Hibernate, o para EclipseLink, sin modificaciones.

Igualmente, si quieres definir una entidad puedes poner:

 

Y con eso defines que la clase Adress es persistente, no necesitas ningun archivo XML.

También puedes ver esta presentación de IBM. O comprarte el libro de JPA persistence with Hibernate, ahi explica que partes son especificas de Hibernate, y que partes son utilizables en la implementacion de cualquier fabricante (obviamente el libro, por estar escrito por los creadores de Hibernate, dice que Hibernate es el mejor)