You are on page 1of 60

Enterprise JavaBeans 2.

x
Aplicaciones Distribuidas

Contenido
Motivacin.

Interfaces locales.

Alternativas implantacin
del Modelo.

XDocLet

Lgica de Negocio.

Transaccines.

Programacin Basada en
Componentes.

Persistencia CMP 1.x

Roles EJB.

Persistencia CMP 2.x

Visin Cliente de EJB.

Relaciones entre entidades.

Conclusiones.

Modelado de entidades en
EJB.
Persistencia BMP.

Motivacin
Implementacin del Modelo en un sistema enterprise.
Datos + Lgica de Negocio.
Desafos:
Representacin de los datos: base de datos relacional, BD
orientada a objetos, XML, LDAP, ...
Acceso a los datos: JDBC, JNDI, DAO, JDO, ...
Representacin de la lgica de negocio.
Todo ello de un modo:
Distribuido, eficiente, escalable, seguro, transaccional,
reutilizable, configurable, ...
3

Implantacin del Modelo


Obtenemos el modelo a partir de la aplicacin de un proceso de
desarrollo.
Modelos en UML.

Solucin tradicional:
Del modelo se identifican las entidades (objetos de negocio).
Las entidades se representan en esquema relacional BD
Inconveniente: Lgica OO vs. Datos Relacionales.

Controlador/
Vista

JDBC

Lgica de Negocio
4

Base de Datos

Implantacin del Modelo


Alternativa Correspondencia objeto/relacional:
Herramientas que proporcionan persistencia relacional a los objetos
de un modo transparente.
Ejemplo: JavaBlend
Inconvenientes: no son estndares.
Correspondencia
Objeto/Relacional
Controlador/
Vista

JDBC

Lgica de Negocio

Base de Datos

Implantacin del Modelo JDO


Especificacin Java Data Objects (JDO):
Persistencia transparente en Java.
Soporte de transacciones locales y distribuidas.
Mecanismo de consultas basado en filtros de
colecciones.
Independiente del almacenamiento.
Controlador/

Vista

JDO

Lgica de Negocio
6

Base de Datos
Desarrollo de Aplicaciones Distribuidas

Implantacin del Modelo JDO


Inconvenientes:
Los objetos entidad se
replican a travs del
sistema.
No es escalable.

Implantacin del Modelo EJB


EJB: compartir las entidades entre aplicaciones ...
RMI/IIOP
Controlador/
Vista

EJB

Controlador/
Vista

RMI/IIOP

Lgica de Negocio

Lgica de Negocio

Base de Datos

Implantacin del Modelo EJB


EJB: compartir la lgica de negocio
Principio: lgica de negocio cercana a los datos.
Lgica de Negocio

RMI/IIOP
EJB
RMI/IIOP

Base de Datos

Controlador/
Vista

Controlador/
Vista

Modelado de Entidades en
EJB
En EJB una entidad es un objeto distribuido:
Hay que definir su interface remota RMI.
import java.rmi.*;!
!
public interface Producto extends javax.ejb.EJBObject {!
!!
!// Los atributos se representan como propiedades JavaBean!
!public String getNombre() throws RemoteException;!
!public void setNombre(String nombre) throws
RemoteException;!
!!
!// Si es de slo lectura slo ponemos el mtodo "get"!
!public String getId() throws RemoteException;
!!
!// ...
!!
!// Operaciones!
!public int precio() throws RemoteException;
!!
}!

10

Entidades Ciclo de Vida


Para controlar su ciclo de vida y obtener los objetos
necesitamos un Home.
Interface remota RMI que permite manejar las entidades.
import java.rmi.*;!
import javax.ejb.*;!
!
public interface ProductoHome extends javax.ejb.EJBHome { !!
!// Mtodos de creacin!
!public Producto create (String id, String nombre, int precioBase, int porcentajeDto) !
!
!throws RemoteException, CreateException;!
!!
!// Mtodos de localizacin!
!public Producto findByPrimaryKey(String id) // Obligatorio!
!
!throws RemoteException, FinderException; !
!!
!public java.util.Collection findAll() throws RemoteException, FinderException;
!!
}

