Está en la página 1de 7

Laboratorio EJB

(Capa servicios )

Arquitectura de Software
Ing. Mario Linares Vásquez MSc.

El objetivo de este laboratorio es utilizar EJB 3 como tecnología para implementación de la capa
de negocio en aplicaciones Java Los conceptos planteados en clase serán interiorizados a través
de la ejecución práctica sobre un ambiente de desarrollo. En este caso se implementará un
modulo EJB que sera accedido por una aplicación standalone (de escritorio) y por una web.
Para la implementación de la cada de datos se puede utilizar el motor MySQL o Java DB
embebido en Netbeans.

La capa de negocio proporciona servicios de persistencia para el siguiente modelo de datos.

1. Acceso a Datos y Servicios.

En este medida se debe crear un proyecto Java con los entities y daos respectivos. Los
métodos de los DAOS deben recibir como parámetro el entity manager sobre el cual se invocan
las tareas de persistencia. Una vez implementados los DAOS el objetivo es crear la capa de
negocio con EJBs, con un módulo EJB con nombre EJBModule.

Ing. Mario Linares Vásquez MSc


Para crear un módulo EJB, en el asistente de proyectos de Netbeans, se debe seleccionar la
categoría Java EE y la opción EJB Module.

Una vez creado el módulo, agregue una paquete services en el cual se ubicará el
código de los EJBs y sus interfaces de negocio.

La lógica de negocio puede ser implementada mediante Application Services o con Session
Facades (en el caso que los servicios se expongan para el acceso de la capa cliente). Ambos
tipos de clases pueden ser implementados como POJOs o con EJBs. En el caso de ser
implementados como EJBs se aprovechan las bondades proporcionadas por el contenedor de
EJBS. Si el despliegue de la aplicación no se hace sobre un contenedor de EJBs, entonces la
estrategia es utilizar la estrategia de implementacion con POJOS.

Para el caso particular de este laboratorio, se implementaran los Session Facade y los
Application Services con EJBs. La idea es proporcionar servicios de tal forma que la capa vista
pueda invocar las tareas de persistencia sobre las entidades Program y Student. En el caso de
la entidad Address, se administra en cascada mediante el Programa.

Para crear EJBs en Netbeans, se puede utilizar el asistente de creación contextual, haciendo
click sobre el paquete services, y seleccionando la opción Session Bean.

Ing. Mario Linares Vásquez MSc


Agregue un Session EJB de tipo Stateless, y con interfaces remota y local, para la
entidad Student. Como este EJB va proporcionar acceso a la capa de presentación
, se debe implementar como un Session Facade. En esta medida se sugiere que el
nombre del Bean sea StudentFacade.

Ing. Mario Linares Vásquez MSc


Luego de creado el EJB, dentro del paquete services aparecerá la implementacion del bean y las
interfaces seleccionadas.

Para agregar los métodos de negocio al bean de forma rápida se puede utilizar el asistente que
se despliega con la combinación de teclas ALT + Ins. En el menú contextual aparece la opcion
Add Business Method...

Agregue métodos de negocio al StudentFacade por cada tarea de persistencia. No


olvide agregar como librería al modulo web, el proyecto donde se encuentra la
capa de acceso a datos. Estos métodos deben invocar los DAOs respectivos y las
tareas de persistencia particulares. Como los métodos de los DAOS reciben el
EntityManager, este debe instanciarse en los servicios. En el caso de los EJBs se
puede acceder a este mediante inyección de dependencia. Para inyectar un Entity
Manager en un EJB se debe incluir las siguientes líneas de código.

@PersistenceUnit
private EntityManagerFactory entityManagerFactory;
private EntityManager entityManager;

Ing. Mario Linares Vásquez MSc


Un ejemplo del método de saveStudent en el StudentFacade es el siguiente:

Ing. Mario Linares Vásquez MSc


Dado que el EntityManager es inyectado, se debe instanciar y liberar programaticamante
aprovechando el ciclo de vida de los EJB y los métodos callback. A continuación se presenta
como se realizar esto en los EJBs:

Luego de implementar los Facade para las entidades Program y Student. Agregue
una entidad Log con atributos date y description para almacenar un registro de
cualquier operación de persistencia que se realice. Adicione tambien el DAO para
el Log y un ApplicationService implementado como un Stateless EJB con interfaz
local. La razón para implementarlo como AppService, es que este servicio no va
ser accedido desde la capa presentación, los métodos de los session facade al
servicio dentro de cada uno de sus métodos de negocio. Este AppService debe
tener un método save que recibe una cadena con la descripción del log.

Ing. Mario Linares Vásquez MSc


Agregue manejo transaccional en los EJBs, haciendo uso de las anotaciones
@TransactionManagement y @TransactionAtribute.

2. Capa presentación

Los métodos de negocio de la interfaz remota de un EJB pueden ser invocados desde cualquier
aplicación Java web o desktop. Para este laboratorio se debe implementar una aplicación web
desde la cual se consuman los métodos publicados en los session facade del módulo EJB.

Para poder acceder a los EJBs desde la aplicacion web, se debe agregar el modulo EJB como
librería. Luego en los controladores de la vista se debe hacer el respectivo lookup de las
interfaces remotas:

InitialContext ctx = new InitialContext();


StudentFacadeRemote remote = (StudentFacadeRemote) ctx.lookup("StudentFacade");

Bibliografía

- D. Panda. EJB3 In action, Manning Publications, 2007.


- M. Keith. Pro EJB3: Java Persistence API, Apress, 2007.

Ing. Mario Linares Vásquez MSc