You are on page 1of 31

EJBs

Enterprise JavaBeans

Que son los EJBs?

Enterprise JavaBeans (EJB) es una arquitectura de componentes de servidor que simplifica el proceso de construccin de aplicaciones de componentes empresariales distribuidos en Java
l

Con su utilizacin es posible escribir aplicaciones escalables, fiables y seguras sin escribir cdigo de infraestructura La existencia de infraestructura permite un desarrollo ms rpido de la parte servidora

Dado que son componentes, permiten desarrollar aplicaciones portables entre distintas plataformas (son Java) y servidores de aplicaciones (especificacin estndar).

PDF Creator - PDF4Free v2.0

http://www.pdf4free.com

Enterprise JavaBeans

Un EJB es un componente software que se ejecuta del lado del servidor en una aplicacin multicapa. Los clientes del EJB acceden a l por medio de una interfaz que esconde los detalles de implementacin del componente. Esta interfaz debe cumplir la especificacin EJB.
l

La especificacin fuerza la presencia de unos determinados mtodos que permitirn al contenedor de EJBs manejar los componentes y su ciclo de vida.

Categoras de EJBs

3 tipos de Enterprise JavaBeans:


l

Entity Beans: representan entidades de negocio y proveen acceso a datos a travs de mtodos. Se basan en la idea del mapeo objeto/relacional Session Beans: pensados para modelar procesos de negocio que son accedidos de manera sncrona Message-driven Beans: pensados para modelar procesos de negocio que son accedidos de manera asncrona, permiten el uso de JMS desde EJBs

PDF Creator - PDF4Free v2.0

http://www.pdf4free.com

Entity EJBs

Dos tipos:
l

Un Entity EJB representa en cada momento a una entidad en base de datos. Muy acadmicos Presentan problemas de rendimiento.

BMP (Bean Managed Persistence) Se delega en el desarrollador las tareas de persistir, buscar y recuperar las entidades. CPM (Container Managed Persistence) La persistencia la gestiona el contenedor de forma que el desarrollador no se preocupa de las sentencias SQL de insercin, recuperacin, etc.

Session EJBs

Dos tipos:
l

Stateful (Con estado)


El contenedor garantiza el mantenimiento del estado del componente entre distintas invocaciones (se serializan y deserializan) El contenedor de EJBs no garantiza que un mismo EJB guarde su estado entre dos invocaciones del mismo cliente. Son pooleables y ms ligeros que los Stateful

Stateless (Sin estado)

PDF Creator - PDF4Free v2.0

http://www.pdf4free.com

Message Driven Beans

Incorporados en la especificacin 2.0. Pensados para mensajera asncrona. Funcionan sobre JMS (manejo de colas de mensajes, publish & subscribe) Interesantes para integracin de sistemas.

PDF Creator - PDF4Free v2.0

http://www.pdf4free.com

EJBs como Objetos distribuidos

Un objeto distribuido es un objeto invocable desde un sistema remoto.

Middlewares.

Herramientas que proporcionan servicios para el desarrollo de sistemas distribuidos.


l

Ej, los ORBs CORBA Presencia explcita:


Clasificacin:
l

El componente de negocio necesita realizar invocaciones explcitas a la API del middleware. Difcil de desarrollar y mantener Ej: CORBA, TUXEDO, DCOM, RMI, RPCs, etc. La interaccin con las APIs no la realiza el componente de negocio desarrollado, sino que la gestiona el middleware al que se le solicitan los servicios de forma declarativa (configuracin, descriptores de servicios, etc.). Ej: EJBs, CCM, .NET, etc.

Presencia implcita:

PDF Creator - PDF4Free v2.0

http://www.pdf4free.com

Middlewares Explcitos

Middlewares implcitos

PDF Creator - PDF4Free v2.0

http://www.pdf4free.com

Estructura EJB

Un EJB no es una sola clase, sino un conjunto de clases, interfaces y recursos:


l l l l l l l

El bean de empresa o bean de negocio (Enterprise Bean) El EJB Object Las interfaces Remotas. El Objeto Home Los interfaces Locales Descriptores de Despliegue Recursos especficos del servidor de aplicaciones concreto que estemos empleando.

El Bean de Empresa o Negocio

Se trata de implementacin en s del objeto distribuido. Dependiendo del tipo de EJB, esto ser
l l l

