Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Enterprise JavaBeans
Categorías de EJBs
¡ 3 tipos de Enterprise JavaBeans:
l Entity Beans: representan entidades de
negocio y proveen acceso a datos a través
de métodos. Se basan en la idea del
mapeo objeto/relacional
l Session Beans: pensados para modelar
procesos de negocio que son accedidos de
manera síncrona
l Message-driven Beans: pensados para
modelar procesos de negocio que son
accedidos de manera asíncrona,
permiten el uso de JMS desde EJBs
Session EJBs
¡ Dos tipos:
l Stateful (Con estado)
¡ El contenedor garantiza el mantenimiento
del estado del componente entre distintas
invocaciones (se serializan y deserializan)
l Stateless (Sin estado)
¡ El contenedor de EJBs no garantiza que
un mismo EJB guarde su estado entre dos
invocaciones del mismo cliente. Son
“pooleables” y más ligeros que los
Stateful
¡ Incorporados en la especificación
2.0.
¡ Pensados para mensajería
asíncrona.
¡ Funcionan sobre JMS (manejo de
colas de mensajes, publish &
subscribe)
¡ Interesantes para integración de
sistemas.
Middlewares.
¡ Herramientas que proporcionan servicios para el
desarrollo de sistemas distribuidos.
l Ej, los ORBs CORBA
¡ Clasificación:
l Presencia explícita:
¡ El componente de negocio necesita realizar
invocaciones explícitas a la API del middleware.
¡ Difícil de desarrollar y mantener
¡ Ej: CORBA, TUXEDO, DCOM, RMI, RPCs, etc.
l Presencia implícita:
¡ La interacción con las APIs no la realiza el
componente de negocio desarrollado, sino que la
gestiona el middleware al que se le solicitan los
servicios de forma declarativa (configuración,
descriptores de servicios, etc.).
¡ Ej: EJBs, CCM, .NET, etc.
Middlewares implícitos
El EJB Object
El Objeto Home
¡ El cliente no puede instanciar directamente un
objeto remoto, dado que se encuentran en otra
máquina distinta.
¡ Debido al principio de transparencia, la ubicación
del cliente es independiente de la localización del
objeto remoto.
¡ Las instancias de EJBs se obtienen por medio de
factorías de objetos (Patrón de diseño Factory
[GOF94]).
¡ La factoría es la responsable de instanciar, buscar
y destruir los objetos.
¡ Él objeto home es la factoría para la obtención
de referencias a EJBs.
Descriptores de Despliegue
¡ Especifica las propiedades y servicios del EJB de
forma declarativa.
¡ Describe como ha de ser desplegado el EJB en el
contenedor, y como ha de ser manejado:
l Ciclo de vida
l Sistema de persistencia
l Control de transacciones
l Servicios de seguridad.
¡ Es un fichero XML: ejb-jar.xml
¡ Habrá uno por paquete de despliegue (fichero
jar) y puede declarar varios EJBs de distintos
tipos.
Empaquetado de EJBs
¡ Se realiza
en ficheros
JAR
¡ Uno o más
EJBs por
cada JAR
Pasos a seguir…
¡ Escribir las clases java necesarias:
l Interfaces local (opcional) y remota
l La clase del bean de negocio
l El interfaz home
¡ Escribir el descriptor de despliegue, y el
propio del contenedor en caso de que
fuera necesario.
¡ Compilar las clases java.
¡ Desplegar el JAR en el contendor.
¡ Desarrollar un programa cliente para
comprobar el funcionamiento.
Ejb-jar.xml
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD
Enterprise
JavaBeans 2.0//EN" " http://java.sun.com/dtd/ejb-
jar_2_0.dtd">
<ejb-jar>
<enterprise-beans>
<session>
<ejb-name>HolaMundo</ejb-name>
<home>HolaMundoHome</home>
<remote>HolaMundo</remote>
<local-home>HolaMundoLocalHome</local-
home>
<local>HolaMundoLocal</local>
<ejb-class>HolaMundoBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-
type>
</session>
</enterprise-beans>
</ejb-jar>
l Ejb-jar sobrecargado
l El mapeo O/R
l Referencias a recursos.
((POJO + anotaciones) +
EntityManager ) asociado a un
contexto de persistencia
@Stateless
@Remote
public class HolaMundoBean
{
public String saludo(String
mensaje) {
return "Hola “+mensaje;
}
}
Relaciones
¡ Unidireccionales o bidireccionales
¡ Cualquier combinación de
cardinalidad.
@ManyToOne
public Customer getCustomer() { return
cust; }
public setCustomer(Customer cust) {
this.cust = cust; }
¡ Inspirado en Hibernate
¡ El mapeo a las columnas de la tabla
se especifica así mismo mediante
anotaciones
¡ Eliminan es esquema abstracto de
datos.
EJBQL
¡ Las queries se definen mediante
@NamedQuery con name y queryString.
¡ Las queries se manejan por medio del
EntityManager:
@NamedQuery(
name="findAllCustomersWithName",
queryString="SELECT c FROM Customer c WHERE
c.name LIKE :custName"
)
.. ..
@Inject public EntityManager em;
customers =
em.createNamedQuery("findAllCustomersWithNa
me").setParameter("custName",
"Smith").listResults();
Seguridad y Transacciones