Title: 8. Enterprise Java Beans
18. Enterprise Java Beans
- Gestión de Sistemas en Internet
- Universidad Antonio de Nebrija, 2002/03
- Justo N. Hidalgo Sanz
2Middleware Rules!
3EJBs en acción
4Restricciones 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.
5Fases 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.
6Creació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.
7Creació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
8Creació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
9Ensamblaje
- Quién desarrollador de software.
- Qué
- Ensambla enterprise beans (.jar) y componentes
web (.war) en una aplicación J2EE (.ear). - Descriptor de despliegue.
- .ear
10Despliegue
- 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.
11Tipos de Enterprise Beans
- Componente server-side que puede desplegarse en
un entorno distribuido multi-capa. - Tres tipos de beans
- Session beans.
- Entity beans.
- Message-driven beans.
12Session 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.
13Session 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.
14Entity 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.
15EJB 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.
16(No Transcript)
17Enterprise 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).
18Enterprise 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)
19Enterprise 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.
20Session 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.
21Session 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.
- A lo mejor no se destruye, si hay pooling.
22Session 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.
23Entity 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.
24Servicios 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
- Dejar el control de concurrencia a la base de
datos - Sincronización de acceso a un entity bean con un
id particular.
25Servicios 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.
26Mejoras 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)
27Abstract 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.
28Abstract 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.
29Interfaces locales
- La versión EJB1.1 sólo tenía interfaces remotas
(RMI por debajo) gt prestaciones. - Ahora se introduce la opción local gt 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.
30Relaciones (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.
31Relaciones (II). Tipos
- Direccionalidad
- Unidireccional o bidireccional.
- Multiplicidad
- One-to-one
- One-to-many
- Many-to-many
32Relaciones (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.
33EJB Query Language
- Lenguaje orientado a objetos de consulta a beans.
- Parecido a SQL, pero internamente diferente.
- Lo veremos con un ejemplo.
34Entity 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 - Handcrafting.
- TOPLink, JavaBlend (OK, pero lentos).
- Entity Beans tratar los datos como objetos.
35Entity 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.
36Entity 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.
37Entity 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
- todos los métodos de búsqueda empiezan así.
- Al menos ejbFindByPrimaryKey.
38Message-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
- Punto a punto
- Publish/subscribe
39Point-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.
40Publish-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).
41JMS
Queue /topic
Sends To
Message Producer
creates
creates
creates
Session
Message
creates
Connection Factory
Connection
creates
Queue /topic
Gets From
Message Consumer
42MSB
- 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.
43Qué 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.
44Bibliografía
- Mastering Enterprise JavaBeans (theserverside.com)
- Tutorial de J2EE (j2eedocs) java.sun.com
- Professional Java Server Programming, J2EE 1.3
Edition. Wrox.