Icefaces, JBoss, Maven2 y EJB3: Parte 4

0
12151

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’.






PROPERTY


com.autentia.tutoriales.modelo.entidades
































































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:

CREATE TABLE IF NOT EXISTS `Libro_Autor_Version_2` (
`libro` int NOT NULL,
`autor` int NOT NULL,
PRIMARY KEY (`libro`,`autor`),
index `ndx_libro2` (`libro`),
index `ndx_autor2` (`autor`),
CONSTRAINT `fk_libroAutor_libro2` FOREIGN KEY (`libro`) REFERENCES `Libro` (`id`),
CONSTRAINT `fk_libroAutor_autor2` FOREIGN KEY (`autor`) REFERENCES `Autor` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;


insert into Libro_Autor_Version_2 (`libro`,`autor`)
values( '1', '2');
insert into Libro_Autor_Version_2 (`libro`,`autor`)
values( '2', '1');
insert into Libro_Autor_Version_2 (`libro`,`autor`)
values( '3', '3');

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.

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad