Download Introducción EJBs

Document related concepts
no text concepts found
Transcript
EJBs
Enterprise JavaBeans
Que son los EJBs?
¡
Enterprise JavaBeans (EJB) es una arquitectura de
componentes de servidor que simplifica el proceso de
construcción de aplicaciones de componentes
empresariales distribuidos en Java
l
l
¡
Con su utilización es posible escribir aplicaciones
escalables, fiables y seguras sin escribir código de
infraestructura
La existencia de infraestructura permite un desarrollo
más rápido de la parte servidora
Dado que son componentes, permiten desarrollar
aplicaciones portables entre distintas plataformas (son
Java) y servidores de aplicaciones (especificación
estándar).
PDF Creator - PDF4Free v2.0
http://www.pdf4free.com
1
Enterprise JavaBeans
¡
¡
¡
Un EJB es un componente software que se
ejecuta del lado del servidor en una aplicación
multicapa.
Los clientes del EJB acceden a él por medio de
una interfaz que esconde los detalles de
implementación del componente.
Esta interfaz debe cumplir la especificación
EJB.
l
La especificación fuerza la presencia de unos
determinados métodos que permitirán al
contenedor de EJBs manejar los componentes y su
ciclo de vida.
Categorías de EJBs
¡
3 tipos de Enterprise JavaBeans:
l
l
l
PDF Creator - PDF4Free v2.0
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
Session Beans: pensados para modelar
procesos de negocio que son accedidos de
manera síncrona
Message-driven Beans: pensados para
modelar procesos de negocio que son
accedidos de manera asíncrona,
permiten el uso de JMS desde EJBs
http://www.pdf4free.com
2
Entity EJBs
¡
Dos tipos:
l
l
¡
¡
BMP (Bean Managed Persistence)
¡ Se delega en el desarrollador las tareas de
persistir, buscar y recuperar las entidades.
CPM (Container Managed Persistence)
¡ La persistencia la gestiona el contenedor de
forma que el desarrollador no se preocupa de
las sentencias SQL de inserción, recuperación,
etc.
Un Entity EJB representa en cada
momento a una entidad en base de datos.
Muy académicos
Presentan problemas de rendimiento.
Session EJBs
¡
Dos tipos:
l
Stateful (Con estado)
¡
l
Stateless (Sin estado)
¡
PDF Creator - PDF4Free v2.0
El contenedor garantiza el mantenimiento
del estado del componente entre distintas
invocaciones (se serializan y deserializan)
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
http://www.pdf4free.com
3
Message Driven Beans
¡
¡
¡
¡
PDF Creator - PDF4Free v2.0
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.
http://www.pdf4free.com
4
EJBs como Objetos distribuidos
¡
Un objeto distribuido es un objeto
invocable desde un sistema remoto.
Middlewares.
¡
Herramientas que proporcionan servicios para el
desarrollo de sistemas distribuidos.
¡
Clasificación:
l
l
Ej, los ORBs CORBA
Presencia explícita:
¡
¡
¡
l
Presencia implícita:
¡
¡
PDF Creator - PDF4Free v2.0
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.
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.
http://www.pdf4free.com
5
Middlewares Explícitos
Middlewares implícitos
PDF Creator - PDF4Free v2.0
http://www.pdf4free.com
6
Estructura EJB
¡
Un EJB no es una sola clase, sino un
conjunto de clases, interfaces y recursos:
l
l
l
l
l
l
l
El bean de empresa o bean de negocio
(Enterprise Bean)
El EJB Object
Las interfaces Remotas.
El Objeto Home
Los interfaces Locales
Descriptores de Despliegue
Recursos específicos del servidor de
aplicaciones concreto que estemos empleando.
El Bean de Empresa o Negocio
¡
Se trata de implementación en sí del objeto
distribuido. Dependiendo del tipo de EJB, esto
será…
l
l
l
¡
La especificación determina que estas clases
deben cumplir una serie de interfaces.
l
l
PDF Creator - PDF4Free v2.0
Implementación de reglas de negocio en el caso de
EJBs de sesión.
Lógica de persistencia en el caso de los Entity EJBs.
Lógica de negocio orientadas a mensajes.
Javax.ejb.EnterpriseBean – Esta interfaz funciona
únicamente como marca para que el contenedor
sepa que realmente se trata de un EJB. Extiende
Serializable.
Cada tipo de EJB cuenta con un interfaz más
específico que extiende al de EnterpriseBean.
http://www.pdf4free.com
7
El EJB Object
¡
¡
¡
¡
Representa la capa de indirección que intercepta
las invocaciones remotas al EJB y gestiona los
servicios implícitos del contenedor de ejbs.
Objeto inteligente que implementa la lógica
intermedia que el contenedor de EJBs requiere
antes de que una invocación a método sea
servida por el bean de negocio.
Forman parte del contenedor de EJBs.
Se generan mediante las herramientas facilitadas
por cada contenedor de EJBs.
El EJB Object
PDF Creator - PDF4Free v2.0
http://www.pdf4free.com
8
Las interfaces Remotas
¡
¡
Son los contratos entre el cliente del EJB y el
bean de negocio.
Están sujetas a la especificación y deben cumplir
ciertas reglas.
l
¡
¡
Ej, Todas deben extender la interfaz
javax.ejb.EJBObject
En la interfaz remota se publican todos los
métodos del bean de negocio que se quieran
invocar remotamente.
La interfaz remota es implementada por el EJB
Object, el cual es generado automáticamente por
el contenedor de EJBs.
El Objeto Home
¡
¡
¡
¡
¡
PDF Creator - PDF4Free v2.0
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.
http://www.pdf4free.com
9
La interfaz Home
¡
¡
Los objetos home son propios y específicos de cada
fabricante de contenedores, son autogenerados y
forman parte del contenedor.
El desarrollador debe aportar una interfaz java que
extienda la interfaz javax.ejb.EJBHome
Las interfaces locales
¡
¡
¡
¡
¡
¡
¡
PDF Creator - PDF4Free v2.0
Añadidas en la versión 2.0 de la especificación EJB.
Solventan el problema de la sobrecarga cuando el EJB
se ejecuta en la propia máquina del cliente.
Permiten invocar al EJB como si se tratara de un objeto
local, tratando con un Objeto Local.
El Objeto Local realiza las tareas de middleware que le
corresponderían al EJB Object, y luego le cede el
control al bean de negocio.
De esta forman, se evitan las tareas propias a la
invocación remota (strubs, serialización, etc.).
Son opcionales
Extienden la interfaz javax.ejb.EJBLocalObject y su
factoría javax.ejb.EJBLocalHome.
http://www.pdf4free.com
10
Las interfaces locales
¡
Efectos laterales de su uso…
l
l
¡
Si queremos distribuir el objeto, es necesario
tocar el código fuente, puesto que manejamos
interfaces distintas.
Las interfaces locales, en pos del máximo
rendimiento, manejan paso de parámetros por
referencia en lugar de por valor. Esto implica un
cambio importante en la semántica del código y es
una fuente importante de errores.
En consecuencia es interesante emplear el patrón
business delegate y resolver el servicio por medio
de configuración externalizada (XML, BBDD, etc).
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
l
l
l
¡
¡
PDF Creator - PDF4Free v2.0
Ciclo de vida
Sistema de persistencia
Control de transacciones
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.
http://www.pdf4free.com
11
Recursos específicos del servidor
de aplicaciones
¡
¡
¡
¡
Ficheros propios del servidor
Fuera del estándar J2EE
Cada servidor describe y exige, por ejemplo, su
propio descriptor de despliegue (además del ejbjar.xml).
Normalmente, los servidores de aplicaciones
facilitan herramientas para realizar el despliegue
y confeccionar los descriptores.
Empaquetado de EJBs
¡
¡
Se realiza
en ficheros
JAR
Uno o más
EJBs por
cada JAR
PDF Creator - PDF4Free v2.0
http://www.pdf4free.com
12
Desarrollo EJBs
Hola Mundo!
Como se haría con EJB
2.0
Pasos a seguir…
¡
Escribir las clases java necesarias:
l
l
l
¡
¡
¡
¡
PDF Creator - PDF4Free v2.0
Interfaces local (opcional) y remota
La clase del bean de negocio
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.
http://www.pdf4free.com
13
Desarrollo de la interfaz remota….
¡
¡
La interfaz remota contiene todos los
métodos de negocio del bean
Consideraciones
l
l
¡
Extiende javax.ejb.EJBObject
Los métodos de negocio que publiquemos en la
interfaz remota deben lanzar la excepción
java.rmi.RemoteException.
Pasos:
l
l
Creamos en un directorio vacío el fichero
HolaMundo.java a mano, con el notepad.
Publicamos el método saludo que recibe un
String (nombre) y retorna otro String.
Desarrollo de la interfaz remota…
PDF Creator - PDF4Free v2.0
http://www.pdf4free.com
14
Desarrollo de la interfaz local….
¡
¡
La interfaz local también contiene los
métodos de negocio del bean
Consideraciones
l
l
¡
Extiende javax.ejb.EJBLocalObject
Los métodos de negocio que publiquemos en la
interfaz local no tienen porqué lanzar la
excepción java.rmi.RemoteException.
Pasos:
l
l
Creamos en un directorio vacío el fichero
HolaMundoLocal.java.
Publicamos el método saludo que recibe un
String (nombre) y retorna otro String.
Desarrollo de la interfaz local…
PDF Creator - PDF4Free v2.0
http://www.pdf4free.com
15
Desarrollo del interfaz Home…
¡
¡
¡
¡
El interfaz home describe la factoría de EJBs.
Tiene métodos para crear y destruir objetos EJB
La implementación de la interfaz es el objeto
home, y será generada por las herramientas del
contenedor.
Consideraciones:
l
l
l
¡
El método create es el método que los clientes
deben emplear para obtener una referencia al EJB.
Se emplea para inicializar el bean.
Lanza java.rmi.RemoteException y
java.ejb.CreateException.
Extiende javax.ejb.EJBHome
Pasos:
l
l
Crear el fichero HolaMundoHome.java para la
interfaz que extienda javax.ejb.EJBHome
Publicar el método HolaMundo create() que lance
ambas excepciones.
Desarrollo del interfaz Home…
PDF Creator - PDF4Free v2.0
http://www.pdf4free.com
16
Desarrollo del interfaz Home Local
¡
Las diferencias con el interfaz Home son,
l
l
¡
La interfaz local extiende EJBLocalHome en
lugar de EJBHome.
El método create ya no tiene porqué lanzar
una RemoteException.
El objeto devuelto por el método create
será del tipo HolaMundoLocal, es decir,
un objeto no remoto que cumple la
interfaz Local que acabamos de definir.
Desarrollo del interfaz Home Local
PDF Creator - PDF4Free v2.0
http://www.pdf4free.com
17
Desarrollo del bean de negocio
¡
¡
¡
Creamos el fichero HolaMundoBean.java
La clase debe implementar javax.ejb.SessionBean
Métodos obligatorios:
l
l
l
l
l
l
¡
public void ejbActivate() {}
public void ejbPassivate() {}
public void setSessionContext(javax.ejb.SessionContext
context){}
public void unsetSessionContext() {}
public void ejbRemove() {}
public void ejbCreate() {} que lanza una
javax.ejb.CreateException
Y el método de negocio…
l
public String saludo (String mensaje) {return “Hola
mundo “+mensaje;}
Desarrollo del bean de negocio
PDF Creator - PDF4Free v2.0
http://www.pdf4free.com
18
El contexto de los EJBs
¡
¡
¡
El contenedor nos facilita
el contexto invocando el
método
setSessionContext( … );
Es la vía de comunicación
entre los EJBs y el
contenedor
A través del contexto
podemos recuperar
información del
contenedor de EJBs (ej,
credenciales de
seguridad), modificar su
status, manejar
transacciones, etc.
Bean
Contexto
Session
Bean
SessionCont
ext
EntityBean
EntityContex
t
Message
Driven
Beans
MessageDriv
enContext
El contexto de los EJBs
PDF Creator - PDF4Free v2.0
http://www.pdf4free.com
19
Generar el descriptor de
despliegue ejb-jar.xml
¡
¡
¡
¡
¡
Describe el despliegue que el contenedor ha de hacer
con los EJBs del jar.
Uno por cada fichero jar.
Lo metemos en el directorio META-INF.
Permiten especificar atributos de los beans de forma
declarativa en lugar de por programa.
Deberemos declarar para nuestro bean:
l
l
l
l
l
l
l
l
ejb-name: es el nick del ejb.
home: nombre cualificado completo de la interfaz Home
del bean.
remote: nombre cualificado completo de la interfaz
remota.
local-home: nombre cualificado completo de la interfaz
Home local.
local: nombre cualificado completo de la interfaz local
ejb-class : nombre cualificado completo del bean de
negocio
session-type: Statefull/Stateless
transaction-type: Container
Ejb-jar.xml
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD
Enterprise
JavaBeans 2.0//EN" " http://java.sun.com/dtd/ejbjar_2_0.dtd">
<ejb-jar>
<enterprise-beans>
<session>
<ejb-name>HolaMundo</ejb-name>
<home>HolaMundoHome</home>
<remote>HolaMundo</remote>
<local-home>HolaMundoLocalHome</localhome>
<local>HolaMundoLocal</local>
<ejb-class>HolaMundoBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transactiontype>
</session>
</enterprise-beans>
</ejb-jar>
PDF Creator - PDF4Free v2.0
http://www.pdf4free.com
20
Descriptor de despliegue de jboss.
Jboss.xml
¡
También en el directorio META-INF.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 3.0//EN"
"http://www.jboss.org/j2ee/dtd/jboss_3_0.dtd">
<jboss>
<enterprise-beans>
<session>
<ejb-name>HolaMundo</ejb-name>
<jndi-name>HolaMundo</jndi-name>
</session>
</enterprise-beans>
<resource-managers>
</resource-managers>
</jboss>
Construcción del JAR
¡
¡
¡
¡
¡
¡
¡
PDF Creator - PDF4Free v2.0
Compilamos las clases java.
Invocamos
jar cf HolaMundo.jar *
El * indica que clases queremos meter dentro del
JAR.
Arrancamos jboss ejecutando run en el directorio
bin
Copiamos el jar al directorio deploy/default
Comprobamos en la ventana de comandos de
JBOSS el despliegue de HolaMundo.jar
Comprobamos en la consola jmx que el EJB está
publicado.
http://www.pdf4free.com
21
Invocación de EJBs
¡
Hay dos posibles tipos de clientes para
invocar a un EJB:
l
l
Clientes Java RMI-IIOP.
¡ Se sirven de JNDI para localizar a través de la
red los objetos que requieren, y de la JTA
(Java Transaction API) para el control de las
transacciones.
Cliente CORBA
¡ Los clientes pueden ser aplicaciones CORBA
estándar.
¡ Esto permite la invocación de un EJB desde
otro lenguaje distinto como C++.
¡ Emplean COS Naming (Servicio de nombrado
de CORBA) para localizar objetos, y CORBA
OTS para el control del transacciones.
Pasos del cliente…
¡
1.
2.
3.
4.
PDF Creator - PDF4Free v2.0
Para invocar a un EJBs, tanto en clientes
CORBA como RMI-IIOP:
Localizar el objeto Home o factoría
Emplear el objeto Home para obtener
una referencia remota al EJB
Invocar los métodos del negocio del EJB
Liberar el EJB
http://www.pdf4free.com
22
Invocación del EJB. Localización
del Home
El cliente no tiene porqué conocer la
localización del objeto Home
¡ Lo localiza por medio de un servicio de
nombrado o servicio de directorio al que
accede por medio de JNDI
¡ Esto aumenta la portabilidad del cliente …
… aunque siempre tendremos que saber la
localización del árbol JNDI.
¡
Invocación del EJB
PDF Creator - PDF4Free v2.0
http://www.pdf4free.com
23
Invocación del EJB
¡
Inicializamos el contexto inicial…
Hashtable props = new Hashtable();
props.put(InitialContext.INITIAL_CONTEXT_FACTORY
,"org.jnp.interfaces.NamingContextFactory");
props.put(InitialContext.PROVIDER_URL,
"jnp://127.0.0.1:1099");
InitialContext initialContext = new
InitialContext(props);
¡
Y localizamos el objeto home…
HolaMundoHome home =
(HolaMundoHome) initialContext.lookup(
"HolaMundo" );
Invocación del EJB
¡
Ya podemos crear el EJB a partir de la
factoría e invocar su método de negocio.
//Obtenemos la referencia al EJB de la factoría...
HolaMundo holaMundo = home.create();
//Ya podemos invocar el método de negocio...
System.out.println( holaMundo.saludo("Homer
Simpson"));
PDF Creator - PDF4Free v2.0
http://www.pdf4free.com
24
Y la invocación a través de la
interfaz Local?
¡
Si estamos en la misma máquina …
… porqué no funciona?
La interfaz local sólo puede ser empleada
para acceder a un EJB si el cliente se
encuentra en la misma máquina virtual
(JVM) que el EJB, no en la misma
máquina física.
Por ejemplo, un EJB puede invocar a otro
EJB del mismo contenedor por medio de
su interfaz local.
Ahora ... EJB 3.0
¡
¡
¡
PDF Creator - PDF4Free v2.0
Objetivos de J2EE: Desarrollo rápido y productivo
de componentes de negocio
EJBs 2.x:
l Demasiado complicados de desarrollar
l Ejb-jar sobrecargado
EJB 3.0: Incorpora o se aprovecha de dos nuevos
modelos:
l Metadatos de Java (incorporados en la versión
1.5)
l Modelo de persistencia Hibernate.
http://www.pdf4free.com
25
Anotaciones EJB
¡
¡
¡
¡
En EJB 3.0 se reducen considerablemente las
tareas que el desarrollador del bean debe realizar
EJB 3.0 todos los beans son POJOs con
anotaciones EJB.
Mediante anotaciones:
l Se define el interfaz del bean
l El mapeo O/R
l Referencias a recursos.
l Cualquier cosa que antes poníamos en los
descriptores.
El descriptor desaparece, junto con las interfaces
home.
Nuevo sistema de persistencia
((POJO + anotaciones) +
EntityManager ) asociado a un
contexto de persistencia
¡
Relaciones en los entity beans:
l
PDF Creator - PDF4Free v2.0
Especificadas también mediante
anotaciones.
http://www.pdf4free.com
26
Stateless Session Beans
import javax.ejb.*;
@Stateless
@Remote
public class HolaMundoBean
{
public String saludo(String
mensaje) {
return "Hola “+mensaje;
}
}
Message Driven Beans
¡
Es el único que está obligado a
cumplir una interfaz concreta:
¡
¡
PDF Creator - PDF4Free v2.0
javax.jms.MessageListener
No implican cambios significativos
http://www.pdf4free.com
27
Entity Beans
¡
¡
Se declaran mediante @Entity.
Todas los atributos son persistentes salvo
los marcados como @Transient.
@Entity public class Order {
private Long id;
private int version;
@Id(generate=AUTO)
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
@Version
protected int getVersion() { return version; }
protected void setVersion(int version) {
this.version = version;
…
Relaciones
¡
¡
Unidireccionales o bidireccionales
Cualquier combinación de
cardinalidad.
@ManyToOne
public Customer getCustomer() { return
cust; }
public setCustomer(Customer cust) {
this.cust = cust; }
PDF Creator - PDF4Free v2.0
http://www.pdf4free.com
28
Mapeo O/R
¡
¡
¡
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();
PDF Creator - PDF4Free v2.0
http://www.pdf4free.com
29
EJBQL
¡
Ampliaciones:
l
l
l
l
l
Inner & outer joins.
Creación de clases como resultado de
consultas.
SELECT new CustomerDetails(c.id,
c.status, o.count)
FROM Customer c JOIN c.orders o
WHERE o.count > 100
GROUP BY & HAVING
Consultas anidadas en la cláusula WHERE…
Seguridad y Transacciones
¡
También mediante atributos:
l
l
¡
@TransactionAttribute
@MethodPermissions.
Excepciones:
l
Se eliminan las excepciones impuestas
hasta ahora por la especificación;:
¡
¡
PDF Creator - PDF4Free v2.0
CreateException
FinderException
http://www.pdf4free.com
30
Despliegue EJB 3.0
PDF Creator - PDF4Free v2.0
http://www.pdf4free.com
31