Professional Documents
Culture Documents
Enterprise JavaBeans
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).
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
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
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
http://www.pdf4free.com
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.
http://www.pdf4free.com
Middlewares.
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:
http://www.pdf4free.com
Middlewares Explcitos
Middlewares implcitos
http://www.pdf4free.com
Estructura EJB
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.
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.
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
http://www.pdf4free.com
Son los contratos entre el cliente del EJB y el bean de negocio. Estn sujetas a la especificacin y deben cumplir ciertas reglas.
l
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.
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
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.
http://www.pdf4free.com
10
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
Es un fichero XML: ejb-jar.xml Habr uno por paquete de despliegue (fichero jar) y puede declarar varios EJBs de distintos tipos.
http://www.pdf4free.com
11
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
http://www.pdf4free.com
12
Desarrollo EJBs
Hola Mundo!
Pasos a seguir
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.
http://www.pdf4free.com
13
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
http://www.pdf4free.com
14
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
http://www.pdf4free.com
15
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
http://www.pdf4free.com
16
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.
http://www.pdf4free.com
17
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
http://www.pdf4free.com
18
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
http://www.pdf4free.com
19
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>
http://www.pdf4free.com
20
<?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>
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.
http://www.pdf4free.com
21
Invocacin de EJBs
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.
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
http://www.pdf4free.com
22
http://www.pdf4free.com
23
http://www.pdf4free.com
24
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.
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.
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.
http://www.pdf4free.com
26
javax.jms.MessageListener
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
@ManyToOne public Customer getCustomer() { return cust; } public setCustomer(Customer cust) { this.cust = cust; }
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();
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
@TransactionAttribute @MethodPermissions. Se eliminan las excepciones impuestas hasta ahora por la especificacin;:
Excepciones:
l
CreateException FinderException
http://www.pdf4free.com
30
http://www.pdf4free.com
31