Icefaces, JBoss, Maven2 y EJB3: Parte 4

Icefaces, JBoss, Maven2 y EJB3: Parte 4.

En esta parte cuarta del tutorial, os voy a enseñar como realizar el mapeo de las entidades usando el descriptor ‘orm.xml’. Hay mucha discusión acerca de la conveniencia o no de usar anotaciones en lugar de descriptores, ya que algunos opinan (y no sin falta de razón) que usar anotaciones para realizar este tipo de tareas no deja de ser una forma de acoplamiento entre el esquema de base de datos y el modelo de negocio, mientras que otros defienden que de alguna manera ya se hacía cuando se usaba JDBC directamente.

Yo, personalmente, considero que la solución correcta merece una respuesta ‘a la gallega’, es decir, depende. Considero que si nuestro modelo de datos es lo suficientemente estable, las anotaciones son una manera sencilla y elegante de realizar el mapeo (sin entrar a discutir más historias). Si por el contrario, nos encontramos en situaciones de inestabilidad en cuanto al modelo de datos, creo que usar descriptores es una forma de desacoplarnos de cambios continuos en el modelo de datos.

  1. Recordatorio del modelo de negocio.

    Os recuerdo el modelo de negocio que ya usamos para el tutorial anterior:




  1. El descriptor orm.xml

    Vamos ahora a realizar el mapeo usando el descriptor orm.xml. Si queréis echarle un vistazo al esquema que lo define podéis hacerlo en: http://java.sun.com/xml/ns/persistence/orm_1_0.xsd

    Ya os aviso que tengáis cuidado en orden de los atributos, ya que el esquema obliga a hacerlo así (‘sequence’), es decir, que por ejemplo, debemos definir los ‘one-to-many’ antes que los ‘many-to-many’.



Este fichero debemos crearlo en el proyecto ‘Modelo’ en: src/main/java/META-INF/orm.xml

En este momento tenemos configurado el mapeo de dos maneras diferentes, y la pregunta es: ¿ Quién prevalece ?. Evidentemente basta leerse un libro o la especificación para saber que prevalece la información del descriptor sobre las anotaciones, aunque pueden convivir ambas. Nosotros vamos a probar que esto es verdad en el siguiente apartado:

  1. El descriptor prevalece sobre las anotaciones.

    Para demostrar esto vamos a crearnos una nueva tabla denominada: ‘Libro_Autor_version_2′ con el mismo objetivo que ‘Libro_Autor’, es decir, una tabla intermedia para poder crear la relación ‘many_to_many’ entre Libros y Autores de los libros y vamos a insertarle datos absurdos (p.ej. vamos a decir que el ‘Discurso del método’ lo escribió ‘Miguel de Cervantes’). Una vez hecho esto, vamos a modificar el descriptor ‘orm.xml’ para decirle que la tabla intermedia en la relación ‘many-to-many’ es esta nueva tabla, en lugar de la anterior que contiene información correcta. En función de quien sea el autor del Quijote que muestre por consola sabremos quien prevalece (el decriptor o la anotación)

    Primero creamos un pequeño script para crear la nueva tabla y que inserte datos de prueba incorrectos:

Vamos a modificar en el fichero orm.xml la entidad Libro para apuntar a esta nueva tabla:



Arrancamos e invocamos a la aplicación, y comprobaremos que efectivamente, prevalece la información del descriptor:




Y podemos ver, que efectivamente la aplicación muestra los datos de la nueva tabla, que son incorrectos.

En el próximo tutorial de la saga empezaremos a usar algunos componentes de icefaces (listados, paginación, etc…) usando como modelo de negocio todo esto que hemos montado con EJB 3.0.