Enterprise Java Beans

27
Enterprise Java Beans

description

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

Transcript of Enterprise Java Beans

Page 1: Enterprise Java Beans

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 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

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

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

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

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

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

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

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

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

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

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

Estructura de unaaplicación Enterprise

Page 14: Enterprise Java Beans

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

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

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

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

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 utilizaContext ctx = new InitialContext();MiEJB miEJBRef = (MiEJB) ctx.lookup("java:global/env/audit");

Page 19: Enterprise Java Beans

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

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

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

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

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

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

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

Ciclo de vida de entidades

Page 27: Enterprise Java Beans

Ejercicio voluntario [EJBPERS]

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