Está en la página 1de 27

Enterprise Java Beans

EJBs
Beans gestionados por un contenedor del
servidor de aplicaciones para gestionar el
acceso a recursos (bases de datos, colas
de mensajes, ficheros, etc) y proporcionar
servicios (seguridad, transacciones,
mensajera, nombres) de forma
sistemtica y optimizada
La utilizacin de EJB simplifica el
desarrollo de aplicaciones web y permite
construir aplicaciones escalables

Tipos de EJBs
Las EJBs pueden ser de sesin o dirigidas
por mensajes.
Las EJBs de sesin ejecutan mtodos de
forma sncrona, pudiendo devolver valores
Las EJBs dirigidas a mensajes aaden un
mensaje a una cola indicando tareas
pendientes de ejecutar, que se llevan a cabo
de forma asncrona
Tipos de EJBs, II
Las EJBs de sesin pueden ser con
estado, sin estado o nicas (singleton)
Las EJBs con estado las utiliza un nico
cliente para ejecutar sus mtodos y
mantienen sus atributos entre llamadas
Las EJBs sin estado pueden ser utilizadas
consecutivamente por clientes arbitrarios
cada vez que ejecutan un mtodo. Pueden
mantener sus atributos entre llamadas
Las EJBs nicas tienen una sola instancia
para toda la aplicacin
Especificacin de EJBs
Las EJBs se pueden inyectar en otros
objetos gestionados por el servidor, como
los servlets, utilizando la anotacin @EJB
El objeto en el que se inyecta la EJB se
llama cliente
Las EJBs pueden ejecutarse en el mdulo
del cliente o en mdulos especficos, que
pueden incluso estar en ordenadores
diferentes del del cliente
Ejemplo de anotacin de
inyeccin en un servlet
public class MiServ extends HttpServlet {
@EJB
private MiEJB miEJBRef;
protected void doGet() {

miEJBRef.miMetodo();
}
}
Especificacin de EJBs
Las EJBs sin estado se definen mediante
la anotacin @Stateless en su clase
Las EJBs con estado se definen mediante
la anotacin @Stateful en su clase
Las EJBs nicas se definen mediante la
anotacin @Singleton en su clase
Ejemplo de EJB de sesin
sin estado
package myPack;
Import javax.ejb.Stateless;
@Stateless
public class MyEJB implements
MyEJBLocal {
public String myMethod(String myName) {
return Hello + myName; }
}
Contextos y EJBs
Las EJBs nicas corresponden al contexto
de aplicacin, pues hay garantas de que
hay una sola por cada aplicacin y el
contenedor correspondiente la inyecta en
su momento dentro del ciclo de vida del
objeto gestionado que lo solicita
Solamente se deben utilizar si se van a
utilizar para ejecutar mtodos, pues en
caso contrario son innecesariamente
ineficientes
Contextos y EJBs
Clientes dentro de diferentes sesiones de
una aplicacin web pueden acceder a la
misma EJB de sesin no nicas, por lo
que estas EJBs no corresponden al
contexto de sesin
Diferentes componentes web pueden
acceder a diferentes EJBs de sesin no
nicas de la misma clase al ejecutar la
misma instruccin, por lo que las EJBs no
corresponden al contexto de aplicacin
Contextos y EJBs, II
Lo anterior es cierto tambin para las
componentes dirigidas por mensajes
Como consecuencia de lo anterior, las
EJBs de sesin nunca corresponden a
una sesin de la aplicacin
Reutilizacin y escalabilidad de
EJBs
Los mdulos que forman las aplicaciones
Java EE, que dan lugar a ficheros jar que
se incluyen en el fichero ear de las
aplicaciones correspondientes, permiten la
reutilizacin de cdigo
Las aplicaciones web pueden incluir
mdulos especficos EJB, en cuyo caso se
llaman aplicaciones Enterprise
Estructura de una
aplicacin Enterprise
Reutilizacin y escalabilidad de
EJBs, II
Cuando una aplicacin Enterprise utiliza
un mdulo EJB, el mdulo Web de la
aplicacin incluye una interfaz
implementada por las clases de las EJBs
que utiliza.
La interfaz utilizada por los objetos de un
mdulo que acceden a EJBs que estn en
otro mdulo se llama interfaz de negocios,
y lleva una anotacin especial
Reutilizacin y escalabilidad de
EJBs, III
Una aplicacin puede acceder a un mdulo
EJB que est en otra mquina java
(normalmente, en otro servidor)
La interfaz utilizada por los objetos de un
mdulo que acceden a EJBs que estn en
la misma mquina Java se llama interfaz
local y se define con la anotacin @local
EJB: Clientes remotos
En el caso de EJBs que estn en la
mquinas Java diferentes se utiliza la
anotacin @Remote
Las llamadas a mtodos de EJBs remotas
pasan los atributos por copia en lugar de
por valor, y los valores devueltos tambin
se copian
Caractersticas recientes de
Java EE
La utilizacin de EJBs sin definir
explcitamente una interfaz ha sido
incorporada recientemente a Java EE
(especificacin Java Beans 3.1, dentro de
Java EE 6)
La utilizacin de anotaciones ha sido
incorporada recientemente a Java (Java
SE 5) y a Java EE (Java EE 5)
Utilizacin de EJBs
sin anotaciones
Java EE permite inyectar elementos mediante
un servicio de bsqueda basado en nombres
(JNDI, Java Naming and Directory Interface).
En lugar de
@EJB private MiEJB miEJBRef;
se utiliza
Context ctx = new InitialContext();
MiEJB miEJBRef =
(MiEJB) ctx.lookup("java:global/env/audit");
Utilizacin de EJBs
sin anotaciones, II
Cuando se utiliza JNDI para acceder a
EJBs (u otros objetos inyectables) hay que
especificar la creacin de los objetos en
un fichero XML de configuracin, llamado
ejb-jar.xml.
Utilizacin de EJBs
sin anotaciones, III
<?xml version="1.0"?> <!DOCTYPE ejb-jar .dtd">
<ejb-jar> <enterprise-beans> <session>
<display-name>Bean HolaMundo</display-name>
<ejb-name>HolaMundo</ejb-name>
<home>com.saludo.HolaMundoHome</home>
<remote>com.saludo.HolaMundoRemote</remote>
<ejb-class>com.saludo.HolaMundoBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Bean</transaction-type>
</session> </enterprise-beans> </ejb-jar>
Transacciones en Java EE
Java EE permite definir transacciones de
SQL, segn se describieron al estudiar la
API de Persistencia, o de software.
Una transaccin de software corresponde
a la ejecucin de un mtodo de una EJB.
Si se lanza una excepcin durante una
transaccin de software, se ejecutan
acciones de recuperacin del error.
Transacciones en JEE, II
Por defecto cualquier mtodo de cualquier
EJB comienza una transaccin si no hay
una comenzada.
Por defecto las transacciones terminan con
xito cuando se termina de ejecutar el
mtodo que las comienza sin excepciones.
Al terminar con xito una transaccin los
EntityManagers involucrados llaman al
mtodo flush() y ejecutan un COMMIT.
Transacciones en JEE, III
Las transacciones se terminan deshacien-
do los cambios realizados desde su
comienzo si se lanza una excepcin antes
de su terminacin natural.
Cuando se termina una transaccin
debido a una excepcin los EntityManager
involucrados ejecutan un ROLLBACK en
el SGBD.
Transacciones en JEE, IV
Cuando se termina cualquier transaccin
todas las entidades persistentes
involucradas pasan al estado Detached (el
EntityManager correspondiente ejecuta el
mtodo close sobre ellas).
La excepcin
IncompleteConversationalState, si se
recoge, no termina la transaccin que se
est ejecutando.
Transacciones en JEE, V
JEE permite la definicin programtica de
transacciones mediante la clase
inyectable UserTransaction, que tiene
mtodos begin(), commit() y rollback().

Ciclo de vida de entidades
Ejercicio voluntario [EJBPERS]
Aplicacin web que ampla la del ejercicio
[DBPERS1] del captulo de Persistencia
utilizando transacciones