21/04/23 Sistemas Distribuidos 1
JBOSS - EJB 3.0
Trabajo de InvestigaciónAsignatura de Sistemas DistribuidosCurso 5º de Ingeniería InformáticaAlumno: Pablo J. Rosique VidalProfesor: Diego Sevilla Ruiz
Sistemas Distribuidos 221/04/23
Í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 321/04/23
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 421/04/23
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 521/04/23
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 621/04/23
Creando Aspectos en JBoss AOPpublic 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);
}
}
}
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");
}
}
}
Dificulta el desarrollo del código
El código crece rápidamente
Dificulta la extensión de la funcionalidad
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
Sistemas Distribuidos 721/04/23
Aplicar Aspectos en JBoss AOP
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
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 >
Sistemas Distribuidos 821/04/23
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 921/04/23
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 1021/04/23
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 1121/04/23
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 1221/04/23
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 1321/04/23
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 1421/04/23
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 1521/04/23
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 1621/04/23
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 1721/04/23
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 1821/04/23
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 1921/04/23
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
PRÉSENTATION(premier tiers)
LOGIQUE MÉTIER(tiers intermediaire)
BACK-END(troisiéme tiers)
EJBSession
EJBSession
EJBSession
Table
Table
Table
Serveur d’applications J2EE
Les valeurs de la méthode invoquée
Invocation d’une méthode métier
InterfaceRemote
InterfaceHome
Réseau
( protocole RMI )POJO
JNDI
JMS
JDBC
EJBEntité
Conteneur EJB- Gestion du cycle de vie- Gestion de communication- Gestion de connexion de base de données- Gestion de transaction
InterfaceLocale
InterfaceHome locale
JDBC
Stub
Sistemas Distribuidos 2021/04/23
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 2121/04/23
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 2221/04/23
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 2321/04/23
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 2421/04/23
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 2521/04/23
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 2621/04/23
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
Top Related