Modelos Enterprise Java Beans (EJB)

Un Bean es un componente software que tiene la particularidad de ser reutilizable y así evitar la tediosa tarea de programar los distintos componentes de nuevo. Se puede decir que existen con la finalidad de ahorrarnos tiempo al programar.
Un Bean se puede representar desde un botón, un grid de resultados, un panel contenedor o un simple campo de texto, hasta otras soluciones mucho más complejas como conexiones a bases de datos, etc.
Las EJB ofrecen numerosos Beans para Java.
Enterprise Java Beans (EJB) es una plataforma para construir aplicaciones de negocio portables, reutilizables y escalables usando el lenguaje de programación Java.

El contenedor EJB es un programa Java que trabaja en el servidor y que contiene todas las clases y objetos necesarios para el correcto funcionamiento de los EJBs.
El contenedor de componentes EJB está formado tanto por los beans como por los descriptores de despliegue que comunican nuestro trabajo con el contenedor. 
Un descriptor de despliegue se define mediante un fichero XML (descriptor del despliegue, deployment descriptor) en el que se definen todas las características del bean o con anotaciones.
Un descriptor de despliegue ofrece la información del componente a nuestro contenedor EJB y a nuestro entorno de trabajo (bases de datos, arquitectura de la aplicación, etc.).
 
Ejemplo de descriptor de despliegue web.xml:

 

Existen tres tipos de beans definidos, cada uno implementa unas características diferentes y permiten ser combinados entre si:

- Beans de Sesión (Session Beans)

En una aplicación típica, dividida en grandes capas (presentación, lógica de negocio, persistencia y base de datos), los Beans de Sesión viven en la lógica de negocio.
Hay dos grandes tipos de Beans de Sesión:

  • Stateless (sin estado)
  • Stateful (con estado)
Stateless no conserva el estado de ninguno de sus atributos de la invocación de un método a otro.
Stateful conserva el estado a lo largo de toda una sesión. Los Beans de Sesión Stateless son los únicos que pueden exponerse como servicios web.
 

- Message-Driven Beans (MDBs)

Viven en la lógica de negocio y los servicios que proveen son parecidos a los Beans de Sesión, con la diferencia de que los MDBs son usados para invocar métodos de forma asincrónica.
Cuando se produce la invocación de un método de un MDB desde un cliente, la llamada no bloquea el código del cliente y el mismo puede seguir con su ejecución, sin tener que esperar indefinidamente por la respuesta del servidor.
El sistema de mensajería asincrónica propone la utilización de una capa intermedia en la comunicación entre el creador y el consumidor del mensaje. En EJB 3, esta capa se llama MOM (Message-oriented Middleware). Básicamente, MOM es un software que permite funcionar como servidor de mensajería, reteniendo los mensajes del productor y enviándolos posteriormente al consumidor en el momento en que esté disponible para recibirlo.


- Beans de Entidad (Entities)


Existen dos tipos BMP y CMP según se gestione la persistencia por parte del bean o del contenedor. Los EJB de entidad están directamente relacionados con los datos de la aplicación, son objetos que mantienen en memoria los datos que maneja la aplicación, las entidades que disponen de persistencia. Los Beans de Entidad normalmente mapean (mantienen una relación en memoria) las tablas de una base de datos relacional, aunque también es posible que mantengan la persistencia de los datos en ficheros, como por ejemplo un xml.


Para poder configurar correctamente un Bean, debemos indicar al contenedor de EJB qué servicios debe proveer a nuestro Bean, y para ello disponemos de los descriptores de despliegue o de las anotaciones en las clases bean. 
 

Anotaciones básicas para los Session Beans

Vamos a visualizar las anotaciones básicas para los Session Beans.

@Stateful

Indica que el Bean de Sesión es con estado. Sus atributos son:
name: por defecto es el nombre de la clase pero se puede especificar otro nombre diferente.
mappedName: Indica si deseamos que el contenedor maneje el objeto de forma específica. Si incluimos esta opción nuestra aplicación podría no ser portable y no funcione en otro servidor de aplicaciones.
description: Indica la descripción de la anotación.

@Stateless

Indica que el Bean de Sesión es sin estado. Sus atributos son:
name: Por defecto el nombre de la clase pero se puede especificar otra diferente.
mappedName: Si deseamos que el contenedor maneje el objeto de manera específica. Al igual que @StateFul esta opción podría hacer que nuestra aplicación no sea portable y no funcione en otro servidor de aplicaciones.
Description: descripción de la anotación.

@Init

Especifica que el método se corresponde con un método create de un EJBHome o EJBLocalHome de EJB 2.1.
Sólo se podrá llamar una única vez a este método. Sus atributos son:
Value: indica el nombre del correspondiente método create de la interfaz home adaptada. Sólo se debe utilizar cuando se utiliza el bean anotado con un bean con estado de la especificación 2.1 o anterior y que disponga de más de un método create.

@Remove

Indica que el contenedor debe llamar al método cuando quiera destruir la instancia del Bean. Sus atributos son:
retainIfException: indica si el Bean debe mantenerse activo si se produce una excepción. Por defecto su valor es false.
@Local
Indica que la interfaz es local.

@Remote


Indica que la interfaz es remota.

@PostActivate

Invocado después de que el Bean sea activado por el contenedor.

@PrePassivate

Invocado antes de que el Bean esté en estado passivate.

Normalmente las anotaciones más empleadas en las aplicaciones serán @Stateless y @Stateful, para indicar el tipo de EJB que estemos utilizando. El resto de anotaciones se utilizarán en casos más particulares.


Roles de EJB dentro de las aplicaciones JEE

La especificación Enterprise JavaBeans está escrita para diferentes públicos, pero podría resumirse en dos niveles diferentes:

El desarrollador del cliente

Un cliente es cualquier usuario de un Enterprise JavaBean y podría ser cualquier aplicación Java del lado del cliente, un servlet o incluso otro EJB.
El desarrollador EJB
La principal responsabilidad del programador de un bean será escribir la lógica de empresa y acciones o propiedades:
  - Deben crearse archivos de clase primarios y un descriptor xml o bien, incluir anotaciones en las clases del bean. Todos estos archivos estarían empaquetados en un JAR.
  - Podríamos tener muchos beans dentro de un único archivo JAR, pero cada archivo JAR contendría únicamente un descriptor del bean xml.
  - El descriptor de implementación debe situarse en un directorio llamado META- INF y no podemos cambiarle el nombre, sigue una especificación estándar.


Estructura de EJB

Todo EJB está compuesto por dos capas.

  • Capa Interfaz
La capa Interfaz es un contrato que indica a las clases que consuman en el EJB los métodos y características de dicho EJB.

  • Capa Implementación
La capa de implementación es una clase que implementa la capa de Interfaz.
Una clase que hereda directamente de la interfaz del EJB e implementa los métodos que se hayan incluido en el contrato.

No hay comentarios:

Publicar un comentario