Enterprise JavaBeans v.3 (EJB3)

Los EJB forman parte del API del J2EE desarrollado por Sun Microsystems y se centran en lógica de negocio (recordamos que en las aplicaciones cliente servidor basadas en sistemas distribuidos existen 3 capas : presentación (se encarga de la visualización), lógica de negocio(su nombre lo indica todo) y de datos(se encarga del almacenamiento de datos:SGBD)). Una vez comprendido lo anterior (arquitecturas multicapas), ahora, podemos definir lo que es un EJB: Modelo de componenetes distribuido estándar del lado del servidor. Los EJB´s se encuentran ubicados dentro del contenedor EJB del servidor de aplicaciones,en nuestro caso JBOSS AS.

Historia de los EJB:

EJB 1.0: La especificación original .
EJB 1.1: La primera incluida dentro de J2EE
EJB 2.0: Incluida en J2EE 1.3, añadía las interfaces Locales y los Message-Driven beans.
EJB 2.1: Incluida en la última revisión de J2EE, la 1.4.


Hasta ahora, el manejo y configuración de los EJB´s se basaba en ficheros XML, sin embargo, la última versión,(EJB 3.0) se caracteriza porque permite el manejo con anotaciones. EJB3 está incluida en JEE5.0. En realidad, un EJB3 es un POJO ( para comprender su significado, buscar dicha entrada en este blog) más anotaciones (tales como @Entity,@StateFull,...)(También hay una entrada en este blog sobre las anotaciones). Al ser POJO, cada objeto ha de llevar el constructor por defecto, siendo éste implícitamente ( es insertado automáticamente) o explícitamente ( en caso de que necesitemos constructores con parámetros).

A continuación, veamos el proceso de creación de un EJB:
Hay 3 tipos de EJB:

A) EJB de entidad (Entity EJBs): No explicado todavía.


B) 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. Hay dos tipos de EJB de entidad:
  1. Con estado (StateFul). Los beans de sesión con estado son objetos distribuidos que poseen un estado. El estado no es persistente, pero el acceso al bean se limita a un solo cliente. Para la creación de un EJB statefull se usan llamadas RMI.


  2. Sin estado (StateLess). Los beans de sesión sin estado son objetos distribuidos que carecen de estado asociado ( carecen de atributos o propiedades ) 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, es decir, el componente (objeto) no está asociado al usuario (sólo es creada una única instancia como máximo). Un objetos Stateless también puede usarse para modificar alguna propiedad de un objeto StateFull. Para la creación de un EJB stateless se usa pooling web services.

En el caso de JBOSS SEAM, este distingue 3 tipos de EJB de sesión con estado:

  • Objeto Página: Guarda información mientras la página este activa. Se destruye cuando pasa un cierto tiempo o cuando el usuario a cambiado de página web.

  • Objeto evento: Ocurre cuando el cliente modifica o actualiza algo en la ventana del navegador.

  • Objeto conversación(Task): El cliente pone a próposito que inicie un servicio para conseguir su objetivo.

C) EJB dirigidos por mensaje (Message-driven EJBs(MDB)): : No explicado todavía.

Servicios que nos proporcionan los EJB
A) Messaging (Se trata de una comunicacion asíncrona).
B) Inyección de dependencias.
C) Pooling.
D) Thread-safely.
E) Mantenimiento del estado.
F) AOP-Interceptores. De esto se habla en otra entrada.
G) RMI (Remote Invocation Method).
H) Web Services.
I) Transacciones.
J) Seguridad (gracias a las anotaciones).

He aquí un esquema y su relación con las aplicaciones J2EE:


1 comentario:

Juan Antonio Ruz dijo...

solamente en la comunicación remota (no en la creación) de EJBs statefull se usan llamadas RMI.

La creación=ciclo de vida(lifecycle) de EJBS es responsabilidad del contenedor de EJB. Y más o menos es crear un objeto nuevo myEjb=new MiEjbb(), y mantenerlo interceptado para gestión/inyección de los servicios j2ee

Los comentarios sobre el seam están un poco raros... son son tipos de EJB de session diferentes, sino que gestiona de forma ligeramente diferente el ciclo de vida de los ejbs para crear nuevos ámbitos/scopes tales como conversación, pagina, longrunning conversation ...