Transcript Internet
8. Enterprise Java Beans Gestión de Sistemas en Internet Universidad Antonio de Nebrija, 2002/03 Justo N. Hidalgo Sanz Middleware Rules! 18/07/2015 Internet - EJBs 2 EJBs en acción 18/07/2015 Internet - EJBs 3 Restricciones de los Enterprise Beans Gestión o sincronización de threads. Acceso a ficheros y directorios mediante java.io. AWT para muestra u obtención de información desde teclado. Escucha de socket, aceptación de conexiones, multicast. SocketFactories. Carga de bibliotecas nativas. 18/07/2015 Internet - EJBs 4 Fases de desarrollo de una aplicación J2EE Creación de Enterprise Beans. Creación de componentes Web. Creación de Cliente de Aplicación J2EE. Ensamblaje de Aplicación J2EE. Despliegue de Aplicación J2EE. 18/07/2015 Internet - EJBs 5 Creación de un Enterprise Bean Quién: desarrollador Software. Qué: – Codifica y compila el código Java. – Especifica el descriptor de despliegue. – Añade los .class al fichero .jar EJB. Salida: .jar. 18/07/2015 Internet - EJBs 6 Creación de componentes Web Quién: diseñador web y desarrollador. Qué: – Codifica y compila código Java. – Escribe ficheros .html y .jsp. – Especifica el descriptor de despliegue para el componente web. – Añade .class, .html, .jsp y fichero de despliegue al fichero .war. Salida: .war 18/07/2015 Internet - EJBs 7 Creación de cliente de Aplicación J2EE Quién: desarrollador de software. Qué: – Codifica y compila código Java. – Descriptor de despliegue. – Añade .class a fichero .jar para el cliente. Salida: .jar 18/07/2015 Internet - EJBs 8 Ensamblaje Quién: desarrollador de software. Qué: – Ensambla enterprise beans (.jar) y componentes web (.war) en una aplicación J2EE (.ear). – Descriptor de despliegue. .ear 18/07/2015 Internet - EJBs 9 Despliegue Quién: administrador del sistema. Qué: – Añade el .ear al servidor J2EE. – Configura la aplicación J2EE para el entorno de producción, modificando el fichero de despliegue. – Instala el .ear en el servidor J2EE. Salida: aplicación J2EE configurada e instalada. 18/07/2015 Internet - EJBs 10 Tipos de Enterprise Beans Componente server-side que puede desplegarse en un entorno distribuido multicapa. Tres tipos de beans: – Session beans. – Entity beans. – Message-driven beans. 18/07/2015 Internet - EJBs 11 Session Beans (I) Representa el trabajo realizado por el código cliente que lo llama. Objetos de proceso de negocio. Representan la lógica de negocio. Viven tanto como la sesión del código cliente que invoca al session bean. – No son compartidos por clientes. – El cliente no instancia directamente session beans, es el EJB server. 18/07/2015 Internet - EJBs 12 Session Beans (y II) Subtipos: – Stateful Session Beans: diseñado para servir a procesos de negocio que se ejecuta a través de múltiples métodos o transacciones. Para ello, los sful sbeans almacenan el estado de un cliente determinado. – Stateless Session Beans: paradigma de single request. Más tolerante a fallos. Se puede simular un sful sbean, pasando parámetros de estado a un sless sbean. 18/07/2015 Internet - EJBs 13 Entity Beans Modelan los datos permanentes que el proceso de negocio utiliza. Los entity beans perduran en el tiempo. Pueden ser utilizados por múltiples clientes simultaneamente: para ello, transacciones. Subtipos: – Bean-managed Persistent Entity Beans (BMP): persistente a mano. Se debe escribir con un API de persistencia, como JDBC. – Container-managed Persistent Entity Beans (CMP): persistencia automática. 18/07/2015 Internet - EJBs 14 EJB Container/Server Son entidades abstractas entre el cliente y el bean, nadie sabe que existen. Responsabilidades: – – – – – – – – Gestión de recursos y gestión del ciclo de vida del bean. Gestión del estado. Transacciones. Seguridad. Persistencia. Acceso remoto y transparencia de localización. Herramientas de instalación de beans y glue-codes. Características de contenedores especializados. 18/07/2015 Internet - EJBs 15 18/07/2015 Internet - EJBs 16 Enterprise Beans en detalle (I) Componentes: – Interfaz remota (Remote interface): define los métodos de negocio que un cliente puede invocar de un bean. Extiende javax.ejb.EJBObject. – Home interface: Define los métodos para que un cliente cree, encuentre o elimine un enterprise bean. Extiende javax.ejb.EJBHome. – Enterprise Bean class: Bean. Implementa javax.ejb.EnterpriseBean (que a su vez implementa Serializable). 18/07/2015 Internet - EJBs 17 Enterprise Beans en detalle (II) Un cliente no invoca directamente un bean, sino que lo hace a través del container. Así: – El bean no es network-enabled. – El contenedor puede realizar otras tareas: Seguridad. Instance pooling. Transacciones. Balanceo de cargas. ... El cliente accede a una HomeObject (EJB Factory) 18/07/2015 Internet - EJBs 18 Enterprise Beans en detalle (y III) Descriptor de despliegue (deployment descriptor): – Permiten que los contenedores EJB provean servicios middleware implícitos a los Ebeans, sin necesidad de implementar nada: Ciclo de vida. Persistencia para entity beans. Transacciones. Seguridad. – Es un fichero XML. 18/07/2015 Internet - EJBs 19 Session Beans en detalle (I) Implementan javax.ejb.SessionBean Métodos de utilización del EJB container: – setSessionContext. – ejbCreate(...): este grupo de métodos inicializa un session bean. – ejbPassivate: el container puede pasar a estado pasivo a alguna instancia, si hay muchas (persistencia). – ejbActivate: utilización de un bean que ha sido “pasivizado”. – ejbRemove: limpieza de un método antes de eliminarse. – Métodos de negocio: aquellos específicos de la aplicación. Para que el cliente pueda utilizarlos, han de existir en la interfaz remota. 18/07/2015 Internet - EJBs 20 Session Beans en detalle (II) Cómo invocar Session Beans desde un cliente: – Buscar un Home Object. JNDI – Utilizarlo para crear un EJB Object. En los stateless, no lleva argumentos (¡para qué!). – Invocar métodos de negocio sobre el EJB Object. – Eliminar el EJB Object. 18/07/2015 A lo mejor no se destruye, si hay pooling. Internet - EJBs 21 Session Beans en detalle (y III) Stateful Session Beans: – Pooling mediante “pasivización LRU” Excepción: un bean dentro de una TRANSACCIÓN no puede ser pasivo. 18/07/2015 Internet - EJBs 22 Entity Beans Representan los objetos entidad en el modelo de análisis. Un entity bean es un único punto lógico de acceso, pero desde cualquier cliente. – Un session bean sólo es accesible por un solo cliente. 18/07/2015 Internet - EJBs 23 Servicios de persistencia (I) Callbacks de contenedor con información acerca del progreso de la transacción actual – – – – afterBegin loadStateFromDatabase beforeCompletion saveStateToDatabase Soporte para acceso concurrente – Diferentes estrategias: 18/07/2015 Dejar el control de concurrencia a la base de datos Sincronización de acceso a un entity bean con un id particular. Internet - EJBs 24 Servicios de persistencia (y II) Mantenimiento de caché entre transacciones Provisión de todo el código de gestión de persistencia – Para muchos, esta es la ventaja principal de todo J2EE. 18/07/2015 Internet - EJBs 25 Mejoras con EJB2.0 CMP es más completo que en EJB1.1 Optimización de accesos a la base de datos. “Abstract accessors” Interfaces locales Relaciones EQL (EJB Query Language) 18/07/2015 Internet - EJBs 26 Abstract Accessors (I) EJB2.0 define los campos CMP como abstractos. P.e. para el campo CMP nombre: – Public abstract String getNombre(); – Public abstract void setNombre(String nombre); ¡OJO! Un campo CMP no tiene por qué estar directamente relacionado con una columna de la base de datos. 18/07/2015 Internet - EJBs 27 Abstract Accessors (y II) Ventajas de este concepto: – El contenedor está la mando, por lo que: – “lazy loading” de beans – Actualizaciones “tonificadas” (tuned updates) El contenedor sabe exactamente qué campos se han modificado en una transacción, por lo que: Tras acabar la transacción, y realizar un commit, el contenedor puede actualizar las columnas relacionadas con los campos CMP modificados. 18/07/2015 Internet - EJBs 28 Interfaces locales La versión EJB1.1 sólo tenía interfaces remotas (RMI por debajo) => prestaciones. Ahora se introduce la opción local => semántica de paso por mensajes de Java. ¿Para qué es útil? P.e. – El stateless session bean tiene una interfaz remota para los clientes remotos. Este bean se comunica con un entity bean a través de su interfaz home local. 18/07/2015 Internet - EJBs 29 Relaciones (I) Container-managed relationships Los “bean providers” definen las relaciones entre sus beans en el descriptor de despliegue. El contenedor genera todo el código Java y SQL necesario. 18/07/2015 Internet - EJBs 30 Relaciones (II). Tipos Direccionalidad: – Unidireccional o bidireccional. Multiplicidad: – One-to-one – One-to-many – Many-to-many 18/07/2015 Internet - EJBs 31 Relaciones (y III). Tareas El contenedor se ocupa de: – Mantenimiento de la integridad referencial – Manejo de la adición y eliminación de beans de una relación “many”. – Navegación a través de las relaciones mediante la generación de elementos SQL. 18/07/2015 Internet - EJBs 32 EJB Query Language Lenguaje orientado a objetos de consulta a beans. Parecido a SQL, pero internamente diferente. Lo veremos con un ejemplo. 18/07/2015 Internet - EJBs 33 Entity Beans en detalle (I) Persistencia: – Opción 1: serialización Java. No muy sofisticada (query: obtención de todas las cuentas con más de 1.000 euros). – Opción 2: almacenamiento de cada parte de un objeto en una BDR: object-relational mapping: 18/07/2015 Handcrafting. TOPLink, JavaBlend (OK, pero lentos). Entity Beans: tratar los datos como objetos. Internet - EJBs 34 Entity Beans en detalle (II) Componentes: – Entity Bean class: clase java que modela los datos persistentes. javax.ejb.EntityBean – Remote interface. – Home interface. – Primary Key class: identificador único para la entity bean. Ha de ser serializable. – Descriptor de despliegue. 18/07/2015 Internet - EJBs 35 Entity Beans en detalle (III) Características: – Sobreviven a fallos. – Las entity beans son vistas del repositorio. – Varias instancias entity pueden estar representando los mismos datos: thread safe o data corruption Sólo puede haber un thread dentro de una instancia bean. Utilización de transacciones. – Pooling: ejbActivate, ejbPassivate, ejbStore, ejbLoad. 18/07/2015 Internet - EJBs 36 Entity Beans en detalle (y IV) Características (II): – ejbCreate implica creación de datos en la BBDD. Bean-managed: devuelve el primary key class. Container-managed: devuelve null. – ejbFind: 18/07/2015 todos los métodos de búsqueda empiezan así. Al menos: ejbFindByPrimaryKey. Internet - EJBs 37 Message-driven Beans JMS (Java Message Service) – API Java que provee interfaces para la creación, envío, recepción y lectura de mensajes. – Framework de comunicación: Débilmente acoplado Asíncrono Fiable – Tipos: 18/07/2015 Punto a punto Publish/subscribe Internet - EJBs 38 Point-to-point Dominio de mensajería basado en COLAS (queues) – Almacenamientos persistentes localizados en el destino JMS. – FIFO Cada mensaje sólo tiene un consumidor. Independiente del tiempo. El consumidor ha de firmar la recepción del mensaje. 18/07/2015 Internet - EJBs 39 Publish-subscribe Múltiples receptores por mensaje Los mensajes se publican y se envían a “tópicos”. – Cada mensaje puede tener * consumidores – Los subscriptores sólo pueden consumir mensajes que se hayan publicado tras su subscripción. – Los subscriptores en general han de estar activos para consumir los mensajes (excepción: subscripciones “durables”). 18/07/2015 Internet - EJBs 40 JMS Message Producer Sends To Queue /topic creates creates Connection creates Factory Connection Session creates Message creates Message Consumer 18/07/2015 Internet - EJBs Gets From Queue /topic 41 MSB Un MSB es un “listener” de mensajes que puede consumir mensajes de una cola o subscripción duradera a través de un contenedor J2EE. El contenedor invoca el bean como resultado de la llegada de un mensaje JMS. 18/07/2015 Internet - EJBs 42 Qué hace J2EE por nosotros Separación natural entre presentación (JSPs) y lógica (EJBs). J2EE se ocupa del sistema, nosotros de la aplicación. El estado de la sesión también es gestionado por J2EE. La gestión de conexiones con la base de datos también es tarea de J2EE. RTM: Reduced Time to Market, lo cual implica un mayor ROI: Return Of Investment. 18/07/2015 Internet - EJBs 43 Bibliografía Mastering Enterprise JavaBeans (theserverside.com) Tutorial de J2EE (j2eedocs): java.sun.com Professional Java Server Programming, J2EE 1.3 Edition. Wrox. 18/07/2015 Internet - EJBs 44