10
May

Transacciones y bloqueos en Glassfish v3 con EJB3.1 y JPA2 (I)

persistenciaTal y como votaron los lectores del blog hace un par de semanas, os presento un minitutorial + prototipo en varias entregas, sobre cómo implementar transacciones y bloqueos utilizando EJB3.1 y JPA2 en Glassfish.

No me gusta tener que partir los artículos pero, la verdad es que está quedando francamente largo y corría el riesgo de convertirse en un ladrillo infumable.

La teoría dice que el código proporcionado en este tutorial debería funcionar en cualquier servidor de aplicaciones compatible con Java EE6 y con cualquier implementación de JPA2, pero la teoría también decía que en Irak había armas de destrucción masiva… y aún las están buscando.

Glassfish v3 y Netbeans 6.8 -el IDE mejor integrado con este servidor de aplicaciones- tienen soporte nativo de EclipseLink, la implementación de referencia de JPA2 y vástago hipermineralizado y supervitaminado de Oracle Toplink.

Hay otras implementaciones de JPA2, como la de Hibernate 3.5 -lanzada el 31 de marzo de este año- o la de openJPA 2 -lanzada el 22 de abril-, pero como habéis podido comprobar son versiones muy recientes, no maduras y que pueden funcionar como los pimientos de Padrón: a veces si y a veces non.

1. CREANDO NUESTRA BASE DE DATOS DE PRUEBAS

Lo primero que debemos hacer es montar una pequeña base de datos con la que trabajará nuestro prototipo. Vamos a crear una típica estructura cabecera-lineas, donde un cliente puede tener de 0 a n pedidos asociados, teniendo en cuenta que un pedido puede crearse sin asociar a ningún cliente:

diagramaJPA

¿Que porqué le he puesto esos nombroncios a las tablas? Pues porque así los debí encontrar en alguno de las decenas de ejemplos que he visto para destilar este tutorial y así se quedaron.

En cualquier caso, en este enlace tenéis el script SQL necesario para crear las tablas, tal y como yo las he creado. He generado el script haciendo ingeniera inversa con nuestra base de datos -una vez más, vaguería pura- pero debe funcionar as-is, o con pequeños cambios, en cualquier base de datos.

2. INSTALANDO Y CONFIGURANDO GLASSFISH

No voy a perder ni un instante en explicaros como instalar Glassfish. Primero, porque es más sencillo que el asa de un cubo y, segundo; porque si yo he sido capaz de leer y comprender este pequeño ladrillete de 32 páginas, cualquiera podéis hacerlo.

Una vez instalado el Glassfish v3 y creada nuestra base de datos, tenemos que configurar un Data Source o fuente de datos que nos permita acceder y modificar la estructura creada en el punto anterior, siguiendo los siguientes pasos:

  • Cargar la librería JDBC de acceso a nuestra base de datos en el classpath de Glassfish: Para hacerlo, debemos copiar el jar de la librería en la siguiente ruta /instalación de glassfish/domains/dominio que vayamos a utilizar (normalmente, domain1)/lib. En mi caso en concreto, con Glassfish instalado en Windows, la ruta es c:\Archivos de programa\sges-v3\glassfish\domains\domain1\lib\” y ahi he copiado la librería JDBC especifica para bases de datos Oracle:  ojdbc14_g.jar.
  • Crear un nuevo conjunto de conexiones o Connection Pool en el servidor: a través de la dirección http://localhost:4848 podréis acceder a la consola de administración de Glassfish. Si navegáis por el árbol de opciones hasta Recursos >> JDBC >> Conjunto de Conexiones, veréis algunos creados por defecto en el servidor y podréis crear uno mediante el botón ‘Nuevo’. Al crear un nuevo conjunto de conexiones, nos preguntará por la Base de Datos con la que vamos a trabajar, básicamente, para que no tengamos que configurar a manubrio la clase de implementación de la interfaz java.sql.Driver. También nos pedirá que indiquemos el tipo de recurso JDBC que deseamos crear. En el segundo paso de la creación, se indica la configuración propiamente dicha, desde el número de conexiones a el host, usuario y password de la base de datos en si. Pero lo realmente importante, es la configuración de la transaccionalidad del DataSource. Para no eternizarnos explicando parámetro a parámetro lo que hay que poner, os pongo una copia de mi DataSource, configurada para una base de datos Oracle, que está en un host denominado NEDWARD (por NED FLANDERS)
Pulsa sobre la imagen para verla grandota

Pulsa sobre la imagen para verla grandota

Pulsa en la imagen para que se vea grandota

Pulsa en la imagen para que se vea grandota

  • Por último, tendréis que crear un Recurso JDBC que no es, ni mas ni menos, que un envoltorio que pondrá Glassfish sobre vuestro conjunto de conexiones y al que daréis un nombre JNDI con el que lo identificareis en vuestras aplicaciones. Os muestro, de nuevo, mi interfaz de configuración, donde he creado un Recurso JDBC con el nombre JNDI jdbc/states.
Pulsa en la imagen para que se vea grande como Australia

Pulsa en la imagen para que se vea grande como Australia

Con esto hemos acabado toda la configuración de Glassfish que necesitamos para ejecutar este ejemplo. A partir de ahora, es cuando viene el caviar… :)

Permaneced atentos a la segunda parte del artículo.

Artículos relacionados:

  1. Arquitectura de logging en Glassfish Aprende como funciona el sistema de registro o logging en...
  2. Transacciones y bloqueos en Glassfish v3 con EJB3.1 y JPA2 (III) Tercera parte del tutorial sobre como utilizar transacciones y bloqueos...
  3. Transacciones y bloqueos en Glassfish v3 con EJB3.1 y JPA2 (II) Segunda parte del tutorial sobre como utilizar transacciones y bloqueos...


free blog themes
free blog themes