martes, 25 de marzo de 2008

Usando Flex con Hibernate/EJB3 Annotations

Al investigar el HibernateAssembler de Adobe vi que requiere los horrendos xml mappings y, como no me gusta perder el tiempo con etapas superadas me tomé el trabajo de hacer mi propio assembler para usar LifeCycle Data Services (antes conocido como Flex Data Services o FDS) con las entidades o pojos java y las anotaciones de persistencia, y fue mas fácil de lo que creí, primero pensé que iba a tener que crear un Assembler desde cero implementando AbstractAssembler, pero la cosa fue simple, tocando lo mínimo necesario, casi de cirujano, lo único que tuve que hacer fue extender la clase flex.data.assemblers.HibernateAssembler de Adobe y sobrescribir el método createHibernateConfiguration para que en vez de devolver un objeto org.hibernate.cfg.Configuration devuelva un org.hibernate.cfg.AnnotationConfiguration, va la receta completa:

1) Crear nueva clase AnnotationHibernateAssembler que extienda a flex.data.assemblers.HibernateAssembler

2) Sobrescribir método createHibernateConfiguration para devolver org.hibernate.cfg.AnnotationConfiguration (sin cambiar la firma del método)

3) Agregar/actualizar los siguientes jars al lib del webapp:

hibernate-annotations.jar (version 3.3.0 GA)
hibernate-commons-annotations.jar (version 3.3.0 GA)
ejb3-persistence.jar (version 3.3.0 GA)
hibernate3.jar (actualizar a version 3.2.5)

4) Indicar el nuevo assembler modificando el del en archivo data-management-config.xml

5) Borrar los horribles *.hbm.xml y volver a usar anotaciones

Acá adjunto el código de la clase:

/**
* Extiende el hibernate asembler de Adobe para usar las anotaciones de hibernate/ejb3
* como metadata y evitar la necesidad de crear los archivos *.hbm.xml de mapeo
*
* @author Claudio Fainschtein
*
* @see
* HibernateAssembler,
* Configuration,
* AnnotationConfiguration
*
*/
public class AnnotationHibernateAssembler extends flex.data.assemblers.HibernateAssembler
{
/**
* Sobreescribe metodo de clase HibernateAssembler que devuleve objeto
* configuración simple para devolver uno que toma las anotaciones específicas
* de hibernate y ejb3 como metadata para el ORM
*
*/
protected Configuration createHibernateConfiguration(String hibernateConfigFile)
{
AnnotationConfiguration hibernateConfig = new AnnotationConfiguration();
if (hibernateConfigFile == null)
{
hibernateConfig.configure();
}
else
{
hibernateConfig.configure(hibernateConfigFile);
}
hibernateConfig.buildSessionFactory();
return hibernateConfig;
}
}

No hay comentarios: