Académique Documents
Professionnel Documents
Culture Documents
x
Aplicaciones Distribuidas
Contenido
Motivacin.
Interfaces locales.
Alternativas implantacin
del Modelo.
XDocLet
Lgica de Negocio.
Transaccines.
Programacin Basada en
Componentes.
Roles EJB.
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
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
JDBC
Lgica de Negocio
Base de Datos
Vista
JDO
Lgica de Negocio
6
Base de Datos
Desarrollo de Aplicaciones Distribuidas
EJB
Controlador/
Vista
RMI/IIOP
Lgica de Negocio
Lgica de Negocio
Base de Datos
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
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.
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!
Persistencia BMP
Declarar un constructor vaco para la inicializacin:
Obtener el DAO Producto, etc.
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); !!
}
17
Persistencia BMP
El contenedor EJB se encarga de:
Mantener en memoria una cach eficiente de objetos.
Persistencia BMP
19
Mtodos Home
new()
setEntityContext()
No Existe
ejbStore/ejbPassivate()
Pooled
Ready
ejbActivate/ejbLoad()
ejbLoad()
ejbStore()
Libera
la instancia
ejbCreate/ejbPostCreate()
20
23
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
25
<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
<entity>
<ejb-name>Producto</ejb-name>
<jdbc-mappings>
<jdbc-mapping>
<name>create</name>
<statement>
</statement>
</jdbc-mapping>
27
</fields>
<jdbc-mapping>
<name>findAll</name>
<statement>
<action>SELECT id FROM Producto </action>
28
30
El contenedor crea las tablas e implementa los mtodos create, store, load y
remove.
32
Producto
id : String
nombre : String
precioBase : int
porcentajeDto : int
*
precio() : int
+tiene-productos
Categoria
1
+producto-pertenece-categoria
...
34
...
35
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
Hereda de javax.ejb.EJBLocalHome
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
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
Colaboracin
Habitualmente los EJB sesin colaboran con los entidad a travs
de sus interfaces locales.
EJB-Entity
EJB-Session
Stateful
Cliente
compras :
GestorCompras
totalAPagar( )
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( )
getTotal( )
getSubtotal( )
Crea una Tx
precio( )
getSubtotal( )
Utilizan la Tx
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.
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
<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>
Rol desarrollador.
53
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
Transaccionalidad:
<container-transaction>
<method>
<ejb-name>Producto</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
56
Conclusiones
Independiente de la plataforma:
Ejecucin Java y protocolo CORBA/IIOP.