260 likes | 540 Views
JBOSS - EJB 3.0 . Trabajo de Investigación Asignatura de Sistemas Distribuidos Curso 5º de Ingeniería Informática Alumno: Pablo J. Rosique Vidal Profesor: Diego Sevilla Ruiz. Índice y Contenido. JBoss AS 4.0.x J2EE + Aspect-Oriented Programming (AOP) Contenedor EJB’s
E N D
JBOSS - EJB 3.0 Trabajo de Investigación Asignatura de Sistemas Distribuidos Curso 5º de Ingeniería Informática Alumno: Pablo J. Rosique Vidal Profesor: Diego Sevilla Ruiz Sistemas Distribuidos
Índice y Contenido • JBoss AS 4.0.x • J2EE + Aspect-Oriented Programming (AOP) • Contenedor EJB’s • Contenedor Servlets y JSP’s (tomcat) • EJB 3.0 • Motivación • Implementación del Modelo • Tipos de Entidades • EJB’s de Entidad • Persistencia (BMP, CMP) • EJB’s de Sesion • EJB’s Dirigidos por Mensajes • Funcionamiento de los Enterprise JavaBean • Anotaciones (Xdoclet) • Transacciones • Roles y Seguridad • Conclusiones Sistemas Distribuidos
JBoss AS 4.0.x • Primer servidor de aplicaciones de código abierto disponible en el mercado • Es una arquitectura orientada a servicios • Por estos motivos, JBoss es una plataforma muy popular de middleware para desarrolladores • Las características más destacadas de JBoss son: • Producto de licencia de código abierto sin coste adicional • Cumple los estándares • Confiable a nivel de empresa • Orientado a arquitectura de servicios • Es flexible y consistente • Ofrece servicios del middleware para cualquier objeto de Java • Soporte completo para Java Management Extensions (JMX) Sistemas Distribuidos
J2EE + Aspect-Oriented Programming (AOP) • Java 2 Enterprise Editions (J2EE) • Comprenden un conjunto de especificaciones y funcionalidades orientadas al desarrollo de aplicaciones empresariales • J2EE no deja de ser un estándar de desarrollo, construcción y despliegue de aplicaciones • Algunas de sus funcionalidades más importantes son: • Acceso a base de datos (JDBC) • Utilización de directorios distribuidos (JNDI) • Acceso a métodos remotos (RMI/CORBA) • Funciones de correo electrónico (JavaMail)… Sistemas Distribuidos
J2EE + Aspect-Oriented Programming (AOP) • ¿Qué es AOP? • Los aspectos en la metodología de desarrollo AOP se basa en el cross-cutting concern • AOP se beneficia principalmente del entorno J2EE (pero no solo de este) • Existen muchas implementaciones especificas de AOP (AspectJ, JBoss-AOP, etc.) • Las construcciones AOP se definen en JAVA y están vinculadas a una aplicación vía XML o por anotaciones Sistemas Distribuidos
Creando Aspectos en JBoss AOP • Dificulta el desarrollo del código • El código crece rápidamente • Dificulta la extensión de la funcionalidad public class BankAccountDAO { public void withdraw(double amount) { long startTime = System.currentTimeMillis(); try { // Actual method body...} finally { long endTime = System.currentTimeMillis() - startTime; System.out.println("withdraw took: " + endTime); } } } • El framework AOP rompe la llamada al método en partes • “invocation.invokeNext()” envuelve y delega en el método actual • Podemos extraer información contextual de la invocación public class Metrics implements org.jboss.aop.advice.Interceptor { public Object invoke(Invocation invocation) throws Throwable { long startTime = System.currentTimeMillis(); try { return invocation.invokeNext(); } finally { long endTime = System.currentTimeMillis() - startTime; java.lang.reflect.Method m = ((MethodInvocation)invocation).method; System.out.println("method " + m.toString() + " time: " + endTime + "ms"); } } } Sistemas Distribuidos
Aplicar Aspectos en JBoss AOP 1. <bind pointcut="public void com.mc.BankAccountDAO->withdraw(double amount)"> 2. <interceptor class="com.mc.Metrics"/> 3. </bind > 4. <bind pointcut="* com.mc.billing.*->*(..)"> 5. <interceptor class="com.mc.Metrics"/> 6. </bind > • El código de los aspectos se ejecutan en los puntos de corte (expresiones regulares) • Los puntos de entrada a eventos, pueden ser campos de acceso, llamadas a métodos, a constructores, etc. • Utiliza un formato XML para definir puntos de corte • Esto nos permite extender la funcionalidad de nuestro código sin que este crezca rápidamente Sistemas Distribuidos
Enlazado de los aspectos • La compilación de la aplicación con los puntos de corte se puede realizar de varias formas: • Preprocesado: el código se preprocesa (similar a la implementación de C++) • Post-procesado: “parchea” el codigo binario generado, enlazando las clases con sus aspectos • AOP-aware: la compilación genera los códigos binarios con los aspectos asociados • load-time: la maquina virtual de JAVA es la que se encarga de asociar a cada clase su/s aspectos en caso necesario, cuando se carga la clase • run-time: captura cada punto de corte en tiempo de ejecución y ejecuta el aspecto correspondiente en caso necesario (esta opción requiere un entorno de ejecución adicional, JVM en caso de JAVA) Sistemas Distribuidos
Problemas del AOP • La depuración es difícil, debido a que sintácticamente el código aparece como separado pero en tiempo ejecución no lo esta • Se han considerado alternativas para tratar el código separado como tipos C# • Otro problema del AOP es que la captura de los “joinpoints” son unidireccionales • Un entorno de desarrollo adecuado, puede ayudar a reducir los errores de este tipo Sistemas Distribuidos
Motivación y Contenedor EJB • Un contenedor es el código añadido a una aplicación usando servicios a fin de añadir semántica y propiedades • Servicios: persistencia, transacciones, seguridad, etc. • Implementación del modelo (Datos + Lógica del Negocio) de calidad en un entorno empresarial • Desafíos: • Representación de datos: BD relacional/OO, XML LAPD • Acceso a datos: JDBC, JNDI, DAO, JDO, etc. • Representación de la lógica del negocio • Todo esto de un modo distribuido, eficiente escalable, seguro, transaccional, reutilizable, etc. Sistemas Distribuidos
Implementación del Modelo EJB • Los Enterprise JavaBeans son una de las API que forman parte del estándar J2EE, pueden ofrecer: • comunicación remota utilizando CORBA • persistencia • transacciones • control de la concurrencia • eventos utilizando JMS (Java messaging service) • servicios de nombres y de directorio • seguridad • ubicación de componentes en un servidor de aplicaciones • Los EJB’s proporcionan un modelo de componentes distribuido estandar para el lado del servidor Sistemas Distribuidos
Implementación del Modelo • El objetivo es compartir entidades del modelo entre aplicaciones • Compartir la lógica del negocio (lógica del negocio cercana a los datos) Sistemas Distribuidos
Tipos de Enterprise JavaBeans • EJB’s de Entidad (Entity EJBs): su objetivo es encapsular los objetos de lado de servidor que almacenan los datos (persistencia) • Persistencia gestionada por el bean (BMP): el propio objeto entidad se encarga, mediante una BD u otro mecanismo, de almacenar y recuperar los datos a los que se refiere • La responsabilidad de implementar los mecanismos de persistencia es del programador • Atributos para la persistencia, contexto EJB y propiedades • Constructor de inicialización • Métodos de creación localización, borrado, sincronización, etc. • Requiere la declaración de ciertas propiedades de configuración del bean (fichero ejb-jar.xml) <entity> <ejb-name>Producto</ejb-name> <home>ProductoHome</home> <remote>Producto</remote> <ejb-class>ProductoBean</ejb-class> <persistence-type>bean</persistence-type> <prim-key-class>java.lang.String</prim-key-class> <reentrant>False</reentrant> </entity> Sistemas Distribuidos
Persistencia CMP 2.x • Persistencia gestionada por el contenedor (CMP): el contenedor se encarga de almacenar y recuperar los datos del objeto de entidad mediante un mapeado en una tabla de una BD • Todo lo relativo a la persistencia se indica declarativamente en ficheros de configuración <entity> <ejb-name>Producto</ejb-name> <ejb-class>ProductoBean</ejb-class> <home>ProductoHome</home> <remote>Producto</remote> <persistence-type>Container</persistence-type> <primkey-field>id</primkey-field> <prim-key-class>java.lang.String</prim-key-class> <reentrant>True</reentrant> <cmp-version>2.x</cmp-version> <cmp-field> <field-name>id</field-name> </cmp-field> <cmp-field> <field-name>nombre</field-name> </cmp-field> … </entity> Sistemas Distribuidos
Persistencia CMP 2.x • En la configuración definimos los métodos de localización utilizando un lenguaje neutral EJB-QL (ej. SELECT OBJECT (P) FROM Productos AS P) <query> <query-method> <method-name>findByNombre</method-name> <method-params> <method-param>java.lang.String</method-param> </method-params> </query-method> <ejb-ql> ... </ejb-ql> </query> • Modelo ideal cuando desarrollamos el sistema de información desde el principio Sistemas Distribuidos
Tipos de Enterprise JavaBeans • EJBs de Sesión (Session EJBs): gestionan el flujo de la información en el servidor. Generalmente sirven a los clientes como una fachada de los servicios proporcionados • Con estado (stateful): son objetos distribuidos que poseen un estado, que no es persistente, pero el acceso al bean se limita a un solo cliente • Sin estado (stateless): son objetos distribuidos que carecen de estado asociado permitiendo por tanto que se los acceda concurrentemente <session> <ejb-name>GestorPedidos</ejb-name> <home>GestorPedidosHome</home> <remote>GestorPedidos</remote> <ejb-class>GestorPedidosBean</ejb-class> <session-type>Stateful</session-type> <transaction-type>Container</transaction-type> </session> • EJB’s dirigidos por mensajes (Message-driven EJBs): los únicos beans con funcionamiento asíncrono. Usando el Java Messaging System (JMS), se suscriben a un tópico (topic) o a una cola y se activan al recibir un mensaje dirigido a dicho tópico o cola. No requieren de su instanciación por parte del cliente (componentes anónimos) Sistemas Distribuidos
Funcionamiento de los Enterprise JavaBean • Se diseñan componentes que ofrecen una funcionalidad concreta • Los componentes se disponen en un contenedor EJB dentro del servidor de aplicaciones (ej. JBoss) • El servidor puede distribuir cada componente en distintos clusters (hosts, estaciones de trabajo, etc.) • Las aplicaciones empresariales son cada vez mas complejas y distribuidas, de modo que es muy importante automatizar los procesos de mantenimiento Sistemas Distribuidos
Funcionamiento de los Enterprise JavaBean • Cada EJB debe facilitar una clase de implementación Java y dos interfaces Java • Interface Home: permite al código cliente manipular ciertos métodos de clase del EJB (métodos que no están asociados a ninguna instancia particular) • Interface Remoto: especifica los métodos de instancia públicos encargados de realizar las operaciones • Estas Interfaces especifican las signaturas de los métodos remotos del EJB, pueden ser: • métodos que no están ligados a una instancia específica • métodos ligados a una instancia específica • Se debe mantener la correspondencia entre métodos de interfaz y métodos de implementación Sistemas Distribuidos
Modelo de sesión EJB • Trabajamos simplemente con interfaces Java y no con clases concretas • El cliente invoca un método en los proxies generados • El servidor llamará al método correspondiente de la instancia de la clase de implementación Java Sistemas Distribuidos
Anotaciones de Metadatos • Esta es una de las claves de EJB 3.0 • Se usa principalmente por los desarrolladores para especificar requisitos en el comportamiento del contenedor • Las anotaciones de metadatos se utilizan como una alternativa a los Descriptores de Despliegue (Deployment Descriptors) de versiones anteriores • Ambas posibilidades se pueden usar de forma combinada Sistemas Distribuidos
Anotaciones (Xdoclet) • Toda esta meta-información es conveniente expresarla dentro del código (herramienta XDocLet) /** * @ejb:bean type="CMP" name="Producto" cmp-version="2.x" * primary-key="id“ schema="Productos" * @ejb:interface remote-class="Producto" * @ejb:home remote-class="ProductoHome" * @ejb:finder signature="java.util.Collection findAll()" * query="SELECT OBJECT(o) FROM Productos AS o" * @ejb:pk class="java.lang.String" */ pubic abstract class ProductoBean implements EntityBean { /** * @ejb:interface-method * @ejb:persistent-field * @ejb:pk-field */ public abstract String getId(); Sistemas Distribuidos
Transacciones • Los componentes EJB pueden ser transaccionales • El contenedor garantiza • La atomicidad de las operaciones • La consistencia de los datos • El aislamiento transaccional • La perdurabilidad de las modificaciones • Existen distintos modelos de transaccionalidad, como: • Required: arranca una transacción si no hay ninguna actual • RequiresNew: inicia siempre una nueva transaccion y suspende las que han dejado de usarse • Supports: reutiliza transacciones existentes Sistemas Distribuidos
Transacciones • Las transacciones de los EJB entidad son gestionadas por el contenedor • Para los sesión, dos alternativas (fichero configuración): • Gestionada por el bean • Gestionada por el contenedor (recomendada) • Situaciones que abortan una transacción: • Una excepción de Runtime: • La instancia que la lanza queda descartada. • Marcar la transacción como rollback: • context.setRollbackOnly() • Transacciones gestionadas por el contenedor Sistemas Distribuidos
Roles y Seguridad • Desarrollo de aplicaciones basada en el ensamblado de componentes • Rol ensamblador • Rol deployer • Ficheros de configuración • Pueden definir enlace entre componentes, transaccionalidad, control de ejecución de métodos, etc. <method-permission> <role-name>Gerente</role-name> <method> <ejb-name> Producto </ejb-name> <method-name> setPrecioBase </ejb-name> </method> <method-permission> Sistemas Distribuidos
Conclusiones • Existe mucho soporte de servidores de aplicaciones (JBoss, WebLogic, etc.) • Eficiente (controla el uso de objetos) • Transaccional mediante reglas declarativas • Reglas de seguridad • Orientado a la programación con componentes • EJB 3.0, ofrece una nueva, simplificada y mejorada API, para el desarrollo de aplicaciones empresariales distribuidas • Independiente de la plataforma • Ejecución JAVA y protocolo CORBA/IIOP • Mejora la arquitectura y reduce la complejidad de las versiones anteriores (EJB 2.1) • Permite anotaciones para facilitar su uso y AOP para el mejorar la extensibilidad Sistemas Distribuidos
Bibliografía • JBoss + AOP • http://docs.jboss.org/aop/1.3/aspect-framework/userguide/en/pdf/jbossaop_userguide.pdf • http://docs.jboss.org/aop/1.3/aspect-framework/ • http://aopalliance.sourceforge.net/ • EJB 3.0 • http://java.sun.com/products/ejb/ • http://java.sun.com/products/ejb/docs.html • http://www.oracle.com/technology/tech/java/ejb30.html Sistemas Distribuidos