11

Entidades Implementacin
Hay que programar una sola clase implementacin para las dos
interfaces remotas.
La implementacin depende del modelo de persistencia que utilicemos:
Bean Managed Persistence (BMP):
El programador se encarga de toda la persistencia.

Container Managed Persistence (CMP) 1.x:


El programador delega parte del trabajo al contenedor.
Todo lo relativo a la persistencia se indica declarativamente.

CMP 2.x:
El contenedor se encarga de toda la persistencia.

12

Persistencia BMP
La clase implementacin (bean) debe implementar la interface
javax.ejb.EntityBean
Declarar atributos para manejar la persistencia y el contexto
EJB:
!
private ProductoDAO productoDAO; // DAO productos!
private EntityContext context; // Contexto EJB!

Declarar atributos para almacenar las propiedades del objeto:


!
private String id; // Clave primaria!
private String nombre;!
// ...!
13

Persistencia BMP
Declarar un constructor vaco para la inicializacin:
Obtener el DAO Producto, etc.

Implementar los mtodos de la interface remota:


!// Mtodos de la interface remota del objeto!
!public String getId() { return id; }!
!!
!public String getNombre() { return nombre; }!
!!
!public void setNombre(String nombre) { this.nombre = nombre; }!
!// ... !

14

Persistencia BMP
Programar los mtodos de creacin:
public String ejbCreate (String id, String nombre, int precioBase, int porcentajeDto) {!
!
!!
!
!// Actualiza la instancia!
!
!this.id = id; this.nombre = nombre; // ...!
!
!!
!
!// Almacena la instancia en la base de datos!
!
!productoDAO.create(id, nombre, precioBase, porcentajeDto);!
!
!!
!
!// Devuelve la clave primaria!
!
!return id;!
}!
!
// El contenedor confirma que la instancia ya es est disponible !!
public void ejbPostCreate (String id, String nombre, int precioBase, int porcentajeDto) { }!
!

15

Persistencia BMP
Programar los mtodos de localizacin:
!// Mtodos de localizacin!
!public String ejbFindByPrimaryKey (String id) throws FinderException {!
!
!!
!
!// Se limita a comprobar si existe el objeto en el almacenamiento!
!
!if (productoDAO.findById(id) == null)!
!
!
!return null;!
!
!else!
!
!
!return id;!
!}
!!
!public Collection ejbFindAll() {
!
!
!!
!
!Collection resultados = productoDAO.findAll();!
!
!!
!
!// Iteramos sobre los resultados y construimos una coleccin!
!
!// con las claves primarias ...!
!
!!
!
!return clavesPrimarias;
!
!!
!}
16

Persistencia BMP
Programar un mtodo de eliminacin:
public void ejbRemove() throws RemoveException {!
!
!!
!// Borra la instancia actual de la base de datos!
!productoDAO.remove(id); !!
}

Mtodos que actualizan el contexto de EJB:


public void setEntityContext(EntityContext context) {!
!this.context = context;!
}!
!
public void unsetEntityContext() {!
!this.context = null;!
}

17

Persistencia BMP
El contenedor EJB se encarga de:
Mantener en memoria una cach eficiente de objetos.

Para realizar esta tarea tenemos que ayudarle programando


unos de mtodos de retrollamada.
Sincronizacin instancia base de datos:
// Almacena la instancia en la base de datos!
public void ejbStore() { !
!!
!productoDAO.update(id, nombre, precioBase, porcentajeDto);!
}
!!
// Actualiza la instancia con la informacin de la base de datos!
public void ejbLoad() { !
!!
!ProductoVO pVO = productoDAO.findById(id);!
!!
!// Actualiza la instancia!
!id = pVO.id; nombre = pVO.nombre; // ...!
}
18

Persistencia BMP