Implementacin de reglas de negocio en el caso de EJBs de sesin. Lgica de persistencia en el caso de los Entity EJBs. Lgica de negocio orientadas a mensajes.

La especificacin determina que estas clases deben cumplir una serie de interfaces.
l

Javax.ejb.EnterpriseBean Esta interfaz funciona nicamente como marca para que el contenedor sepa que realmente se trata de un EJB. Extiende Serializable. Cada tipo de EJB cuenta con un interfaz ms especfico que extiende al de EnterpriseBean.

PDF Creator - PDF4Free v2.0

http://www.pdf4free.com

El EJB Object

Representa la capa de indireccin que intercepta las invocaciones remotas al EJB y gestiona los servicios implcitos del contenedor de ejbs. Objeto inteligente que implementa la lgica intermedia que el contenedor de EJBs requiere antes de que una invocacin a mtodo sea servida por el bean de negocio. Forman parte del contenedor de EJBs. Se generan mediante las herramientas facilitadas por cada contenedor de EJBs.

El EJB Object

PDF Creator - PDF4Free v2.0

http://www.pdf4free.com

Las interfaces Remotas


Son los contratos entre el cliente del EJB y el bean de negocio. Estn sujetas a la especificacin y deben cumplir ciertas reglas.
l

Ej, Todas deben extender la interfaz javax.ejb.EJBObject

En la interfaz remota se publican todos los mtodos del bean de negocio que se quieran invocar remotamente. La interfaz remota es implementada por el EJB Object, el cual es generado automticamente por el contenedor de EJBs.

El Objeto Home

El cliente no puede instanciar directamente un objeto remoto, dado que se encuentran en otra mquina distinta. Debido al principio de transparencia, la ubicacin del cliente es independiente de la localizacin del objeto remoto. Las instancias de EJBs se obtienen por medio de factoras de objetos (Patrn de diseo Factory [GOF94]). La factora es la responsable de instanciar, buscar y destruir los objetos. l objeto home es la factora para la obtencin de referencias a EJBs.

PDF Creator - PDF4Free v2.0

http://www.pdf4free.com

La interfaz Home

Los objetos home son propios y especficos de cada fabricante de contenedores, son autogenerados y forman parte del contenedor. El desarrollador debe aportar una interfaz java que extienda la interfaz javax.ejb.EJBHome

Las interfaces locales


Aadidas en la versin 2.0 de la especificacin EJB. Solventan el problema de la sobrecarga cuando el EJB se ejecuta en la propia mquina del cliente. Permiten invocar al EJB como si se tratara de un objeto local, tratando con un Objeto Local. El Objeto Local realiza las tareas de middleware que le corresponderan al EJB Object, y luego le cede el control al bean de negocio. De esta forman, se evitan las tareas propias a la invocacin remota (strubs, serializacin, etc.). Son opcionales Extienden la interfaz javax.ejb.EJBLocalObject y su factora javax.ejb.EJBLocalHome.

PDF Creator - PDF4Free v2.0

http://www.pdf4free.com

10

Las interfaces locales

Efectos laterales de su uso


l

Si queremos distribuir el objeto, es necesario tocar el cdigo fuente, puesto que manejamos interfaces distintas. Las interfaces locales, en pos del mximo rendimiento, manejan paso de parmetros por referencia en lugar de por valor. Esto implica un cambio importante en la semntica del cdigo y es una fuente importante de errores.

En consecuencia es interesante emplear el patrn business delegate y resolver el servicio por medio de configuracin externalizada (XML, BBDD, etc).

Descriptores de Despliegue

Especifica las propiedades y servicios del EJB de forma declarativa. Describe como ha de ser desplegado el EJB en el contenedor, y como ha de ser manejado:
l l l l

Ciclo de vida Sistema de persistencia Control de transacciones Servicios de seguridad.

Es un fichero XML: ejb-jar.xml Habr uno por paquete de despliegue (fichero jar) y puede declarar varios EJBs de distintos tipos.

PDF Creator - PDF4Free v2.0

http://www.pdf4free.com

11

Recursos especficos del servidor de aplicaciones


Ficheros propios del servidor Fuera del estndar J2EE Cada servidor describe y exige, por ejemplo, su propio descriptor de despliegue (adems del ejbjar.xml). Normalmente, los servidores de aplicaciones facilitan herramientas para realizar el despliegue y confeccionar los descriptores.

Empaquetado de EJBs

Se realiza en ficheros JAR Uno o ms EJBs por cada JAR

PDF Creator - PDF4Free v2.0

http://www.pdf4free.com

12

Desarrollo EJBs
Hola Mundo!

Como se hara con EJB 2.0

Pasos a seguir

Escribir las clases java necesarias:


l l l

Interfaces local (opcional) y remota La clase del bean de negocio El interfaz home

Escribir el descriptor de despliegue, y el propio del contenedor en caso de que fuera necesario. Compilar las clases java. Desplegar el JAR en el contendor. Desarrollar un programa cliente para comprobar el funcionamiento.

PDF Creator - PDF4Free v2.0

http://www.pdf4free.com

13

Desarrollo de la interfaz remota.


La interfaz remota contiene todos los mtodos de negocio del bean Consideraciones
l l

Extiende javax.ejb.EJBObject Los mtodos de negocio que publiquemos en la interfaz remota deben lanzar la excepcin java.rmi.RemoteException. Creamos en un directorio vaco el fichero HolaMundo.java a mano, con el notepad. Publicamos el mtodo saludo que recibe un String (nombre) y retorna otro String.

Pasos:
l l

Desarrollo de la interfaz remota

PDF Creator - PDF4Free v2.0

http://www.pdf4free.com

14

Desarrollo de la interfaz local.


La interfaz local tambin contiene los mtodos de negocio del bean Consideraciones
l l

Extiende javax.ejb.EJBLocalObject Los mtodos de negocio que publiquemos en la interfaz local no tienen porqu lanzar la excepcin java.rmi.RemoteException. Creamos en un directorio vaco el fichero HolaMundoLocal.java. Publicamos el mtodo saludo que recibe un String (nombre) y retorna otro String.

Pasos:
l l

Desarrollo de la interfaz local

PDF Creator - PDF4Free v2.0

http://www.pdf4free.com

15

Desarrollo del interfaz Home


El interfaz home describe la factora de EJBs. Tiene mtodos para crear y destruir objetos EJB La implementacin de la interfaz es el objeto home, y ser generada por las herramientas del contenedor. Consideraciones:
l

l l

El mtodo create es el mtodo que los clientes deben emplear para obtener una referencia al EJB. Se emplea para inicializar el bean. Lanza java.rmi.RemoteException y java.ejb.CreateException. Extiende javax.ejb.EJBHome Crear el fichero HolaMundoHome.java para la interfaz que extienda javax.ejb.EJBHome Publicar el mtodo HolaMundo create() que lance ambas excepciones.

Pasos:
l l

Desarrollo del interfaz Home

PDF Creator - PDF4Free v2.0

http://www.pdf4free.com

16

Desarrollo del interfaz Home Local

Las diferencias con el interfaz Home son,


l l

La interfaz local extiende EJBLocalHome en lugar de EJBHome. El mtodo create ya no tiene porqu lanzar una RemoteException.

El objeto devuelto por el mtodo create ser del tipo HolaMundoLocal, es decir, un objeto no remoto que cumple la interfaz Local que acabamos de definir.

Desarrollo del interfaz Home Local

PDF Creator - PDF4Free v2.0

http://www.pdf4free.com

17

Desarrollo del bean de negocio


Creamos el fichero HolaMundoBean.java La clase debe implementar javax.ejb.SessionBean Mtodos obligatorios:


l l l l l l

public void ejbActivate() {} public void ejbPassivate() {} public void setSessionContext(javax.ejb.SessionContext context){} public void unsetSessionContext() {} public void ejbRemove() {} public void ejbCreate() {} que lanza una javax.ejb.CreateException public String saludo (String mensaje) {return Hola mundo +mensaje;}

Y el mtodo de negocio
l

Desarrollo del bean de negocio

PDF Creator - PDF4Free v2.0

http://www.pdf4free.com

18

El contexto de los EJBs

El contenedor nos facilita el contexto invocando el mtodo setSessionContext( ); Es la va de comunicacin entre los EJBs y el contenedor A travs del contexto podemos recuperar informacin del contenedor de EJBs (ej, credenciales de seguridad), modificar su status, manejar transacciones, etc.

Bean

Contexto

Session Bean EntityBean

