Documentos de Académico
Documentos de Profesional
Documentos de Cultura
¿Qué es un EJB?
Enterprise Java Beans (EJB) es una plataforma para
construir aplicaciones de negocio portables, reusables
y escalables usando el lenguaje de programación
Java. Desde el punto de vista del desarrollador, un EJB es
una porción de código que se ejecuta en un contenedor
EJB, que no es más que un ambiente especializado
(runtime) que povee determinados componentes de
servicio.
¿Qué es un EJB?
Los EJBs pueden ser vistos como componentes, desde el
punto de vista que encapsulan comportamiento y permite
reutilizar porciones de código, pero también pueden ser
vistos como un framework, ya que, desplegados en un
contenedor, proveen servicios para el desarrollo de
aplicaciones enterprise, servicios que son invisibles para
el programador y no ensucian la lógica de negocio con
funcionalidades trasversales al modelo de dominio (a
menudo requerimientos no funcionales o aspectos).
¿Qué es un EJB?
En la especificación 3.0, los EJB no son más que
POJOs (clases planas comunes y corrientes de Java)
con algunos poderes especiales implícitos, que se
activan en runtime cuando son ejecutados en
un contenedor de EJBs.
En Resumen
Componentes gestionados por un contenedor del servidor
de aplicaciones que permite gestionar el acceso a recursos
(bases de datos, colas de mensajes, ficheros, etc) y
proporcionar servicios (seguridad, transacciones,
mensajería, nombres) de forma sistemática y optimizada
La utilización de EJB simplifica el desarrollo de
aplicaciones web y permite construir aplicaciones
escalables
Los servicios que debe proveer el contenedor
de EJBs
Los servicios que debe proveer el contenedor
de EJBs
Los servicios que debe proveer el contenedor de EJBs deben ser
especificados por el programador a través de metadata de
configuración que puede escribirse como:
Anotaciones de Java5 intercaladas en el código de las clases.
Descriptores XML (archivos XML separados).
A partir de EJB 3 se puede usar cualquiera de estas dos técnicas. Las
técnicas no son exclusivas, pueden coexistir anotaciones con
descriptores XML y, en el caso de superponerse la metadata, los
XML tendrán prioridad y podrán sobreescribir las anotaciones.
Session Beans
Entity Beans
Tipos de EJBs
Session Beans: en una aplicación enterprise típica, dividida
en cuatro grandes capas o layers (presentación, lógica de
negocio (business logic), persistencia y base de datos
(DBMS)), los Session Beans viven en la lógica de negocio.
Hay dos grandes tipos de Session Beans: Stateless y Stateful,
el primero no conserva el estado de ninguno de sus atributos
de la invocación de un método a otro y el segundo conserva
el estado a lo largo de toda una sesión. Los Session Beans
Stateless son los únicos que pueden exponerse como web
services.
Session Beans
Los Session Beans son invocados por el cliente con el
propósito de ejecutar operaciones de negocio específicas,
como por ejemplo podría ser chequear la historia
crediticia del cliente de un banco. El
nombre sesión implica que la instancia del bean estará
disponible durante una unidad de trabajo (unit of work)
y no sobrevivirá a una caída del servidor.
Un bean de sesión sirve para modelar cualquier
funcionalidad lógica de una aplicación.
Session Beans
EJB de Sesión (Session EJBs): gestionan el flujo de la información en
el servidor. Generalmente sirven a los clientes como una fachada de los
servicios proporcionados por otros componentes disponibles en el
servidor. Puede haber dos tipos:
Con estado (stateful). En un bean de sesión con estado, las variables de instancia
del bean almacenan datos específicos obtenidos durante la conexión con el
cliente. Cada bean de sesión con estado, por tanto, almacena el estado
conversacional de un cliente que interactúa con el bean. Este estado
conversacional se modifica conforme el cliente va realizando llamadas a los
métodos de negocio del bean. El estado conversacional no se guarda cuando el
cliente termina la sesión.
Sin estado (stateless). Los beans de sesión sin estado son objetos distribuidos
que carecen de estado asociado permitiendo por tanto que se los acceda
concurrentemente. No se garantiza que los contenidos de las variables de
instancia se conserven entre llamadas al método.
¿Cuando usar un session bean?
En general, se debería usar un session bean cuando:
En un momento determinado, sólo un cliente tiene acceso a la instancia del bean.
El estado del bean no es persistente, existiendo solamente por un período corto
de tiempo (tal vez un par de horas)
El bean implementa un web service.
Los Stateful Session Beans son apropiados si se cumple alguna de las siguientes
condiciones:
El estado del bean representa la interacción entre el bean y un cliente específico.
El bean necesita mantener información acerca del cliente a través de varias invocaciones
a varios métodos.
El bean intermedia entre el cliente y otro componente de la aplicación, presentando al
cliente una vista simplificada.
El bean maneja el workflow de varias aplicaciones.
Para mejorar la performance, se debe escoger stateless session bean si se cumple alguna
de las siguientes condiciones:
El estado del bean no tiene datos específicos del cliente
En una invocación a un método, el bean ejecuta tareas específicas para todos los
clientes.
Session Beans
Ciclo de vida de un Stateful Session Bean
Ciclo de vida de un Stateful Session Bean
Mientras este en la etapa “ready”, el contenedor EJB puede decidir pasivar el bean,
moviendo de la memoria al almacenamiento secundario (usualmente, el disco
rígido). El contenedor EJB invoca el método anotado con @PrePassivate, si existe,
inmediatamente antes de pasivarlo. Si el cliente invoca un método business mientras
el EJB esta en el estado pasivado, el contenedor ejecutara el método anotado con
@PostActivate, si existe, y luego mueve al bean al estado “ready”.
Hay tres maneras de que termine el ciclo de vida de un stateful session bean:
Que se llame a un método anotado con la anotación @Remove, lo que determina que si se llama a dicho
método, al terminar la ejecución del mismo se destruye el bean. NOTA: la anotación @Remove no
garantiza que el método sea llamado, sólo determina que si se lo llama, una vez terminada su ejecución
se destruya el bean.
Que se llame al método remove() en un EJBObject creado a partir de la interfaz Adapted Home del
bean.
Que un método de negocios del bean lance una RuntimeException.
Al final del ciclo de vida, es decir, al darse cualquiera de estas tres condiciones, el
contenedor EJB ejecuta el método anotado con @PreDestroy, si existe. Luego de
esto, el bean esta listo para ser recolectado por el GC y no puede volver a llamarse
salvo que se cree una nueva instancia del mismo
Session Bean
Ciclo de vida de un Stateless Session Bean: Debido a
que un bean stateless nunca es pasivado, su ciclo de vida
tiene solo dos etapas: “nonexistent” y “ready”. La figura a
continuación muestra las etapas de un session bean
stateless.
Ciclo de vida de un Stateless Session Bean
El cliente inicia el ciclo de vida cuando obtiene una
referencia al bean stateless. El contenedor “inyecta” las
dependencias y luego invoca al método anotado con
@PostConstruct, si existe. Al final del ciclo de vida, el
contenedor EJB llama al método anotado con
@PreDestroy, si existe. Luego de esto, la instancia del
bean esta lista para ser recolectada por el GC.
Tipos de EJBs
Message-Driven Beans (MDBs): también viven en la lógica de
negocio y los servicios que proveen son parecidos a los Session
Beans, 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. Los MDBs encapsulan el popular
servicio de mensajería de Java, JMS. Hay una analogía muy
interesante en el libro que dice que los MDBs son a JMS lo
que JDBC es a SQL.
Message-Driven Beans (MDBs)
Los MDBs también procesan lógica de negocio, pero un cliente
nunca invoca a un método de un MDB directamente. El
sistema de mensajería asincrónica propone la utilización de una
capa intermedia en la comunicación entre el productor y el
consumidor del mensaje. En EJB 3, esta capa se
llama MOM (Message-oriented middleware).
Básicamente la 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. (Es un
funcionamiento similar al de un servidor de correo
electrónico.) Algunos ejemplos típicos de servidores de
mensajería son WebSphere MQ de IBM,SonicMQ, Advanced
Queueing de Oracle y TIBCO.
Message-Driven Beans (MDBs)
Diferencias con los Session Beans
¿Que hace Diferente a un Message con respecto un Session?
La mayor de las diferencias es que el cliente no accede a los
message beans a través de interfaces. A diferencia de un
session bean, los message beans solamente tienen una clase
bean.
Igualmente, en muchas maneras, un message bean se asemeja a
un stateless session bean:
Un message bean no mantiene estado conversacional
Todas las instancias de un message bean son equivalentes.
Un único message bean puede procesar múltiples clientes.