Title: JBOSS - EJB 3.0
1JBOSS - 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
2Índice y Contenido
- JBoss AS 4.0.x
- J2EE Aspect-Oriented Programming (AOP)
- Contenedor EJBs
- Contenedor Servlets y JSPs (tomcat)
- EJB 3.0
- Motivación
- Implementación del Modelo
- Tipos de Entidades
- EJBs de Entidad
- Persistencia (BMP, CMP)
- EJBs de Sesion
- EJBs Dirigidos por Mensajes
- Funcionamiento de los Enterprise JavaBean
- Anotaciones (Xdoclet)
- Transacciones
- Roles y Seguridad
- Conclusiones
3JBoss 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)
4J2EE 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)
5J2EE 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
6Creando 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")
7Aplicar Aspectos en JBoss AOP
1. ltbind pointcut"public void com.mc.BankAccountD
AO-gtwithdraw(double amount)"gt 2. ltinterceptor
class"com.mc.Metrics"/gt 3. lt/bind gt 4. ltbind
pointcut" com.mc.billing.-gt(..)"gt 5.
ltinterceptor class"com.mc.Metrics"/gt 6. lt/bind gt
- 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
8Enlazado 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)
9Problemas 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
10Motivació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.
11Implementació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 EJBs proporcionan un modelo de componentes
distribuido estandar para el lado del servidor
12Implementació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)
13Tipos de Enterprise JavaBeans
- EJBs 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)
ltentitygt ltejb-namegtProductolt/ejb-namegt lthomegtPro
ductoHomelt/homegt ltremotegtProductolt/remotegt ltejb-
classgtProductoBeanlt/ejb-classgt ltpersistence-typegt
beanlt/persistence-typegt ltprim-key-classgtjava.lang
.Stringlt/prim-key-classgt ltreentrantgtFalselt/reentr
antgt lt/entitygt
14Persistencia 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
ltentitygt ltejb-namegtProductolt/ejb-namegt ltejb-clas
sgtProductoBeanlt/ejb-classgt lthomegtProductoHomelt/ho
megt ltremotegtProductolt/remotegt ltpersistence-typegt
Containerlt/persistence-typegt ltprimkey-fieldgtidlt/p
rimkey-fieldgt ltprim-key-classgtjava.lang.Stringlt/p
rim-key-classgt ltreentrantgtTruelt/reentrantgt ltcmp-
versiongt2.xlt/cmp-versiongt ltcmp-fieldgt ltfield-na
megtidlt/field-namegt lt/cmp-fieldgt ltcmp-fieldgt ltf
ield-namegtnombrelt/field-namegt lt/cmp-fieldgt lt/e
ntitygt
15Persistencia 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)
ltquerygt ltquery-methodgt ltmethod-namegtfindByNombr
elt/method-namegt ltmethod-paramsgt ltmethod-param
gtjava.lang.Stringlt/method-paramgt lt/method-params
gt lt/query-methodgt ltejb-qlgt ...
lt/ejb-qlgt lt/querygt
- Modelo ideal cuando desarrollamos el sistema de
información desde el principio
16Tipos 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
ltsessiongt ltejb-namegtGestorPedidoslt/ejb-namegt ltho
megtGestorPedidosHomelt/homegt ltremotegtGestorPedidos
lt/remotegt ltejb-classgtGestorPedidosBeanlt/ejb-class
gt ltsession-typegtStatefullt/session-typegt lttransac
tion-typegtContainerlt/transaction-typegt lt/sessiongt
- EJBs 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)
17Funcionamiento 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
18Funcionamiento 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
19Modelo 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
20Anotaciones 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
21Anotaciones (Xdoclet)
- Toda esta meta-información es conveniente
expresarla dentro del código (herramienta XDocLet)
/ _at_ejbbean type"CMP" name"Producto"
cmp-version"2.x" primary-key"id
schema"Productos" _at_ejbinterface
remote-class"Producto" _at_ejbhome
remote-class"ProductoHome" _at_ejbfinder
signature"java.util.Collection findAll()"
query"SELECT OBJECT(o) FROM Productos AS o"
_at_ejbpk class"java.lang.String" / pubic
abstract class ProductoBean implements EntityBean
/ _at_ejbinterface-method
_at_ejbpersistent-field _at_ejbpk-field / public
abstract String getId()
22Transacciones
- 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
23Transacciones
- 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
24Roles 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.
ltmethod-permissiongt ltrole-namegtGerentelt/role-name
gt ltmethodgt ltejb-namegt Producto
lt/ejb-namegt ltmethod-namegt setPrecioBase
lt/ejb-namegt lt/methodgt ltmethod-permissiongt
25Conclusiones
- 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
26Bibliografía
- JBoss AOP
- http//docs.jboss.org/aop/1.3/aspect-framework/use
rguide/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.h
tml