SessionCont ext EntityContex t MessageDriv enContext

Message Driven Beans

El contexto de los EJBs

PDF Creator - PDF4Free v2.0

http://www.pdf4free.com

19

Generar el descriptor de despliegue ejb-jar.xml


Describe el despliegue que el contenedor ha de hacer con los EJBs del jar. Uno por cada fichero jar. Lo metemos en el directorio META-INF. Permiten especificar atributos de los beans de forma declarativa en lugar de por programa. Deberemos declarar para nuestro bean:
l l l l l l l l

ejb-name: es el nick del ejb. home: nombre cualificado completo de la interfaz Home del bean. remote: nombre cualificado completo de la interfaz remota. local-home: nombre cualificado completo de la interfaz Home local. local: nombre cualificado completo de la interfaz local ejb-class : nombre cualificado completo del bean de negocio session-type: Statefull/Stateless transaction-type: Container

Ejb-jar.xml
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" " http://java.sun.com/dtd/ejbjar_2_0.dtd"> <ejb-jar> <enterprise-beans> <session> <ejb-name>HolaMundo</ejb-name> <home>HolaMundoHome</home> <remote>HolaMundo</remote> <local-home>HolaMundoLocalHome</localhome> <local>HolaMundoLocal</local> <ejb-class>HolaMundoBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transactiontype> </session> </enterprise-beans> </ejb-jar>

PDF Creator - PDF4Free v2.0

http://www.pdf4free.com

20

Descriptor de despliegue de jboss. Jboss.xml

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 3.0//EN" "http://www.jboss.org/j2ee/dtd/jboss_3_0.dtd"> <jboss> <enterprise-beans> <session> <ejb-name>HolaMundo</ejb-name> <jndi-name>HolaMundo</jndi-name> </session> </enterprise-beans> <resource-managers> </resource-managers> </jboss>

Tambin en el directorio META-INF.

Construccin del JAR


Compilamos las clases java. Invocamos jar cf HolaMundo.jar * El * indica que clases queremos meter dentro del JAR. Arrancamos jboss ejecutando run en el directorio bin Copiamos el jar al directorio deploy/default Comprobamos en la ventana de comandos de JBOSS el despliegue de HolaMundo.jar Comprobamos en la consola jmx que el EJB est publicado.

PDF Creator - PDF4Free v2.0

http://www.pdf4free.com

21

Invocacin de EJBs

Hay dos posibles tipos de clientes para invocar a un EJB:


l

Clientes Java RMI-IIOP. Se sirven de JNDI para localizar a travs de la red los objetos que requieren, y de la JTA (Java Transaction API) para el control de las transacciones. Cliente CORBA Los clientes pueden ser aplicaciones CORBA estndar. Esto permite la invocacin de un EJB desde otro lenguaje distinto como C++. Emplean COS Naming (Servicio de nombrado de CORBA) para localizar objetos, y CORBA OTS para el control del transacciones.

Pasos del cliente


1. 2. 3. 4.

Para invocar a un EJBs, tanto en clientes CORBA como RMI-IIOP: Localizar el objeto Home o factora Emplear el objeto Home para obtener una referencia remota al EJB Invocar los mtodos del negocio del EJB Liberar el EJB

PDF Creator - PDF4Free v2.0

http://www.pdf4free.com

22

Invocacin del EJB. Localizacin del Home


El cliente no tiene porqu conocer la localizacin del objeto Home Lo localiza por medio de un servicio de nombrado o servicio de directorio al que accede por medio de JNDI Esto aumenta la portabilidad del cliente aunque siempre tendremos que saber la localizacin del rbol JNDI.

Invocacin del EJB

PDF Creator - PDF4Free v2.0

http://www.pdf4free.com

23

Invocacin del EJB

Inicializamos el contexto inicial


Hashtable props = new Hashtable(); props.put(InitialContext.INITIAL_CONTEXT_FACTORY ,"org.jnp.interfaces.NamingContextFactory"); props.put(InitialContext.PROVIDER_URL, "jnp://127.0.0.1:1099"); InitialContext initialContext = new InitialContext(props);

Y localizamos el objeto home


HolaMundoHome home = (HolaMundoHome) initialContext.lookup( "HolaMundo" );

Invocacin del EJB

Ya podemos crear el EJB a partir de la factora e invocar su mtodo de negocio.


