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)
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.
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
- Capa Implementación
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