Introducción a Enterprise Java Beans

3,461
-1

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,461
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
183
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Introducción a Enterprise Java Beans

  1. 1. EJBs Enterprise JavaBeans Que son los EJBs? ¡ Enterprise JavaBeans (EJB) es una arquitectura de componentes de servidor que simplifica el proceso de construcción de aplicaciones de componentes empresariales distribuidos en Java l Con su utilización es posible escribir aplicaciones escalables, fiables y seguras sin escribir código de infraestructura l La existencia de infraestructura permite un desarrollo más rápido de la parte servidora ¡ Dado que son componentes, permiten desarrollar aplicaciones portables entre distintas plataformas (son Java) y servidores de aplicaciones (especificación estándar).PDF Creator - PDF4Free v2.0 http://www.pdf4free.com 1
  2. 2. Enterprise JavaBeans ¡ Un EJB es un componente software que se ejecuta del lado del servidor en una aplicación multicapa. ¡ Los clientes del EJB acceden a él por medio de una interfaz que esconde los detalles de implementación del componente. ¡ Esta interfaz debe cumplir la especificación EJB. l La especificación fuerza la presencia de unos determinados métodos que permitirán al contenedor de EJBs manejar los componentes y su ciclo de vida. Categorías de EJBs ¡ 3 tipos de Enterprise JavaBeans: l Entity Beans: representan entidades de negocio y proveen acceso a datos a través de métodos. Se basan en la idea del mapeo objeto/relacional l Session Beans: pensados para modelar procesos de negocio que son accedidos de manera síncrona l Message-driven Beans: pensados para modelar procesos de negocio que son accedidos de manera asíncrona, permiten el uso de JMS desde EJBsPDF Creator - PDF4Free v2.0 http://www.pdf4free.com 2
  3. 3. Entity EJBs ¡ Dos tipos: l BMP (Bean Managed Persistence) ¡ Se delega en el desarrollador las tareas de persistir, buscar y recuperar las entidades. l CPM (Container Managed Persistence) ¡ La persistencia la gestiona el contenedor de forma que el desarrollador no se preocupa de las sentencias SQL de inserción, recuperación, etc. ¡ Un Entity EJB representa en cada momento a una entidad en base de datos. Muy académicos ¡ Presentan problemas de rendimiento. Session EJBs ¡ Dos tipos: l Stateful (Con estado) ¡ El contenedor garantiza el mantenimiento del estado del componente entre distintas invocaciones (se serializan y deserializan) l Stateless (Sin estado) ¡ El contenedor de EJBs no garantiza que un mismo EJB guarde su estado entre dos invocaciones del mismo cliente. Son “pooleables” y más ligeros que los StatefulPDF Creator - PDF4Free v2.0 http://www.pdf4free.com 3
  4. 4. Message Driven Beans ¡ Incorporados en la especificación 2.0. ¡ Pensados para mensajería asíncrona. ¡ Funcionan sobre JMS (manejo de colas de mensajes, publish & subscribe) ¡ Interesantes para integración de sistemas.PDF Creator - PDF4Free v2.0 http://www.pdf4free.com 4
  5. 5. 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 ¡ Clasificación: l Presencia explícita: ¡ El componente de negocio necesita realizar invocaciones explícitas a la API del middleware. ¡ Difícil de desarrollar y mantener ¡ Ej: CORBA, TUXEDO, DCOM, RMI, RPCs, etc. l Presencia implícita: ¡ La interacción 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 (configuración, descriptores de servicios, etc.). ¡ Ej: EJBs, CCM, .NET, etc.PDF Creator - PDF4Free v2.0 http://www.pdf4free.com 5
  6. 6. Middlewares Explícitos Middlewares implícitosPDF Creator - PDF4Free v2.0 http://www.pdf4free.com 6
  7. 7. Estructura EJB ¡ Un EJB no es una sola clase, sino un conjunto de clases, interfaces y recursos: l El bean de empresa o bean de negocio (Enterprise Bean) l El EJB Object l Las interfaces Remotas. l El Objeto Home l Los interfaces Locales l Descriptores de Despliegue l Recursos específicos del servidor de aplicaciones concreto que estemos empleando. El Bean de Empresa o Negocio ¡ Se trata de implementación en sí del objeto distribuido. Dependiendo del tipo de EJB, esto será… l Implementación de reglas de negocio en el caso de EJBs de sesión. l Lógica de persistencia en el caso de los Entity EJBs. l Lógica de negocio orientadas a mensajes. ¡ La especificación 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. l Cada tipo de EJB cuenta con un interfaz más específico que extiende al de EnterpriseBean.PDF Creator - PDF4Free v2.0 http://www.pdf4free.com 7
  8. 8. El EJB Object ¡ Representa la capa de indirección que intercepta las invocaciones remotas al EJB y gestiona los servicios implícitos del contenedor de ejbs. ¡ Objeto inteligente que implementa la lógica intermedia que el contenedor de EJBs requiere antes de que una invocación a método 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 ObjectPDF Creator - PDF4Free v2.0 http://www.pdf4free.com 8
  9. 9. Las interfaces Remotas ¡ Son los contratos entre el cliente del EJB y el bean de negocio. ¡ Están sujetas a la especificación y deben cumplir ciertas reglas. l Ej, Todas deben extender la interfaz javax.ejb.EJBObject ¡ En la interfaz remota se publican todos los métodos del bean de negocio que se quieran invocar remotamente. ¡ La interfaz remota es implementada por el EJB Object, el cual es generado automáticamente por el contenedor de EJBs. El Objeto Home ¡ El cliente no puede instanciar directamente un objeto remoto, dado que se encuentran en otra máquina distinta. ¡ Debido al principio de transparencia, la ubicación del cliente es independiente de la localización del objeto remoto. ¡ Las instancias de EJBs se obtienen por medio de factorías de objetos (Patrón de diseño Factory [GOF94]). ¡ La factoría es la responsable de instanciar, buscar y destruir los objetos. ¡ Él objeto home es la factoría para la obtención de referencias a EJBs.PDF Creator - PDF4Free v2.0 http://www.pdf4free.com 9
  10. 10. La interfaz Home ¡ Los objetos home son propios y específicos 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 ¡ Añadidas en la versión 2.0 de la especificación EJB. ¡ Solventan el problema de la sobrecarga cuando el EJB se ejecuta en la propia máquina 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 corresponderían al EJB Object, y luego le cede el control al bean de negocio. ¡ De esta forman, se evitan las tareas propias a la invocación remota (strubs, serialización, etc.). ¡ Son opcionales ¡ Extienden la interfaz javax.ejb.EJBLocalObject y su factoría javax.ejb.EJBLocalHome.PDF Creator - PDF4Free v2.0 http://www.pdf4free.com 10
  11. 11. Las interfaces locales ¡ Efectos laterales de su uso… l Si queremos distribuir el objeto, es necesario tocar el código fuente, puesto que manejamos interfaces distintas. l Las interfaces locales, en pos del máximo rendimiento, manejan paso de parámetros por referencia en lugar de por valor. Esto implica un cambio importante en la semántica del código y es una fuente importante de errores. ¡ En consecuencia es interesante emplear el patrón business delegate y resolver el servicio por medio de configuración 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 Ciclo de vida l Sistema de persistencia l Control de transacciones l 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
  12. 12. Recursos específicos del servidor de aplicaciones ¡ Ficheros propios del servidor ¡ Fuera del estándar J2EE ¡ Cada servidor describe y exige, por ejemplo, su propio descriptor de despliegue (además del ejb- jar.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 más EJBs por cada JARPDF Creator - PDF4Free v2.0 http://www.pdf4free.com 12
  13. 13. Desarrollo EJBs Hola Mundo! Como se haría con EJB 2.0 Pasos a seguir… ¡ Escribir las clases java necesarias: l Interfaces local (opcional) y remota l La clase del bean de negocio l 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
  14. 14. Desarrollo de la interfaz remota…. ¡ La interfaz remota contiene todos los métodos de negocio del bean ¡ Consideraciones l Extiende javax.ejb.EJBObject l Los métodos de negocio que publiquemos en la interfaz remota deben lanzar la excepción java.rmi.RemoteException. ¡ Pasos: l Creamos en un directorio vacío el fichero HolaMundo.java a mano, con el notepad. l Publicamos el método saludo que recibe un String (nombre) y retorna otro String. Desarrollo de la interfaz remota…PDF Creator - PDF4Free v2.0 http://www.pdf4free.com 14
  15. 15. Desarrollo de la interfaz local…. ¡ La interfaz local también contiene los métodos de negocio del bean ¡ Consideraciones l Extiende javax.ejb.EJBLocalObject l Los métodos de negocio que publiquemos en la interfaz local no tienen porqué lanzar la excepción java.rmi.RemoteException. ¡ Pasos: l Creamos en un directorio vacío el fichero HolaMundoLocal.java. l Publicamos el método saludo que recibe un String (nombre) y retorna otro String. Desarrollo de la interfaz local…PDF Creator - PDF4Free v2.0 http://www.pdf4free.com 15
  16. 16. Desarrollo del interfaz Home… ¡ El interfaz home describe la factoría de EJBs. ¡ Tiene métodos para crear y destruir objetos EJB ¡ La implementación de la interfaz es el objeto home, y será generada por las herramientas del contenedor. ¡ Consideraciones: l El método create es el método que los clientes deben emplear para obtener una referencia al EJB. Se emplea para inicializar el bean. l Lanza java.rmi.RemoteException y java.ejb.CreateException. l Extiende javax.ejb.EJBHome ¡ Pasos: l Crear el fichero HolaMundoHome.java para la interfaz que extienda javax.ejb.EJBHome l Publicar el método HolaMundo create() que lance ambas excepciones. Desarrollo del interfaz Home…PDF Creator - PDF4Free v2.0 http://www.pdf4free.com 16
  17. 17. Desarrollo del interfaz Home Local ¡ Las diferencias con el interfaz Home son, l La interfaz local extiende EJBLocalHome en lugar de EJBHome. l El método create ya no tiene porqué lanzar una RemoteException. ¡ El objeto devuelto por el método create será del tipo HolaMundoLocal, es decir, un objeto no remoto que cumple la interfaz Local que acabamos de definir. Desarrollo del interfaz Home LocalPDF Creator - PDF4Free v2.0 http://www.pdf4free.com 17
  18. 18. Desarrollo del bean de negocio ¡ Creamos el fichero HolaMundoBean.java ¡ La clase debe implementar javax.ejb.SessionBean ¡ Métodos obligatorios: l public void ejbActivate() {} l public void ejbPassivate() {} l public void setSessionContext(javax.ejb.SessionContext context){} l public void unsetSessionContext() {} l public void ejbRemove() {} l public void ejbCreate() {} que lanza una javax.ejb.CreateException ¡ Y el método de negocio… l public String saludo (String mensaje) {return “Hola mundo “+mensaje;} Desarrollo del bean de negocioPDF Creator - PDF4Free v2.0 http://www.pdf4free.com 18
  19. 19. El contexto de los EJBs ¡ El contenedor nos facilita Bean Contexto el contexto invocando el método setSessionContext( … ); Session SessionCont ¡ Es la vía de comunicación Bean ext entre los EJBs y el contenedor ¡ A través del contexto EntityBean EntityContex podemos recuperar t información del contenedor de EJBs (ej, Message MessageDriv credenciales de Driven enContext seguridad), modificar su Beans status, manejar transacciones, etc. El contexto de los EJBsPDF Creator - PDF4Free v2.0 http://www.pdf4free.com 19
  20. 20. 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 ejb-name: es el nick del ejb. l home: nombre cualificado completo de la interfaz Home del bean. l remote: nombre cualificado completo de la interfaz remota. l local-home: nombre cualificado completo de la interfaz Home local. l local: nombre cualificado completo de la interfaz local l ejb-class : nombre cualificado completo del bean de negocio l session-type: Statefull/Stateless l transaction-type: Container Ejb-jar.xml <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" " http://java.sun.com/dtd/ejb- jar_2_0.dtd"> <ejb-jar> <enterprise-beans> <session> <ejb-name>HolaMundo</ejb-name> <home>HolaMundoHome</home> <remote>HolaMundo</remote> <local-home>HolaMundoLocalHome</local- home> <local>HolaMundoLocal</local> <ejb-class>HolaMundoBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction- type> </session> </enterprise-beans> </ejb-jar>PDF Creator - PDF4Free v2.0 http://www.pdf4free.com 20
  21. 21. Descriptor de despliegue de jboss. Jboss.xml ¡ También en el directorio META-INF. <?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> Construcción 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
  22. 22. Invocación 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 través de la red los objetos que requieren, y de la JTA (Java Transaction API) para el control de las transacciones. l Cliente CORBA ¡ Los clientes pueden ser aplicaciones CORBA estándar. ¡ Esto permite la invocación 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… ¡ Para invocar a un EJBs, tanto en clientes CORBA como RMI-IIOP: 1. Localizar el objeto Home o factoría 2. Emplear el objeto Home para obtener una referencia remota al EJB 3. Invocar los métodos del negocio del EJB 4. Liberar el EJBPDF Creator - PDF4Free v2.0 http://www.pdf4free.com 22
  23. 23. Invocación del EJB. Localización del Home ¡ El cliente no tiene porqué conocer la localización 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 localización del árbol JNDI. Invocación del EJBPDF Creator - PDF4Free v2.0 http://www.pdf4free.com 23
  24. 24. Invocación 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" ); Invocación del EJB ¡ Ya podemos crear el EJB a partir de la factoría e invocar su método de negocio. //Obtenemos la referencia al EJB de la factoría... HolaMundo holaMundo = home.create(); //Ya podemos invocar el método de negocio... System.out.println( holaMundo.saludo("Homer Simpson"));PDF Creator - PDF4Free v2.0 http://www.pdf4free.com 24
  25. 25. Y la invocación a través de la interfaz Local? ¡ Si estamos en la misma máquina … … porqué no funciona? La interfaz local sólo puede ser empleada para acceder a un EJB si el cliente se encuentra en la misma máquina virtual (JVM) que el EJB, no en la misma máquina física. 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 rápido 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 versión 1.5) l Modelo de persistencia Hibernate.PDF Creator - PDF4Free v2.0 http://www.pdf4free.com 25
  26. 26. 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 poníamos 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 también mediante anotaciones.PDF Creator - PDF4Free v2.0 http://www.pdf4free.com 26
  27. 27. 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 significativosPDF Creator - PDF4Free v2.0 http://www.pdf4free.com 27
  28. 28. Entity Beans ¡ Se declaran mediante @Entity. ¡ Todas los atributos son persistentes salvo los marcados como @Transient. @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; … Relaciones ¡ Unidireccionales o bidireccionales ¡ Cualquier combinación 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
  29. 29. 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
  30. 30. EJBQL ¡ Ampliaciones: l Inner & outer joins. l Creación de clases como resultado de consultas. l SELECT new CustomerDetails(c.id, c.status, o.count) FROM Customer c JOIN c.orders o WHERE o.count > 100 l GROUP BY & HAVING l Consultas anidadas en la cláusula WHERE… Seguridad y Transacciones ¡ También mediante atributos: l @TransactionAttribute l @MethodPermissions. ¡ Excepciones: l Se eliminan las excepciones impuestas hasta ahora por la especificación;: ¡ CreateException ¡ FinderExceptionPDF Creator - PDF4Free v2.0 http://www.pdf4free.com 30
  31. 31. Despliegue EJB 3.0PDF Creator - PDF4Free v2.0 http://www.pdf4free.com 31

×