//Obtenemos la referencia al EJB de la factora... HolaMundo holaMundo = home.create(); //Ya podemos invocar el mtodo de negocio... System.out.println( holaMundo.saludo("Homer Simpson"));

PDF Creator - PDF4Free v2.0

http://www.pdf4free.com

24

Y la invocacin a travs de la interfaz Local?

Si estamos en la misma mquina porqu no funciona? La interfaz local slo puede ser empleada para acceder a un EJB si el cliente se encuentra en la misma mquina virtual (JVM) que el EJB, no en la misma mquina fsica. Por ejemplo, un EJB puede invocar a otro EJB del mismo contenedor por medio de su interfaz local.

Ahora ... EJB 3.0


Objetivos de J2EE: Desarrollo rpido y productivo de componentes de negocio EJBs 2.x: l Demasiado complicados de desarrollar l Ejb-jar sobrecargado EJB 3.0: Incorpora o se aprovecha de dos nuevos modelos: l Metadatos de Java (incorporados en la versin 1.5) l Modelo de persistencia Hibernate.

PDF Creator - PDF4Free v2.0

http://www.pdf4free.com

25

Anotaciones EJB

En EJB 3.0 se reducen considerablemente las tareas que el desarrollador del bean debe realizar EJB 3.0 todos los beans son POJOs con anotaciones EJB. Mediante anotaciones: l Se define el interfaz del bean l El mapeo O/R l Referencias a recursos. l Cualquier cosa que antes ponamos en los descriptores. El descriptor desaparece, junto con las interfaces home.

Nuevo sistema de persistencia


((POJO + anotaciones) + EntityManager ) asociado a un contexto de persistencia

Relaciones en los entity beans:


l

Especificadas tambin mediante anotaciones.

PDF Creator - PDF4Free v2.0

http://www.pdf4free.com

26

Stateless Session Beans


import javax.ejb.*; @Stateless @Remote public class HolaMundoBean { public String saludo(String mensaje) { return "Hola +mensaje; } }

Message Driven Beans

Es el nico que est obligado a cumplir una interfaz concreta:

javax.jms.MessageListener

No implican cambios significativos

PDF Creator - PDF4Free v2.0

http://www.pdf4free.com

27

Entity Beans

@Entity public class Order { private Long id; private int version; @Id(generate=AUTO) public Long getId() { return id; } public void setId(Long id) { this.id = id; } @Version protected int getVersion() { return version; } protected void setVersion(int version) { this.version = version;

Se declaran mediante @Entity. Todas los atributos son persistentes salvo los marcados como @Transient.

Relaciones

Unidireccionales o bidireccionales Cualquier combinacin de cardinalidad.

@ManyToOne public Customer getCustomer() { return cust; } public setCustomer(Customer cust) { this.cust = cust; }

PDF Creator - PDF4Free v2.0

http://www.pdf4free.com

28

Mapeo O/R

Inspirado en Hibernate El mapeo a las columnas de la tabla se especifica as mismo mediante anotaciones Eliminan es esquema abstracto de datos.

EJBQL

Las queries se definen mediante @NamedQuery con name y queryString. Las queries se manejan por medio del EntityManager:

@NamedQuery( name="findAllCustomersWithName", queryString="SELECT c FROM Customer c WHERE c.name LIKE :custName" ) .. .. @Inject public EntityManager em; customers = em.createNamedQuery("findAllCustomersWithNa me").setParameter("custName", "Smith").listResults();

PDF Creator - PDF4Free v2.0

http://www.pdf4free.com

29

EJBQL

Ampliaciones:
l l l

Inner & outer joins. Creacin de clases como resultado de consultas. SELECT new CustomerDetails(c.id, c.status, o.count) FROM Customer c JOIN c.orders o WHERE o.count > 100 GROUP BY & HAVING Consultas anidadas en la clusula WHERE

l l

Seguridad y Transacciones

Tambin mediante atributos:


l l

@TransactionAttribute @MethodPermissions. Se eliminan las excepciones impuestas hasta ahora por la especificacin;:

Excepciones:
l

CreateException FinderException

PDF Creator - PDF4Free v2.0

http://www.pdf4free.com

30

Despliegue EJB 3.0

PDF Creator - PDF4Free v2.0

http://www.pdf4free.com

31

You might also like