Reutilización de software • A nivel de clase: – Clases y algoritmos JGL • A nivel de diseño – Patrones de diseño • A nivel de arquitectura – Arquitectura J2EE 2 Aplicaciones Web Servidor Introducción a la arquitectura J2EE 3 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 1 Índice § § § § § Introduccion Servidor de aplicaciones Arquitectura de aplicación J2EE Ejemplo de aplicación J2EE Desarrollo de EJB’s (parte 2) 4 Introducción Objetivo Desarrollar aplicaciones de internet utilizando la plataforma J2EE – Java 2 Enterprise Edition 5 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 2 Introducción ¿Dónde lo implementamos? • Heterogeneidad: – Plataforma: Unix/Linux, Windows, Mac/OS – Lenguaje lógica: Java, C++, c#, Perl – Fabricante: Oracle, IBM, HP, Microsoft • Plataforma J2EE (Sun Microsystems): – Define una arquitectura de desarrollo (n niveles) – Define una serie de especificaciones para el desarrollo de aplicaciones en internet. • No implementa ningun sofware • Unicamente está compuesto especificaciones por un conjunto de • Los fabricantes desarrollan servidores de aplicaciones que cumplen las espeficicaciones J2EE – Permite la migracion de un fabricante a otro fácilmente. 6 Introducción J2EE: Distribución básica multinivel Nivel (es) servidor de aplicación Presentación Nivel Cliente Apps API Servicios Nivel Datos Lógica API Servicios 7 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 3 Introducción J2EE: Distribución básica multinivel • Nivel cliente (Client tier) – Interfaz de usuario (y opcional parte lógica) • Nivel medio(Middle tier) – Lógica de negocio: parte principal de la aplicación. Necesita de: • servicios especializados para la realización de determinadas tareas: – Monitores transacciones – acceso a BD – sistemas de nombres – Procesado de la presentación: servlets/JSP • Nivel de datos (Back-end tier) – Bases de datos o Enterprise Information Systems 8 Introducción El API de J2EE • • • • • • • • • • • JDBC 2.0 Enterprise Java Beans (EJB) 2.0 Java Servlets 2.3 Java Server Pages (JSP) 1.2 Java Message Service (JMS) 1.0 Java Transaction API (JTA) 1.0 Java Mail 1.2 Java Beans Activation Framework (JAF) 1.0 Java API for XML Parsing (JAXP) 1.1 The Java Connector Architecture (JCA) 1.0 Java Authentication and Authorization Service (JASS) 1.0 9 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 4 Servidor de aplicaciones • Es un software que da soporte a los componentes de servidor – Proporciona un entorno de ejecución para los componentes – Los componentes de servidor utilizan los servicios del servidor de aplicaciones • Tareas de infraestructura: – – – – – Instalacion de componentes Comunicación Sincronización de acceso concurrente Preparacion de un entorno seguro Seguridad en las transacciones 10 Servidor de aplicaciones Servicios • Conexión y acceso a BD • Facilidad de mapear: – Clases è Tablas – Instancias èregistros. • Consistencia de datos: control de acceso concurrente a los datos. • Transacciones: agrupación de operaciones • Interaccion con el usuario: autentificacion, control de acceso Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 11 5 Servidor de aplicaciones Servicios ofrecidos • Servicio de nombres: acceso a componentes y recursos a través de nombres lógicos • Servicio de transacciones: ejecución de una serie de pasos de forma atómica y aislada • Servicio de seguridad: directivas de seguridad para recursos protegidos • Persistencia: almacenamiento persistente de objetos y estados de objetos, normalmente en BD relacionales • Comunicación: distintas técnicas de comunicación – Java Naming and Directory Inteface(JNDI) – Java Transaction Service (JTS) – Java Authentication and Authorization Service(JAAS) – JDBC – Comunicación Web: TCP/IP, UDP/IP,HTTP1.0 y HTTPS – Procesador de objetos distribuidos: RMI- IIOP • Servicios de configuración y administración: empaquetamiento, instalación y configuración flexible de componentes y la administración de aplicaciones – Descripción mediantes esquemas XML de las características de servidores, containers y otro servicios. 12 Servidor de aplicaciones no funcional • Eficiencia: tiempo de respuesta rápida entre los distintos componentes • Escalabilidad: posibilidad de incorporar nuevos servidores, distribución de carga • Disponibilidad: seguridad frente a caidas de la aplicación (ideal disponibilidad 24*7), sistemas de tolerancia a fallos, clustering de servidores y datos • Modularidad: diseño en niveles (presentación, lógica y datos) 13 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 6 Arquitectura de aplicación J2EE Nivel (es) servidor de aplicación Nivel Cliente Web container Cliente web Nivel Datos Bases de datos EJB container Aplicaciones legadas Servlets, JSP Cliente Java Servicios y API’s, JNDI, RMI-IIOP… Servicios y API’s, JNDI, RMI-IIOP… J2EE J2EE Enterprise JavaBeans Servicios y API’s, JNDI, RMI-IIOP… Sistemas ERP J2EE 14 Arquitectura de aplicación J2EE • División lógica del desarrollo de aplicaciones en diferentes niveles: – Presentación – Lógica – Datos • El estandar J2EE nos da el soporte necesario para este tipo de desarrollos. 15 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 7 Arquitectura de aplicación J2EE Capa de cliente - Clientes Stand-alone – Se ejecutan sin necesidad de un navegador – Necesitan ser instalados en cada cliente • Las actualizaciones son más costosas – Tecnologías • Clientes Java (Swing o AWT) • Clientes no Java – C++, VB – La comunicación con el servidor deberá realizarse mediante RMI-IIOP • Se recomienda cuando la interacción es compleja o se trata de una aplicación de intranet 16 Arquitectura de aplicación J2EE Capa de cliente - Clientes Web J2EE no establece restricciones en el tipo de clientes: • El navegador es el cliente universal. • La interfaz se genera en el servidor. »Se elimina el problema de la actualización del cliente. • Tecnologías: –HTML –XML –Applets –Todas aquellas soportadas por los navegadores »Scripting, Plug-in... Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 17 8 Arquitectura de aplicación J2EE Capa de datos - Enterprise Information System • Es la capa en la que se almacenan los datos. • Incluye: – SGBD. – ERP (Enterprise Resource Planning). – Sistemas legados. – No impone restricciones en cuanto a las fuentes de información. 18 Arquitectura de aplicación J2EE Capa intermedia • Es el núcleo de la especificación J2EE. • Se dividen las tecnologías en tres categorías: – Servicios: • Funcionalidades que simplifica el desarrollo de los componentes – Componentes: • De presentación y de lógica – Comunicación: • Mecanismos de comunicación entre cliente y servidor – Protocolos de Internet (HTTP,TCP/IP...) – Invocación Remota (RMI,IIOP...) 19 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 9 Arquitectura de aplicación J2EE Capa intermedia - Servicios • Servicios – Despliegue (Instalación): • Se establecen formatos de empaquetado que permiten la instalación automática en cualquier servidor J2EE • Permite configurar los componentes al instalarlos – Transacciones – Seguridad: • Control de acceso a los recursos – Localización: • Permite a los componentes localizar recursos sin necesidad de tener codificar en el código la localización de los mismos 20 Arquitectura de aplicación J2EE Capa intermedia - Componentes • • • Modulos donde se implementa la lógica de negocio y presentación Todo componente debe ejecutarse dentro de un container Los containers ofrecen: – el entorno de ejecución para los componentes – Ofrecen una serie de servicios a utilizar por los componentes – Heramientas adicionales(Deployment tools) para la instalación y configuración de los componentes Applet container Servlet/JSP container JSP Tools EJB container Enterprise JavaBeans Servlet Engine Applets JSP JSP JSP Gestion recursos Servicios Servicios 21 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 10 Ejemplo: Aplicación banco en c/s Cliente Cliente (AWT) Datos Middleware Web Container EJB Container Servlets, JSP SGBD RMI-IIOP JDBC 22 Ejemplo: Ejemplo de desarrollo en n niveles Cliente Datos Middlware Componente cuenta cliente Mac Unix Java Presentación Windows Browser EIS Componente banco Componente movimiento Driver BD Conector SGBD Servicio Transacciones 23 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 11 Ejemplo: Aplicación banco en web Cliente Datos Middlware Web Container Browser EJB Container Servlets, JSP HTTP SGBD JDBC RMI-IIOP JDBC 24 Resumen arquitectura J2EE 25 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 12 Aplicación J2EE desde cliente Java 26 Enterprise (Java)Beans (EJB) • Es una especificación completa para el desarrollo de “componentes de negocio” • Objetivos de la arquitectura de componentes EJB: – Facilitar el desarrollo de aplicaciones, concentrandose en la lógica de negocio – Independencia del proveedor de componentes mediante la utilización de interfaces – Independencia de la plataforma, gracias a la utilización del lenguaje Java 27 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 13 Aplicaciones Web Servidor Desarrollo de EJB’s Índice § § § § § Tecnología utilizada Arquitectura Desarrollo de un EJB Clasificación de EJB´s Los Session Bean 29 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 14 Tecnología utilizada • RMI-IIOP: Invocación de objetos remotos mensaje Cliente mensaje EJB Internet • JNDI: Localización de los objetos remotos 30 Invocación remota de objetos: RMI-IIOP Queremos que los objetos del servidor se abstraigan de los aspectos relacionados con la comunicación remota Cliente Objeto remoto Interfaz remota Interfaz remota Stub Skeleton La tarea mas importante de los Stubs y Skeleton consiste en serializar los objetos que se envían como parámetro 31 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 15 Invocación remota de objetos: RMI-IIOP Separación interfaz y lógica La interfaz (interfaz remota): • Exporta la signatura de los métodos disponibles. • Oculta la implementación a los clientes • Permite la transparencia local/remota • La información que se va a ofrecer al cliente. • Hereda la interfaz java.rmi.Remote La implementación (la lógica) El código de la clase, donde describe la lógica 32 Invocación remota de objetos: RMI-IIOP Ejemplo: la interfaz Hello World import java.rmi.Remote; import java.rmi.RemoteException // La interfaz remota del objeto remoto. Los clientes // utilizarán esta interfaz para invocar el objeto remoto public interface IHelloWorld extend Remote { public String hello() throws RemoteException; } 33 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 16 Invocación remota de objetos: RMI-IIOP Ejemplo: la implementación Hello World import java.rmi.RemoteException import java.rmi.PortableRemoteObject; public class HelloWorld extend PortableRemoteObject implements IHelloWorld { public HelloWorld throws Exception, RemoteException { super(); } public String hello() throws RemoteException { return “hello world”; } } 34 Búsqueda remota de objetos: JNDI Servicios de naming y directory Mecanismo para la búsqueda de: Máquinas, Impresoras, drivers Consiste en asociar a un nombre lógico un elemento físico Código Cliente JNDI Client API Service Provider Interface LDAB Service Provider NIS Service Provider File System Service Provider 35 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 17 Búsqueda remota de objetos: JNDI Servicios de naming y directory 2: Buscar el objeto en un árbol JNDI conocido Cliente Code Initial Context 3: return Stub 4: Invocación método remoto RMI-IIOP Stub Máquina #1 5: Delegar RMI-IIOP Skeleton 1: Almacenar el objeto remoto en el árbol JNDI 6: Delegar RMI-IIOP Remote Object Máquina #3 36 Máquina #2 Búsqueda remota de objetos: JNDI Almacenar el objeto remoto en el árbol JNDI Ø Crear una instancia del objeto remoto Ø Localizar el contexto ªobjeto del árbol y la máquina Ø Ubicar el objeto en el contexto 37 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 18 Búsqueda remota de objetos: JNDI Servicios de naming y directory Import javax.naming.*; public class Startup { public static void main(Stringargs[]) Throws Exception { // Crear una instancia del objeto HelloWorld helloInstance= new HelloWorld(); // Localizar el objeto en el árbol JNDI InitialContext ctx=new InitialContext(System.getProperties()); ctx.rebind(“HelloWorld”,helloInstance); synchonized(helloWorld) { helloWorld.wait(); } } } 38 Búsqueda remota de objetos: JNDI Servicios de naming y directory Import javax.naming.*; import java.rmi.*; public class Client { public static void main(Stringargs[]) Throws Exception { // Buscar el Stub através del JNDI Context ctx=new InitialContext(System.getProperties()); Object remoteObject=ctx.lookup(“HelloWorld”); // Casting IHelloWorld ihelloworld=(IHelloWorld)javax.rmi.portableObject.narrow(rem oteObject,IHelloWorld.class); System.out.printl(ihelloworld.hello()); } 39 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 19 Índice § § § § § § Tecnología utilizada Qué son los EJB’s ? Desarrollo de un EJB Clasificación de EJB´s Los Session Bean Los Entity Bean 40 Qué son los Enterprise JavaBeans • EJB´s: componentes usados como parte de aplicaciones corporativas distribuidas • Cada bean encapsula parte de la lógica de negocio de la aplicación • Se comunica con gestores de recursos y otro EJB’s • Accedido por distintos tipos de clientes:EJB’s, servlets, clientes de aplicación, etc… • En tiempo de ejecución reside en un contenedor EJB: servicios de seguridad, transacción, instalación(deployment), concurrencia y gestion del ciclo de vida. • Una aplicación puede tener uno o varios EJB’s en uno o varios contenedores EJB 41 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 20 Instalación típica J2EE Web container Servlets JSP EJB container Enteprise Beans Firewall Cliente app. local Servlets JSP Bases de datos JDBC Enteprise Beans Conectores Cliente web browser Aplicaciones legadas RMII-IIOP Enteprise Beans Sistemas ERP RMI-IIOP Cliente Applet Messaging(EJB 2.0, JMS, EJB 2.1) Servidor J2EE 42 EJB Container API Transacciones Objeto remoto API Seguridad Cliente Interfaz remota Servicios Arquitectura API BD Interfaz remota Stub Red Skeleton Aumento de las necesidades en el servidor: Transacciones, Persistencia, Seguridad, Threads,........ 43 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 21 Arquitectura Corba Objeto remoto API Transacciones API Seguridad Servicios Middleware explícito (anterior a J2EE) EJB Container API BD Cliente Interfaz remota Interfaz remota Stub Red Skeleton CORBA: Invocación explícita a los servicios middleware a 44 través de un API dentro del código del objeto remoto Arquitectura Corba Middleware explícito: Ejemplo transfer (Cuenta cuenta1, Cuenta cuenta2, long cantidad) { // 1: Invocar al API del middleware para verificar la seguridad // 2: Invocar al API del middleware para iniciar una transacción // 3: Invocar al API del middleware para cargar las tuplas de la BD 4: eliminar la cantidad de una cuenta y añadirlo a la otra // 5: Invocar al API del middleware para almacenar las tuplas // 6: Invocar al API del middleware para finalizar una transacción } 45 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 22 Arquitectura Corba Middleware explícito: Desventajas 1. Difícil de escribir: El código está contaminado. Muchas líneas de código no relacionadas con la lógica de negocio. 2. Difícil de mantener: Si se quiere modificar los servicios que utiliza el Bean, se necesita reescribir el código. 3. Difícil de Modificar: Los Vendedores Independientes de Software (ISV) NO ofrecen el código fuente, ya que es su propiedad intelectual. Por lo tanto los cambios en el código no serán posibles directamente. 46 Arquitectura J2EE Middleware implícito XML deployment <transaction>… <security>…. <data>…. Cliente API Transacciones Objeto remoto API Seguridad Interfaz remota Servicios EJB Container API BD Interfaz remota Stub Red Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos Skeleton 47 23 Arquitectura J2EE Middleware implícito EJB Container Cliente Interfaz remota API Transacciones Objeto intercpt API Seguridad Interfaz remota Servicios Objeto remoto API BD Interfaz remota Stub Red Skeleton 48 Arquitectura Middleware implícito: Arquitectura EJB 1. Escribir el objeto distribuido que contiene únicamente la lógica de negocio. No implementar invocación a los servicios del middleware transfer (Cuenta cuenta1, Cuenta cuenta2, long cantidad) { // 1: eliminar la cantidad de una cuenta y añadirlo a la otra } 2. Declarar los servicios que necesita el objeto distribuido en un fichero separado: fichero descriptor 3. Describir (interfaz) los servicios que exporta el objeto distribuido. 4. Ejecutar el programa suministrado por el proveedor, para que teniendo en cuenta las necesidades del objeto distribuido genere el objeto interceptor 5. El objeto interceptor intercepta la llamada desde el cliente, ejecuta los servicios del middleware que necesita el objeto distribuido y finalmente delega la llamada al objeto distribuido 49 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 24 Arquitectura Middleware implícito: Ventajas 1. Fácil de escribir: Unicamente se escribe la lógica de la aplicación. Los servicios necesarios se declaran en un fichero de texto. 2. Fácil de mantener: La separación de la lógica de negocio y la lógica del middleware es ortogonal. Modificaciones en el middleware NO implica modificaciones en el código de la aplicación. 3. Fácil de Modificar: Los clientes pueden modificar las necesidades del middleware modificando el fichero descriptor. Por ejemplo, se puede modificar aspectos de seguridad sin modificar el código fuente. 50 Índice § § § § § § Tecnología utilizada Arquitectura de componentes Desarrollo de un EJB Clasificación de EJB´s Los Session Bean Los Entity Bean 51 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 25 Desarrollo de un EJB La invocación Código cliente, como Sevlets o Applets EJB Container/Server 5: Devolución resultado 2: Invocación middleware API 1: Invocación método Transaction service, Security service Persistence service, etc... Objeto EJB interface remota 4: Resultado método 3: Invocación Bean Enterprise Bean El Contenedor de EJB actúa como el nivel de indirección entre el código del cliente y el bean. Este nivel de indirección se manifiesta 52 a través del objeto contenedor Objecto EJB. Desarrollo de un EJB La interfaz remota • Indica qué métodos del Bean se exportan • Es una interfaz java • Descrita por el desarrollador •Tiene que extender a javax.ejb.EJBObject javax.ejb.EJBObject extiende a java.rmi.Remote. Todo objeto que implementa java.rmi.Remote es un objeto remoto que puede ser invocado desde cualquier JVM 53 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 26 Desarrollo de un EJB La interfaz remota La interfaz con la que opera el cliente cuando quiere invocar al EJB. Es tarea del sistema implementar esta interfaz. El objeto implementado es el objeto EJB, quien delega la invocación al bean. public interface Hello extend javax.ejb.EJBObject { public String hello() throws java.rmi.RemoteException; } 54 Desarrollo de un EJB El objeto Home Cómo obtiene el cliente referencias a los objetos EJB ? El cliente no puede instanciar un objeto EJB directamente porque el objeto EJB está en una máquina diferente a la que esta el cliente. Además los EJB’s promueven la transparencia de localización, por lo que los clientes nunca deben conocer la ubicación exacta del EJB. 55 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 27 Desarrollo de un EJB Creación de un EJB Object remoto Client Code, such as Sevlets or Applets 3: Crear un nuevo objeto EJB 1: localizar referencia objeto Home 2: return referencia objeto Home EJB Container/Server 5: Devolución referencia Objeto EJB (Stub) Objeto Home interface Home JNDI 4: Crear objeto EJB Enterprise Beans Objeto EJB interface remota Servicio Naming (LDAP) En la interface home se indican los parámetros necesarios (de los métodos constructores) para instanciar los objetos EJB 56 Desarrollo de un EJB El objeto Home • Crea/elimina las instancias de EJB Objects. • Propietario de cada contenedor • Sus tareas consisten en balanceo de cargas, monitorización del sistema. • Son generadas automáticamente por herramientas proporcionadas servidor de EJBs 57 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 28 Desarrollo de un EJB La interfaz Home Esta interfaz tiene métodos para crear/destruir objetos EJB. La implementación del home interface es el home Object y la implementa el sistema public interface HelloHome extend javax.ejb.EJBHomeObject { Hello create() throws java.rmi.RemoteException, java.ejb.CreateException; } 58 Desarrollo de un EJB Invocación a un Bean remoto EJB Container/Server Client Code, such as Sevlets or Applets Objeto Home 1: invocar Stub interface Home 6: llamada bean interface remota Interfaz remota Objeto EJB Transaction service, Security service 5: middleware Persistence service, etc... 4:invocar al Objeto EJB Red Stub Enterprise Beans 2: marshall Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos Skeleton 3: unmarshall 59 29 Desarrollo de un EJB Creación de un EJB Object local EJB Container/Server Client Code, such as Sevlets Interface local Home Objeto local Home 3: llamada bean 1: invocar el objeto local interface local Enterprise Beans Objeto local EJB Transaction service, Security service 2: middleware Persistence service, etc... En ocasiones, el cliente se encuentra en la misma máquina que el contenedor de EJB!! 60 Desarrollo de un EJB La interfaz local Los clientes locales pueden utilizar esta interfaz para invocar al bean. La mayor diferencia radica en el tratamiento de excepciones public interface HelloLocal extend javax.ejb.EJBLocalObject { public String hello() ; } 61 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 30 Desarrollo de un EJB La interfaz local home Los clientes locales pueden utilizar esta interfaz para invocar al bean. La mayor diferencia radica en el tratamiento de excepciones public interface HelloLocalHome extend javax.ejb.EJBLocalHome { HelloLocal create() throws java.ejb.CreateException; } 62 Desarrollo de un EJB Descriptor deployment independiente Los servicios middleware requeridos por el Bean (XML) - Gestión del bean: Nombre, tipo, home interface - Requisitos de Persistencia: Cómo almacenar los datos - Requisitos Transacionales - Requisitos de Seguridad 63 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 31 Desarrollo de un EJB Descriptor deployment independiente <ejb-jar> <enterprise-beans> <session> <ejb-name> El nombre del bean <home> El nombre de la interface home <remote> El nombre de la interface remota <local-home> El nombre del la interface local remota <local> El nombre de la interface local <ejb-class> el nombre del la clase del bean (class) <session-type> Si es stateful o stateless <transaction-type> ....... <session> <enterprise-beans> <ejb-jar> 64 Desarrollo de un EJB Descriptor deployment independiente <ejb-jar> <enterprise-beans> <session> <ejb-name> Hello </ejb-name> <home> examples.HelloHome </home> <remote> examples.Hello </remote> <local-home> examples.HelloLocalHome </local- home> <local> examples.HelloLocal </local> <ejb-class> examples.HelloBean </ejb-class> <session-type> Stateless </session-type> <transaction-type> Container </transaction-type> <session> <enterprise-beans> <ejb-jar> Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 65 32 Desarrollo de un EJB Descriptor deployment dependiente • Describe parámetros no estándar. • Depende del servidor de EJBs. – Referencia JNDI 66 Desarrollo de un EJB La clase Bean public class HelloBean implements javax.ejb.SessionBean { private SessionContext ctx; public void ejbCreate() {}; public void ejbRemove() {}; public void ejbActivate() {}; public void ejbPassivate() {}; public void setSessionContext(javax.ejb.SessionContext ctx){ this.ctx=ctx;} //Métodos de negocio public String hello() { return “Hello, World!”; } 67 } Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 33 Desarrollo de un EJB El contexto EJB Container/Server 2: Lo almacena en una variable privada 1: Da el contexto al Bean Objeto EJB 3: Invocación método Objeto EJB Contexto Enterprise Bean 4: Consulta al contenedor por información de contexto Ejemplo: El bean necesita saber quien es el usuario que le está invocando 68 Desarrollo de un EJB El fichero de despliegue. El fichero .jar Interfaces Home Remota Interfaces Home Local Creador fichero JAR Fichero Jar EJB Clases Enterprise Interfaces Object Interfaces Object Bean Remota Local Deployment Descriptor independiente Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos Deployment Descriptor dependiente 69 34 Desarrollo de un EJB El fichero de despliegue. El fichero .jar • Construir el JAR – El JAR contiene: • Clases de implementación del Bean, interfaz Home y Remote. • Descripores de despliegue: estándar y específico. – Situados en el directorio de clases: • jar -cvf <archivo-jar>.jar * – El fichero jar tiene la siguiente estrucutura: – /<clases del EJB> – /META-INF/ejb-jar.xml 70 Desarrollo de un EJB Pasos a seguir § Escribir los ficheros .java que componen el bean: interfaces local y remoto, interfaces home local y remoto, el propio fichero y las clases adyacentes que sean necesarias § Escribir el fichero de deployment § Compilar las clases del punto 1 § Crear al fichero Ejb-jar utilizando la utilidad jar. Este fichero debe contener el fichero de deployment y los ficheros .class § Implantar el fichero ejb-jar § Iniciar el contenedor de EJB (servidor) § Crear un fichero .java que pruebe si funciona correctamente 71 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 35 Desarrollo de un EJB Modelo de Objetos <<interface>> java.io.Serializable <<interface>> javax.rmi.Remote Viene con la plataforma Java 2 <<interface>> javax.ejb.EnterpriseBean <<interface>> <<interface>> <<interface>> javax.ejb.EJBLocalObject javax.ejb.EJBObject javax.ejb.EJBHome <<interface>> javax.ejb.EJBLocalHome <<interface>> javax.ejb.SessionBean Viene con la distribución de EJB <<interface>> Hello World Local Interface <<interface>> Hello World Remote Interface <<interface>> Hello World Home Interface <<interface>> Hello World Local HomeInterface Hello World Bean Clase Implementación Suministrado por el proveedor del Bean (tenemos que escribirlo) Hello World EJB Local Object Hello World EJB Object Hello World Home Object Hello World Local Home Object 72 Generado por nosotros utilizando las herramientas del vendedor Desarrollo de un EJB El cliente EJB Container/Server Interface 3: Crear nuevo objeto EJB Home Objeto Home Cliente 5: return referencia objeto EJB 4: Crear objeto EJB 6: Invocación método 1: localizar referencia objeto Home 2: return referencia objeto Home interface local Objeto EJB Enterprise Beans 7: delegar llamada al bean JNDI Servicio Naming (LDAP) 73 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 36 Desarrollo de un EJB El cliente – Crear el contexto inicial. • Los parámetros iniciales dependen de la plataforma. – Localizar la referencia al EJB. • Se obtiene una referencia a un objeto Home. – Obtener la referencia a un objeto remoto (Remote Interface). – Invocar los servicios ofrecidos por el EJB a través de la interfaz remota obtenida. 74 Desarrollo de un EJB El código del cliente Import javax.naming.Context; import javax.naming.InitialContext; import javax.util.Properties; Parámetros de conexión al servidor JNDI public class HelloClient { public static void main(String[] args) throws Exception { //propiedades JNDI Properties props=System.getProperties(); // Obtener el contexto JNDI inicial (ip, posicion árbol) InitialContext ctx=new InitialContext(props); “ Conexión” con el servidor JNDI 75 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 37 Desarrollo de un EJB El código del cliente Localización del objeto Home Object obj=ctx.lookup(“HelloHome”); // Casting HelloHome home=(HelloHome) javax.rmi.PortableRemoteObject.narrow( obj, HelloHome.class); Hello hello=home.create(); Creación del objeto remoto System.out.println(hello.hello()); } Invocación de los servicios del EJB 76 Índice § § § § Tecnología utilizada Arquitectura de componentes Desarrollo de un EJB Clasificación de EJB´s § Los Session Bean § Los Entity Bean 77 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 38 Clasificacion de EJB Session Bean Características Ejecutados en relación a un único cliente Puede manejar datos en una BD subyacente De vida relativamente corta No se garantiza su persistencia en caso de caída del sistema Implementa lógica y/o reglas de negocio Ejemplos: validación tarjeta crédito carrito de la compra 78 Clasificacion de EJB Entity Bean Características Representa datos en una base de datos Siempre es transaccional Siempre compartido por múltiples usuarios Existe mientras existan los datos que subyacen Su persistencia es transparente en caso de caída del sistema Encapsula objetos de negocio Ejemplo: control de inventario de productos 79 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 39 Los Entity-bean Account class String accountID String ownerName double balance AccountID ownerName balance 1 Ray Combs 1000 2 Bob Barker 1500 3 Monty Haul 2750 deposit(amount) withdraw(amount) Account Instance Tabla Account accountID=1 ownerName=Ray Combs balance=1000 Base de datos 80 Los Entity Bean Account class String accountID String ownerName double balance deposit(amount) § El desarrollador del Bean únicamente withdraw(amount) se encarga de implementar los métodos deposit y withdraw § El sistema se encargará de manera automática de actualizar la BD cuando haya habido alguna operación que haya modificado alguna de las variables del objeto cuenta 81 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 40 Desarrollo de EJB’s Los Session Beans 82 Índice § Clasificación de los Session Bean § Stateless y Stateful § Desarrollo de un Session Bean § Stateless y Stateful 83 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 41 Introducción a los Session Beans • Tipos de Session Bean – Sin estado (stateless EJBs) • Completamente transitorio • Mera pieza de maquinaria de negocio • No retiene información entre llamadas – Con estado (stateful EJBs) • Mantiene “estado conversacional” con el cliente • “Extensión lógica en el servidor de la aplicación cliente • Pueden participar en transacciones • Accedidos a través de su interfaz remota 84 Ejemplo I: Stateless bean Bean sin estado EJB Container/Server Interface Home Gestión de Passwords Objeto Home isLoginValid(login, passwd) isLoginValid(login, passwd ) Enterprise Beans Interface Remota isLoginValid(login, passwd) Objeto EJB 85 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 42 Ejemplo I: Stateless bean Bean sin estado 4 partes requeridas al definir un bean: – La interfaz remota. Extiende javax.ejb.EJBObject – La interfaz “Home”. Extiende javax.ejb.EJBHome – La definición de la clase del Bean – Meta-data (descriptores y otra info. de configuración) 86 Ejemplo I: Stateless bean La interfaz remota • Creación de la interfaz remota – Extiende javax.ejb.EJBObject import javax.ejb.*; import java.rmi.*; public interface PasswordManager extends EJBObject { public Boolean isLoginValid(String login, String password) throws java.rmi.RemoteException; } • Esta interfaz define los servicios ofrecidos por el EJB. – Todos los parámetros deben ser serializables 87 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 43 Ejemplo I: Stateless bean La interfaz home • Creación de la interfaz home – Extiende javax.ejb.EJBHome import javax.ejb.*; import java.rmi.*; public interface PasswordManagerHome extends EJBHome { PasswordManager create() throws CreateException, RemoteException } – Los métodos create(): • Invocan a los métodos ejbCreate() de la clase bean • Deben corresponderse en número y tipo de argumentos a los métodos ejbCreate() de la clase bean. • En lugar de devolver void devuelven una instancia de la interfaz remota • Lanza cualquier excepción que lance sus homónimos en la clase bean, y debe lanzar javax.ejb.CreateException – Los métodos remove() no deben ser sobreescritos . 88 La interfaz home Relación entre create() y ejbCreate() EJB Container/Server 2:ejbCreate () 1: create Objeto Home Cliente 4: return id objeto 6: return referencia objeto EJB Session Bean Instance 5: Crear objeto EJB(id objeto) Objeto EJB 89 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 44 Ejemplo I: Stateless bean La clase Bean Debe implementar javax.ejb.SessionBean , que proporciona los métodos: import javax.ejb.*; import java.rmi.*; public class PasswordManagerBean implements SessionBean { public boolean isLoginValid(String login, String password) thr ows Rem oteException {} public void ejbCreate () throws RemoteException {} public void ejbActivate ejbActivate() throws RemoteException {} public void ejbPassivate () throws RemoteException {} public void ejbRemove () throws RemoteException {} public void setSessionContext (SessionContext ctx) throws RemoteException {} } – Estos métodos son invocados por el contenedor de EJBs 90 Gestion de los Beans Stateless Bean EJB Container/Server Cliente Stateless Bean Pool Bean Interface Remota Bean Objeto EJB Bean Invoke() Bean Se tiene un conjunto de Beans, y los clientes pueden reutilizar los Beans 91 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 45 Ejemplo I: Stateless bean La clase Bean • Creación de la clase bean (II) – Además se deben implementar uno o más métodos ejbCreate (): • Es el mecanismo de inicialización del EJB. Puede estar parametrizado. – También debe implementar uno o más métodos de negocio: • Debe implementar los servicios de la interfaz remota import javax.ejb.*; import java.rmi.*; public class PasswordManagerBean implements SessionBean { ... public Boolean isLoginValid(String login, String password) throws java.rmi.RemoteException ; { //Pedir una conexion JDBC al Pool de conexiones . DataSource ds = initialContext.lookup(“java:comp/env/jdbc/Passwords ”); Connection conn=ds.getConnection(); ... //Comprobar si existe ese login con ese password // Boolean passValid=………………….. return passValid; } 92 ... } Ejemplo II: Stateful bean La clase Bean EJB Container/Server Interface Home Gestión de Passwords Objeto Home Interface Remota isLoginValid(passwd) changePass(oldPass, newPass) Enterprise Beans isLoginValid(passwd) changePass(oldPass,newPass) Objeto EJB isLoginValid(passwd) changePass(oldPass, newPass) 93 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 46 Ejemplo II: Stateful bean Bean con estado 4 partes requeridas al definir un bean: – La interfaz remota. Extiende javax.ejb.EJBObject – La interfaz “Home”. Extiende javax.ejb.EJBHome – La definición de la clase del Bean – Meta-data (descriptores y otra info. de configuración) 94 Ejemplo II: Stateful bean La interfaz remota • Creación de la interfaz remota – Extiende javax.ejb.EJBObject import javax.ejb.*; import java.rmi.*; public interface PasswordManager extends EJBObject { public Boolean isLoginValid(String password) throws java.rmi.RemoteException; public Boolean changePass(String oldPass, String new Pass) throws java.rmi.RemoteException; } • Esta interfaz define los servicios ofrecidos por el EJB. – Todos los parámetros deben ser serializables 95 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 47 Ejemplo II: Stateful bean La interfaz home • Creación de la interfaz home – Extiende javax.ejb.EJBHome import javax.ejb.*; import java.rmi.*; public interface PasswordManagerHome extends EJBHome { PasswordManager create() throws CreateException, RemoteException PasswordManager create(String login) throws CreateException , RemoteException } – Los métodos create(): • Los metodos create invocan a los métodos ejbCreate () de la clase bean. • Deben corresponderse en número y tipo de argumentos a los métodos ejbCreate() de la clase bean. • En lugar de devolver void devuelven una instancia de la interfaz remota • Lanza cualquier excepción que lance sus homónimos en la clase bean, y debe lanzar javax.ejb.CreateException – Los métodos remove() no deben ser sobreescritos . 96 Ejemplo II: Stateful bean La clase Bean Debe implementar javax.ejb.SessionBean , que proporciona los métodos: import javax.ejb.*; import java.rmi.*; public class PasswordManagerBean implements SessionBean { String name; public boolean isLoginValid(String password) throws RemoteException {} public void ejbCreate ejbCreate(String name) throws RemoteException {} public void ejbCreate ejbCreate() throws RemoteException {} public void ejbActivate ejbActivate() throws RemoteException {} public void ejbPassivate ejbPassivate() throws RemoteException {} public void ejbRemove ejbRemove() throws RemoteException {} public void setSessionContext (SessionContext ctx ) throws RemoteException {} } – Estos métodos son invocados por el contenedor de EJBs 97 Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 48 Ejemplo II: Stateful bean La clase Bean • Creación de la clase bean (II) – Además se deben implementar uno o más métodos ejbCreate (): • Es el mecanismo de inicialización del EJB. Puede estar parametrizado. – También debe implementar uno o más métodos de negocio: • Debe implementar los servicios de la interfaz remota import javax.ejb.*; import java.rmi.*; public class PasswordManagerBean implements SessionBean { String login; public void ejbCreate(String login) { this.login=login; } public Boolean isLoginValid( String password) throws java.rmi.RemoteException { //Pedir una conexion JDBC al Pool de conexiones. DataSource ds = initialContext.lookup(“java:comp/env/jdbc/Passwords”); Connection conn=ds.getConnection(); ... //Comprobar si existe el “login” con ese password // Boolean passValid=………………….. return passValid; 98 } ...} Ingeniería del Software 2004/2005 Dpto. Lenguajes y Sistemas Informáticos 49