Transcript Internet

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