Enterprise Java Beans. EJBs Beans gestionados por un contenedor del servidor de aplicaciones para...

27
Enterprise Java Beans

Transcript of Enterprise Java Beans. EJBs Beans gestionados por un contenedor del servidor de aplicaciones para...

Page 1: Enterprise Java Beans. EJBs Beans gestionados por un contenedor del servidor de aplicaciones para gestionar el acceso a recursos (bases de datos, colas.

Enterprise Java Beans

Page 2: Enterprise Java Beans. EJBs Beans gestionados por un contenedor del servidor de aplicaciones para gestionar el acceso a recursos (bases de datos, colas.

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, mensajería, nombres) de forma sistemática y optimizada

• La utilización de EJB simplifica el desarrollo de aplicaciones web y permite construir aplicaciones escalables

Page 3: Enterprise Java Beans. EJBs Beans gestionados por un contenedor del servidor de aplicaciones para gestionar el acceso a recursos (bases de datos, colas.

Tipos de EJBs

• Las EJBs pueden ser de sesión o dirigidas por mensajes.– Las EJBs de sesión ejecutan métodos de

forma síncrona, pudiendo devolver valores– Las EJBs dirigidas a mensajes añaden un

mensaje a una cola indicando tareas pendientes de ejecutar, que se llevan a cabo de forma asíncrona

Page 4: Enterprise Java Beans. EJBs Beans gestionados por un contenedor del servidor de aplicaciones para gestionar el acceso a recursos (bases de datos, colas.

Tipos de EJBs, II• Las EJBs de sesión pueden ser con estado,

sin estado o únicas (singleton)– Las EJBs con estado las utiliza un único cliente

para ejecutar sus métodos y mantienen sus atributos entre llamadas

– Las EJBs sin estado pueden ser utilizadas consecutivamente por clientes arbitrarios cada vez que ejecutan un método. Pueden mantener sus atributos entre llamadas

– Las EJBs únicas tienen una sola instancia para toda la aplicación

Page 5: Enterprise Java Beans. EJBs Beans gestionados por un contenedor del servidor de aplicaciones para gestionar el acceso a recursos (bases de datos, colas.

Especificación de EJBs

• Las EJBs se pueden inyectar en otros objetos gestionados por el servidor, como los servlets, utilizando la anotación @EJB

• El objeto en el que se inyecta la EJB se llama cliente

• Las EJBs pueden ejecutarse en el módulo del cliente o en módulos específicos, que pueden incluso estar en ordenadores diferentes del del cliente

Page 6: Enterprise Java Beans. EJBs Beans gestionados por un contenedor del servidor de aplicaciones para gestionar el acceso a recursos (bases de datos, colas.

Ejemplo de anotación de inyección en un servlet

public class MiServ extends HttpServlet {@EJBprivate MiEJB miEJBRef;protected void doGet(…) {

…miEJBRef.miMetodo();… }

}

Page 7: Enterprise Java Beans. EJBs Beans gestionados por un contenedor del servidor de aplicaciones para gestionar el acceso a recursos (bases de datos, colas.

Especificación de EJBs

• Las EJBs sin estado se definen mediante la anotación @Stateless en su clase

• Las EJBs con estado se definen mediante la anotación @Stateful en su clase

• Las EJBs únicas se definen mediante la anotación @Singleton en su clase

Page 8: Enterprise Java Beans. EJBs Beans gestionados por un contenedor del servidor de aplicaciones para gestionar el acceso a recursos (bases de datos, colas.

Ejemplo de EJB de sesiónsin estado

package myPack;Import javax.ejb.Stateless;@Statelesspublic class MyEJB implements MyEJBLocal {public String myMethod(String myName) {

return “Hello “ + myName; }}

Page 9: Enterprise Java Beans. EJBs Beans gestionados por un contenedor del servidor de aplicaciones para gestionar el acceso a recursos (bases de datos, colas.

Contextos y EJBs

• Las EJBs únicas corresponden al contexto de aplicación, pues hay garantías de que hay una sola por cada aplicación 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 métodos, pues en caso contrario son innecesariamente ineficientes

Page 10: Enterprise Java Beans. EJBs Beans gestionados por un contenedor del servidor de aplicaciones para gestionar el acceso a recursos (bases de datos, colas.

Contextos y EJBs

• Clientes dentro de diferentes sesiones de una aplicación web pueden acceder a la misma EJB de sesión no únicas, por lo que estas EJBs no corresponden al contexto de sesión

• Diferentes componentes web pueden acceder a diferentes EJBs de sesión no únicas de la misma clase al ejecutar la misma instrucción, por lo que las EJBs no corresponden al contexto de aplicación

Page 11: Enterprise Java Beans. EJBs Beans gestionados por un contenedor del servidor de aplicaciones para gestionar el acceso a recursos (bases de datos, colas.

Contextos y EJBs, II

• Lo anterior es cierto también para las componentes dirigidas por mensajes

• Como consecuencia de lo anterior, las EJBs de sesión nunca corresponden a una sesión de la aplicación

Page 12: Enterprise Java Beans. EJBs Beans gestionados por un contenedor del servidor de aplicaciones para gestionar el acceso a recursos (bases de datos, colas.

Reutilización y escalabilidad de EJBs

• Los módulos 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 reutilización de código

• Las aplicaciones web pueden incluir módulos específicos EJB, en cuyo caso se llaman aplicaciones Enterprise

Page 13: Enterprise Java Beans. EJBs Beans gestionados por un contenedor del servidor de aplicaciones para gestionar el acceso a recursos (bases de datos, colas.

Estructura de unaaplicación Enterprise

Page 14: Enterprise Java Beans. EJBs Beans gestionados por un contenedor del servidor de aplicaciones para gestionar el acceso a recursos (bases de datos, colas.

Reutilización y escalabilidad de EJBs, II

• Cuando una aplicación Enterprise utiliza un módulo EJB, el módulo Web de la aplicación incluye una interfaz implementada por las clases de las EJBs que utiliza.

• La interfaz utilizada por los objetos de un módulo que acceden a EJBs que están en otro módulo se llama interfaz de negocios, y lleva una anotación especial

Page 15: Enterprise Java Beans. EJBs Beans gestionados por un contenedor del servidor de aplicaciones para gestionar el acceso a recursos (bases de datos, colas.

Reutilización y escalabilidad de EJBs, III

• Una aplicación puede acceder a un módulo EJB que está en otra máquina java (normalmente, en otro servidor)

• La interfaz utilizada por los objetos de un módulo que acceden a EJBs que están en la misma máquina Java se llama interfaz local y se define con la anotación @local

Page 16: Enterprise Java Beans. EJBs Beans gestionados por un contenedor del servidor de aplicaciones para gestionar el acceso a recursos (bases de datos, colas.

EJB: Clientes remotos

• En el caso de EJBs que están en la máquinas Java diferentes se utiliza la anotación @Remote

• Las llamadas a métodos de EJBs remotas pasan los atributos por copia en lugar de por valor, y los valores devueltos también se copian

Page 17: Enterprise Java Beans. EJBs Beans gestionados por un contenedor del servidor de aplicaciones para gestionar el acceso a recursos (bases de datos, colas.

Características recientes de Java EE

• La utilización de EJBs sin definir explícitamente una interfaz ha sido incorporada recientemente a Java EE (especificación Java Beans 3.1, dentro de Java EE 6)

• La utilización de anotaciones ha sido incorporada recientemente a Java (Java SE 5) y a Java EE (Java EE 5)

Page 18: Enterprise Java Beans. EJBs Beans gestionados por un contenedor del servidor de aplicaciones para gestionar el acceso a recursos (bases de datos, colas.

Utilización de EJBssin anotaciones

• Java EE permite inyectar elementos mediante un servicio de búsqueda 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");

Page 19: Enterprise Java Beans. EJBs Beans gestionados por un contenedor del servidor de aplicaciones para gestionar el acceso a recursos (bases de datos, colas.

Utilización de EJBssin anotaciones, II

• Cuando se utiliza JNDI para acceder a EJBs (u otros objetos inyectables) hay que especificar la creación de los objetos en un fichero XML de configuración, llamado ejb-jar.xml.

Page 20: Enterprise Java Beans. EJBs Beans gestionados por un contenedor del servidor de aplicaciones para gestionar el acceso a recursos (bases de datos, colas.

Utilización de EJBssin 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>

Page 21: Enterprise Java Beans. EJBs Beans gestionados por un contenedor del servidor de aplicaciones para gestionar el acceso a recursos (bases de datos, colas.

Transacciones en Java EE

• Java EE permite definir transacciones de SQL, según se describieron al estudiar la API de Persistencia, o de software.

• Una transacción de software corresponde a la ejecución de un método de una EJB.

• Si se lanza una excepción durante una transacción de software, se ejecutan acciones de recuperación del error.

Page 22: Enterprise Java Beans. EJBs Beans gestionados por un contenedor del servidor de aplicaciones para gestionar el acceso a recursos (bases de datos, colas.

Transacciones en JEE, II

• Por defecto cualquier método de cualquier EJB comienza una transacción si no hay una comenzada.

• Por defecto las transacciones terminan con éxito cuando se termina de ejecutar el método que las comienza sin excepciones.

• Al terminar con éxito una transacción los EntityManagers involucrados llaman al método flush() y ejecutan un COMMIT.

Page 23: Enterprise Java Beans. EJBs Beans gestionados por un contenedor del servidor de aplicaciones para gestionar el acceso a recursos (bases de datos, colas.

Transacciones en JEE, III

• Las transacciones se terminan deshacien-do los cambios realizados desde su comienzo si se lanza una excepción antes de su terminación natural.

• Cuando se termina una transacción debido a una excepción los EntityManager involucrados ejecutan un ROLLBACK en el SGBD.

Page 24: Enterprise Java Beans. EJBs Beans gestionados por un contenedor del servidor de aplicaciones para gestionar el acceso a recursos (bases de datos, colas.

Transacciones en JEE, IV

• Cuando se termina cualquier transacción todas las entidades persistentes involucradas pasan al estado Detached (el EntityManager correspondiente ejecuta el método close sobre ellas).

• La excepción IncompleteConversationalState, si se recoge, no termina la transacción que se está ejecutando.

Page 25: Enterprise Java Beans. EJBs Beans gestionados por un contenedor del servidor de aplicaciones para gestionar el acceso a recursos (bases de datos, colas.

Transacciones en JEE, V

• JEE permite la definición programática de transacciones mediante la clase inyectable UserTransaction, que tiene métodos begin(), commit() y rollback().

Page 26: Enterprise Java Beans. EJBs Beans gestionados por un contenedor del servidor de aplicaciones para gestionar el acceso a recursos (bases de datos, colas.

Ciclo de vida de entidades

Page 27: Enterprise Java Beans. EJBs Beans gestionados por un contenedor del servidor de aplicaciones para gestionar el acceso a recursos (bases de datos, colas.

Ejercicio voluntario [EJBPERS]

• Aplicación web que amplía la del ejercicio [DBPERS1] del capítulo de Persistencia utilizando transacciones