Mtodos para activar/desactivar la instancia:


!// Elimina su identidad y libera recursos!
!public void ejbPassivate() {!
!
! id = null; !
!}!
!
!// Obtiene una nueva identidad y adquiere recursos!
!public void ejbActivate() { !
!
!id = (String) context.getPrimaryKey(); !
!}

Cuando se desactiva, la instancia pierde la identidad.

Antes de la desactivacin, guarda la instancia (ejbStore).

Despus a la activacin, carga la instancia (ejbLoad).

19

Persistencia BMP - Ciclo


de Vida
ejbRemove()
Mtodos
interface

Mtodos Home
new()
setEntityContext()
No Existe

ejbStore/ejbPassivate()

Pooled

Ready

ejbActivate/ejbLoad()

ejbLoad()
ejbStore()

Libera
la instancia
ejbCreate/ejbPostCreate()

20

Persistencia BMP Configuracin

Necesitamos declarar ciertas propiedades del bean en un fichero de


configuracin (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>
21

Persistencia BMP Conclusiones

Responsabilidades del programador:


Atributos para la persistencia y contexto EJB.
Atributos para la propiedades.
Constructor para la inicializacin.
Mtodos de creacin.
Mtodos de localizacin.
Mtodo de borrado.
Mtodos para actualizar el contexto.
Mtodos de sincronizacin.
Mtodos de cambio de identidad.

Este modelo de persistencia conviene cuando el servidor


EJB no sepa manejar la persistencia de nuestros datos: XML,
LDAP, ...
22

Persistencia CMP 1.x


Quita al programador la responsabilidad del acceso a datos.
Todo lo relativo a la persistencia se indica declarativamente en
ficheros de configuracin.
Diferencias con el modelo anterior:
Hay que declarar como atributos pblicos las propiedades
persistentes de la instancia.
!
public String id; // Clave primaria!
public String nombre;!
// ...

23

Persistencia CMP 1.x


Diferencias:
No es necesario un constructor de inicializacin.
Los mtodos de creacin slo tienen que inicializar la instancia:
el contenedor gestiona la clave primaria

public String ejbCreate (String id, String nombre, int precioBase, int porcentajeDto) {!
!
!!
!
!// Actualiza la instancia!
!
!this.id = id; this.nombre = nombre; // ...!
!
!!
!
!// No tiene que devolver ninguna clave primara!
!
!return null;!
}!
// Confirma que la instancia ya es est disponible
!!
public void ejbPostCreate (String id, String nombre, int precioBase, int porcentajeDto) { }!

24

Persistencia CMP 1.x


Diferencias:
No hay que programar los mtodos de localizacin:
Se especificarn declarativamente.

No hay que programar un mtodo borrado:


Implementados por el contenedor.

Lo mtodos de sincronizacin (ejbLoad/ejbStore) se pueden


dejar vacos.
Los mtodos de cambio de estado (ejbPassivate/ ejbActivate) se
pueden dejar vacos.

25

Persistencia CMP 1.x - Configuracin


<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>1.x</cmp-version>
<cmp-field>
<field-name>id</field-name>
</cmp-field>
<cmp-field>
<field-name>nombre</field-name>
</cmp-field>

</entity>

26

CMP 1.x Configuracin Persistencia


Depende del servidor EJB

<entity>
<ejb-name>Producto</ejb-name>
<jdbc-mappings>
<jdbc-mapping>
<name>create</name>
<statement>

<action>INSERT INTO Producto (id , nombre ,


precioBase, porcentajeDto) VALUES ( ? , ? , ? , ?)
</action>
<source>isi</source>
<params>
<param>
<name>id</name>
<type>VARCHAR</type>
</param>

</statement>
</jdbc-mapping>

27

CMP 1.x Configuracin Persistencia


<jdbc-mapping>
<name>load</name>
<statement>
<action>SELECT id, nombre, precioBase, porcentajeDto
FROM Producto WHERE id=?
</action>
<source>aadd</source>
<params></params>
<fields>
<field>id</field>
<field>nombre</field>

</fields>

<jdbc-mapping>
<name>findAll</name>
<statement>
<action>SELECT id FROM Producto </action>

28

Persistencia CMP 1.x - Conclusiones


Este modelo de persistencia ahorra trabajo de
programacin Java, pero no de base de datos.
El modo de especificar el acceso a datos es
propietario.
El componente es reutilizable y configurable.

Resulta prctico cuando tengamos que utilizar un


esquema dado de base de datos.
29

Persistencia CMP 2.x


Nos olvidamos de cualquier cuestin relativa a la persistencia.
Diferencias respecto al modelo anterior:
La clase implementacin debe ser abstracta.
No hay que declarar los atributos persistentes.
Los mtodos de la interface remota de las propiedades se
declaran abstractos.
Los mtodos de creacin utilizan los mtodos set para
configurar la instancia.
public String ejbCreate (String id, String nombre, int precioBase, int porcentajeDto) {!
!setId(id); setNombre(nombre); // ...
!
!
!
!!
!return null;!
}

30

Persistencia CMP 2.x - Configuracin


En la configuracin definimos los mtodos de localizacin
utilizando el lenguaje neutral EJB-QL:
Similar a SQL, pero con extensiones orientadas a objetos.
Ejemplos:
SELECT OBJECT(p) FROM Productos AS p
SELECT OBJECT(p) FROM Productos AS p WHERE p.id = ?1

En el descriptor de despliegue aadimos el nombre del


esquema para el componente:
<abstract-schema-name>Productos</abstract-schema-name>

La versin del modelo de persistencia es 2.x.


<cmp-version>2.x</cmp-version>
31

Persistencia CMP 2.x - Configuracin

Los mtodos de localizacin se indican como:


<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>

El mtodo de consulta para findByPrimaryKey es automtico.

El contenedor crea las tablas e implementa los mtodos create, store, load y
remove.
32

Persistencia CMP 2.x Relaciones


En el modelo CMP 2.x podemos modelar las relaciones entre los
objetos de negocio.
categoria-producto

Producto
id : String
nombre : String
precioBase : int
porcentajeDto : int
*
precio() : int

+tiene-productos

Categoria
1

+producto-pertenece-categoria

La clase implementacin ProductoBean define la relacin del


siguiente modo:
public abstract Categoria getCategoria();
public abstract void setCategoria(Categoria c);
33

Persistencia CMP 2.x Relaciones


En el fichero de configuracin:
<ejb-relation>
<ejb-relation-name>Categoria-Producto</...>
<ejb-relationship-role>
<ejb-relationship-role-name>producto-pertenece-categoria</...>
<multiplicity>one</multiplicity>
<ejb-relationship-role-source>
<ejb-name>Producto</ejb-name>
</ejb-relationship-role-source >
<cmr-field><cmr-field-name>categoria</...>
</ ejb-relationship-role>

...
34

Persistencia CMP 2.x Relaciones


Podemos modelar una relacin 1:N:
Desde Categoria a Producto
En la clase implementacin CategoriaBean incluimos:
public abstract Collection getProductos();
public abstract void setProductos(
Collection productos);

En el fichero de configuracin expresamos el rol de Categoria


en la relacin:
...
<multiplicity>many</multiplicity>
<cmr-field>
<cmr-field-name>productos</cmr-field-name>
<cmr-field-type>java.util.Collection</cmr-field-name>

...
35

Persistencia CMP 2.x Relaciones


Relaciones N:M:
Las dos partes tendran una cardinalidad many.
Si la relacin es unidireccional, en el lado destino no definimos
ningn campo CMR.
Ejemplo: Categoria Producto
La semntica composicin se consigue aadiendo <cascadedelete /> a la parte dependiente de la relacin.
Ejemplo: Venta LineaVenta (dependiente)
La integridad referencial es controlada por el contenedor.
La implementacin de las colecciones permite mantener
esta integridad.
36

Persistencia CMP 2.x EJB-QL

Las consultas se realizan sobre los esquemas:


Productos, ...

Se utilizan los nombre lgicos de los campos:


nombre, categoria, ...

SELECT OBJECT(p) FROM Productos AS p

SELECT OBJECT(p) FROM Productos AS p


WHERE p.id = ?1

6. Todos las categoras con productos, que no sean


la raz:
SELECT OBJECT(c) FROM Categorias AS c
WHERE c.productos IS NOT EMPTY AND
c.categoriaPadre IS NOT NULL

SELECT DISTINT OBJECT(p.cliente) FROM


Pedidos p

3. Todos los correos electrnicos de los clientes que


hayan comprado:

5. Todos los productos cuyo id coincida con un


parmetro:

2. Todos los Clientes que hayan comprado,


evitando duplicados:

1. Todos los Productos:

WHERE lv.producto.nombre IN (CD,


LIBRO) AND lv.cantidad > 5

SELECT p.cliente.correo FROM Pedidos p

4. Todas los pedidos que hayan solicitado ms de 5


CDs o libros:
SELECT OBJECT(p)
FROM Pedidos p, IN (p.lineasVenta) lv
37

Persistencia CMP 2.x - Conclusiones


Permite trasladar un diagrama de clases en UML a
un modelo de entidades y relaciones EJB.
Modelo de persistencia ideal cuando desarrollamos
el sistema de informacin desde el principio.

Dependemos de la eficiencia de la
implementacin del contenedor EJB.

38

Interfaces Locales

Problema:
La interaccin entre objetos de negocio relacionados se realiza a travs de RMI.
Disminuye sensiblemente el rendimiento.

Solucin:
Definir interfaces locales para los objetos.

Pasos:
Definicin la interface local ProductoLocal:

Hereda de javax.ejb.EJBLocalObject

Definicin la interface home ProductoLocalHome:

Hereda de javax.ejb.EJBLocalHome

Ninguna de las operaciones lanza la excepcin RMIException

En el descriptor de configuracin:
<local-home>ProductoLocalHome</local-home>
<local>ProductoLocal</local>
39

XDocLet
Problema:
Para crear un objeto de negocio necesitamos programar
muchas clases e interfaces:
Producto, ProductoLocal, ProductoHome, ProductLocalHome,
ProductoBean

La informacin de configuracin se expresa en un fichero


independiente (ejb-jar.xml).
La programacin EJB se complica.

Solucin:
Utilizar la programacin basada en atributos (al estilo .NET)
La informacin declarativa se expresa dentro del cdigo
Herramienta XDocLet
40

XDocLet
Programamos slo la clase implementacin.
Todas las propiedades se especifican mediante etiquetas.
/**!
* @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();
41

Lgica de Negocio
EJB permite definir componentes que representen la
lgica de negocio:
Ejemplo: el controlador de un caso de uso

EJB session:
Estn asociados a un solo cliente en tiempo de
ejecucin y tienen un time-out.
El nmero de instancias en memoria de estos
componentes es controlado.
El proceso de desarrollo se diferencia de los objetos de
negocio (entidades).
42

Lgica de Negocio EJB


Session

Definicin de la interface remota:


Igual que los EJB entidad.

Definicin de la interface home:


Slo tienen sentido mtodos de creacin.

Programacin del bean:


Implementa la interface javax.ejb.SessionBean
Puede definir los atributos que necesite, siempre que sean
serializables
la instancia puede pasar a almacenamento secundario.

Podra tener un constructor de inicializacin si necesitara


trabajar con algn recurso externo: BD, procesador XML, etc.
43

Lgica de Negocio EJB


Session
Programacin del bean:
Los mtodos de creacin configuran la instancia:
No es necesario definir los mtodos ejbPostCreate

Hay que programar los mtodos para manejar el


contexto EJB:
private transient SessionContext context;!
!
public void setSessionContext(SessionContext context) { this.context = context; }!
public SessionContext getSessionContext() { return context; }

Hay que definir los mtodos para activar/desactivar la


instancia pasar a almacenamiento secundario
public void ejbActivate() {}!
public void ejbPassivate() {}
44

Lgica de Negocio EJB


Session
Los componentes sesin que tienen estado se denominan
Stateful
El contenedor guarda su estado en disco cuando necesite
desactivarlos.
Asegura que la misma instancia siempre est asociada al cliente.

Los que no tienen estado son del tipo Stateless.


El contenedor los maneja de forma ms eficiente.
No mantiene una asociacin con los clientes.
Diferencias respecto a la programacin:
Slo tiene sentido que el home tenga un solo mtodo create sin parmetros.
Los mtodos de activacin/desactivacin pueden ser ignorados.
45

EJB Session Configuracin


<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>

Session-type: Stateless o Stateful

Hay que indicar quien controla las transacciones (transaction-type):


Los componentes entidad son controlados automticamente.
46

Colaboracin
Habitualmente los EJB sesin colaboran con los entidad a travs
de sus interfaces locales.
EJB-Entity

EJB-Session
Stateful
Cliente

compras :
GestorCompras

totalAPagar( )

miCompra : l1 : LineaVentap1 : Productol2 : LineaVenta


Compra

getTotal( )

getSubtotal( )

precio( )
Retorna (cantidad * precio)

getSubtotal( )
Suma los subtotales de todas las
lineas de venta

Controlador

Modelo

47

Transacciones
Los componentes EJB pueden ser transaccionales.
El contenedor garantiza (propiedades ACID):
La atomicidad de las operaciones.
La consistencia de los datos.
El aislamiento transaccional.
La perdurabilidad de las modificaciones.
Modelos de transaccionalidad:
Required, RequiresNew, Mandatory, Supports, NotSupported y
Never.
Se definen para los mtodos.
48

Transacciones Modelo
Required
El modelo required es adecuado para una colaboracin de un caso de
uso:
Cliente

compras :
GestorCompras

totalAPagar( )

miCompra : l1 : LineaVentap1 : Producto l2 : LineaVenta


Compra

getTotal( )

getSubtotal( )

Crea una Tx

precio( )

getSubtotal( )
Utilizan la Tx

Modelo Transaccional "Required"

49

Transacciones
Las transacciones de los EJB entidad son gestionadas por el contenedor.
Para los sesin, dos alternativas (fichero configuracin):
Gestionada por el bean.
Gestionada por el contenedor recomendada.
Situaciones que abortan una transaccin:
Una excepcin de Runtime:
La instancia que la lanza queda descartada.

Marcar la transaccin como rollback:


context.setRollbackOnly();
Transacciones gestionadas por el contenedor.

50

EJB Visin de
Componente
Componente:
Entidad binaria reutilizable y configurable.
Ejemplos: componente COM, componente JavaBean,
ensamblados .NET, ...
Finalizado el desarrollo de un EJB podemos empaquetarlo
como componente:
Clases compiladas: Producto, ProductoHome, ProductoBean,
ProductoLocal, ProductoLocalHome
Descripcin: META-INF/ejb-jar.xml
Producto.jar
Entidad binaria (class) con metainformacin, reutilizable y
configurable
51

Componentes EJB Dependencias

Un componente expresa sus dependencias:


Un valor de configuracin:

<env-entry>
<description>Directorio Ficheros XML</description>
<env-entry-name>directorio-XML</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>/XML</env-entry-value>
</env-entry>

Una referencia a otro componente:


<ejb-ref>
<ejb-ref-name>ejb/validador</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home>ValidadorHome</home>
<remote>Validador</remote>
</ejb-ref>
52

Componentes EJB Dependencias


Dependencias:
Un recurso (servicio) del sistema:
<resource-ref>
<description>Fuente de Datos</description>
<res-ref-name>jdbc/Datos</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>

Las dependencias permiten configurar el componente.

Rol desarrollador.
53

Componentes EJB Configuracin


Un componente obtiene sus dependencias de su contexto
JNDI (java:comp/env):
Context ctxInicio = new InitialContext();!
!
// Obtiene la configuracin del componente!
Context entorno = ctxInicio.lookup("java:comp/env");!
!
String dirXML = (String) entorno.resolve("directorio-XML");!
!
// Obtiene una referencia RMI/IIOP al Home!
Object obj = entorno.resolve("ejb/validador");!
ValidadorHome valHome = !
!(ValidadorHome)PortableRemoteObject.narrow(obj,
ValidadorHome.class);!
!
// Obtiene la fuente de datos!
Object obj2 = entorno.resolve("jdbc/Datos");!
DataSource ds = (DataSource) obj2;
54

Componentes EJB - Roles


Programacin Basada en Componentes:
Desarrollo de aplicaciones basada en el ensamblado de componentes.

Rol ensamblador:
Establece los valores de configuracin de los componentes.
Establece las dependencias entre los componentes.
Define los mtodos transaccionales.
Define la seguridad de la aplicacin ...

Rol deployer:
Proporciona los recursos necesarios a los componentes de la
aplicacin.

en un ficheros de configuracin.
55

Componentes EJB - Roles

Establecer valores de configuracin:


<env-entry>
<env-entry-name>directorio-XML</env-entry-name>
<env-entry-value>c:/datos/XML</env-entry-value>
</env-entry>

Enlace entre componentes:


<ejb-ref>
<ejb-link>Validador</ejb-link>
<ejb-ref-name>ejb/validador</ejb-ref-name>
</ejb-ref>

Transaccionalidad:
<container-transaction>
<method>
<ejb-name>Producto</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
56

Componentes EJB Seguridad


Programacin declarativa de la seguridad.
Definicin de roles:
<security-role>
<role-name>Gerente</role-name>
</security-role>

Controlar la ejecucin de los mtodos:


<method-permission>
<role-name>Gerente</role-name>
<method>
<ejb-name> Producto </ejb-name>
<method-name> setPrecioBase </ejb-name>
</method>
<method-permission>
57

EJB Visin Cliente


El contenedor EJB registra una referencia al objeto remoto
Home de cada componente.
El registro se hace en un Servicio de Nombres CORBA.
Un cliente Java accede al registro configurando su contexto
JNDI:
Context ctxInicio = new InitialContext();!
!
// Obtiene una referencia al Home del Producto!
Object obj = ctxInicio.lookup("Producto");!
ProductoHome productoHome = !
!(ProductoHome)PortableRemoteObject.narrow(obj,
ProductoHome.class);!
!
Producto p = productoHome.findByPrimaryKey("1332343");!
System.out.println(p.getNombre());!
...
58

EJB Otros Aspectos de


Inters
Componentes Message-Driven:
Componentes consumidores de mensajes asncronos JMS.
Sin interfaces remoto y home.
Son componentes annimos instanciados cuando son
necesarios.
Guardar una referencia a un EJB en un fichero:
Mtodo getHandle() de cualquier referencia EJB.
Objeto Handle es serializable:
Se puede guardar en un fichero.

Mtodo getEJBObject() de Handle:


Obtiene la referencia.
Aplicar un narrow portable al tipo de la referencia.
59

Conclusiones

Servidor de aplicaciones para implantar el modelo de un sistema de


informacin:

Modelado de la lgica y objetos de negocio.


Eficiente: controla el uso de los objetos.
Diferente niveles de gestin de la persistencia.
Transaccional, a travs de reglas declarativas.
Reglas de seguridad declarativas.
Orientado a la programacin con componentes.

Independiente de la plataforma:
Ejecucin Java y protocolo CORBA/IIOP.

Muchos servidores de aplicaciones: WebLogic, JRun, JBoss ...

Tecnologa ideal para la implantacin de un sistema de


informacin enterprise en Java.
60