Proyecto de Integración
 

Integración con GlassFish y EJBs

Vamos a crear una nueva versión del proyecto de Biblioteca basada en una arquitectura EJB. Se debe desarrollar una nueva versión del proyecto, partiendo del último Sprint del proyecto de integración, en la que:

Tendrás que el proyecto desde cero, refactorizando las capas de datos y de lógica de negocio de la última solución (proyecto Sprint), que tienen una estructura muy similar a la que será la solución de EJB.

En general, los objetivos de esta sesión de integración son:

Pasos

Pasos a realizar:

  1. Crear el dominio de GlassFish
  2. Descargar el último proyecto de integración (Sprint)
  3. Crear el proyecto y subproyectos Maven
  4. Crear la capa de datos:
    • Crear la base de datos y configurar la fuente de datos en el dominio
    • Crear las entidades, definiendo como proveedor de JPA el que viene por defecto en NetBeans
    • Crear los EAO como EJBs utilizando anotaciones para obtener el entity manager
  5. Crear la capa de lógica de negocio como EJBs que acceden a los EAO de forma local, haciendo remotos los métodos relacionados con el bibliotecario
  6. Crear una aplicación cliente
Nota
Todos los proyectos creados se deberán subir al directorio trunk/proyint-jbib-enterprise del repositorio SVN del grupo.

Configuración del dominio GlassFish

Debes crear un dominio nuevo llamado jbib-domain. Créalo sin password en el puerto 9000 con el comando:

./asadmin create-domain --portbase 9000 jbib-domain

Una vez creado añade un nuevo servidor a NetBeans utilizando este nuevo dominio. Llámalo por ejemplo Server jbib:

Nuevo servidor

Lánzalo y abre una consola de administración en http://localhost:9048:

Consola de administración

Proyecto proyint-jbib-enterprise

Crea un nuevo proyecto Maven proyint-jbib-enterprise que va a contener los siguientes proyectos:

  • jbib-enterprise-ejb: contendrá los EAO y los BO refactorizados en EJBs de sesión
  • jbib-enterprise-web: sencilla aplicación web que comprueba el funcionamiento de las capas anteriores
  • jbib-enterprise-ear: EAR que contiene los JAR y WAR de los proyectos anteriores

Empieza descargando la última versión del proyecto de integración (el resultado del Sprint) en el escritorio, por ejemplo. Elimina todos sus directorios .svn para desconectarlo del repositorio SVN:

cd DIR_PROYECTO
find ./ -name ".svn" | xargs rm -Rf

Abre el proyecto padre en NetBeans con la opción Open Project... >. Marca la casilla para que abra también los proyectos requeridos. NetBeans detecta los proyectos como proyectos Maven y los abre correctamente. No vamos a trabajar con estos proyectos directamente, sino que vamos a copiar sus clases en los nuevos proyectos que vamos a crear desde cero.

Crea en NetBeans los proyectos:

New Project > Maven > Enterprise Application:

  • Project Name: proyint-jbib-enterprise
  • Group Id: org.especialistajee.proyint
  • Version: 1.0-SNAPSHOT
  • Package: org.especialistajee.jbib

Cambia el nombre de los módulos, quitándoles el prefijo proyint:

  • EJB Module: jbib-enterprise-ejb
  • Web App Module: jbib-enterprise-web
  • Assembly module: jbib-enterprise-ear

NetBeans creará los proyectos automáticamente:

La estructura de ficheros que crea NetBeans es la siguiente:

Creación de la fuente de datos XA

Crea la base de datos biblioteca y llénala con el script biblioteca.sql:

mysql -u root -p < biblioteca.sql

Configura la fuente de datos en GlassFish en el dominio jbib-domain como una fuente de datos XA y dale como nombre jdbc/jbib. Copia el driver JDBC de MySQL en el directorio lib del dominio. Ahora ya puedes lanzar GlassFish y conectarte a su consola de administración. Es recomendable lanzarlo desde NetBeans, para poder visualizar sus mensajes en el panel de Output.

Crea en GlassFish una fuente de datos de tipo XA conectada a la base de datos biblioteca. Primero crea el conjunto de conexiones BibliotecaPool:

Define los siguientes parámetros:

  • user: root
  • password: especialista
  • URL: jdbc:mysql://localhost:3306/biblioteca

Termina creando la nueva fuente de datos JDBC con el nombre jdbc/jbib basada en el conjunto de conexiones que acabas de crear.

Capa de datos

Tienes ahora que crear en el proyecto EJB jbib-enterprise-ejb todas las entidades JPA. Se podría haber hecho en un proyecto indpendiente e importar el JAR en el EAR, pero por simplicidad vamos a incluir todas las clases en el mismo paquete ejb. También crearemos todos los EJB en un mismo paquete (y en un mismo JAR) para facilitar su localización y acceso local.

Añade en el proyecto EJB una unidad de persistencia utilizando el asistente de NetBeans, escogiendo como proveedor de persistencia el de Hibernate (JPA 2.0) y el nombre del data source anterior (jdbc/jbib).

Crea (copiándolas del proyecto jbib-modelo-spring y modificándolas) en el proyecto ejb las clases de utilidad, las entidades JPA y las clases EAO en los mismos paquetes originales.

Modifica el POM (copiando los elementos necesarios del proyecto a migrar) y añade las dependencias con las librerías necesarias. No debes añadir ninguna librería de Spring.

Modifica todos los EAO definiéndolos como EJB sin estado y obteniendo el entity manager por inyección de dependencias con la anotación @PersistenceContext. Puedes usar la característica de EJB 3.1 que permite definir EJBs con acceso local sin interfaces para no tener que crear las interfaces de los EAO.

Capa de lógica de negocio

Crea (copiándolas y modificándolas del proyecto a migrar) en el proyecto EJB las clases de negocio en el paquete org.especialistajee.jbib.bo.

Modifica todos los BO definiéndolos como EJBs con interfaz local y accediendo a los EAO como EJB locales. Define una interfaz remota para el LibroBO e incluyela en el EJB. Acuérdate también de llamar a setRollbackOnly en el caso en que captures una excepción en algún método de un EJB.

Aplicación cliente

Crea una sencilla aplicación cliente por línea de comando permita:

  • Listados y búsquedas de libros
  • Actualización de libros

Deberás crear el proyecto Java jbib-enterprise-client y añadirle el JAR del proyecto EJB, el JAR gf-client.jar (situada en el directorio lib de la instalación de GlassFish) y la librería (conjunto de JARs predefinidos por NetBeans) Hibernate JPA (esto último con la opción Add Library).

Referencias