Agenda
DEPARTAMENTO DE SISTEMAS
Introduccin EJB 3
o o o
Caractersticas Beneficios Arquitectura EJB 3 Stateless Session Bean Stateful Session Bean Localizacin Session Bean
Session Bean
o o o
Introduccin
DEPARTAMENTO DE SISTEMAS
Introduccin
DEPARTAMENTO DE SISTEMAS
Soporta concurrencia Provee pools para administrar varias instancias de componentes, Balanceo de carga y clustering Provee (JNDI), para acceder a los EJB o a otros recursos Soporta Java RMI-IIOP (Remote Method Invocation run over Internet Inter-Orb Protocol), el cual permite el acceso remoto de un cliente a un session bean Soporta mensajera que proveen los message-driven beans
Agenda
DEPARTAMENTO DE SISTEMAS
Introduccin EJB 3
o o o
Caractersticas Beneficios Arquitectura EJB 3 Stateless Session Bean Stateful Session Bean Localizacin Session Bean
Session Bean
o o o
EJB
DEPARTAMENTO DE SISTEMAS
Enterprise JavaBeans is an architecture for componentbased transaction-oriented enterprise applications. (JSR 220: Enterprise JavaBeansTM,Version 3.0) Un enterprise bean es un componente de lado del servidor que encapsula la lgica del negocio de una aplicacin.(Java EE 5Tutorial) Es una plataforma para construir aplicaciones de negocios portables, reutilizables y escalables usando lenguaje de programacin JAVA (EJB 3 In action, Debu Panda)
Caractersticas
DEPARTAMENTO DE SISTEMAS
Contienen lgica de negocio, que opera sobre los datos de la empresa. Las instancias de un enterprise bean son administradas en tiempo de ejecucin por un contenedor. Los servicios como transaccin y seguridad, pueden ser especificados junto con la lgica del negocio de la clase enterprise bean en la forma de anotaciones, o en un descriptor de despliegue XML. El acceso del cliente es mediado por el contenedor en el cual el enterprise bean es desplegado. Este acceso es transparente para el cliente. El contenedor asegura que los beans y sus clientes pueden ser desplegados en mltiples ambientes de ejecucin sin re-compilacin. El estndar EJB 3 es desarrollado por Java Community Process(JCP).
Beneficios
DEPARTAMENTO DE SISTEMAS
Simplifican desarrollo, el contenedor EJB es responsable de la administracin de transacciones y autorizaciones de seguridad. La lgica del negocio reside en los enterprise beans y no en el lado del cliente, permitiendo que el desarrollo del lado del cliente est desacoplado de la lgica del negocio. Los enterprise bean son componentes portables, reutilizables y pueden ser desplegados en servidores que usen los estndares del API JEE. Pueden residir en diferentes servidores y pueden ser invocados por un cliente remoto.
Beneficios
DEPARTAMENTO DE SISTEMAS
Aplicaciones que deben ser escalables, esto implica distribucin de componentes a travs de mltiples mquinas. Aseguramiento de integridad de los datos de las transacciones. Los enterprise beans soportan transacciones y el mecanismo que administra el acceso concurrente de objetos compartidos. Muti-usuarios locales y remotos.
Arquitectura EJB 3
DEPARTAMENTO DE SISTEMAS
Ofrece estndares para aplicaciones de negocios basadas en componentes, orientadas a objetos y distribuidas.
DEPARTAMENTO DE SISTEMAS
Una aplicacin EJB debe contener: o Componentes enterprise bean o Interfaces las cuales definen los mtodos que implementan las componentes enterprise bean o Clases helper: clases utilitarias requeridas por los enterprise bean Se empaqueta en un archivo EJB.jar, son portables y pueden ser empaquetados en un archivo EAR.
Agenda
DEPARTAMENTO DE SISTEMAS
Introduccin EJB 3
o o o
Caractersticas Beneficios Arquitectura EJB 3 Stateless Session Bean Stateful Session Bean Localizacin Session Bean
Session Bean
o o o
Session Bean
DEPARTAMENTO DE SISTEMAS
Cliente
Web, local o remoto
Contenedor EJB 3
Interfaz
Provee todas las definiciones de los mtodos
Clase Bean
Provee implementaciones de los mtodos
Implementa
Local Remota
Session Bean
DEPARTAMENTO DE SISTEMAS
Caractersticas:
o o o o o
Vida corta, si el servidor falla la sesin se pierde No manejan persistencia No es compartido entre clientes Pueden actualizar y crear entidades, estas ltimas son persistentes Un cliente (WEB como JSP o servlet y un cliente aplicacin standalone) interacta con un session bean a travs de la invocacin de sus mtodos (esta invocacin se llama sesin) Un componente session bean es un POJO anotado.
Session Bean
DEPARTAMENTO DE SISTEMAS
Un session bean est compuesto por una o ms interfaces y una clase de implementacin. Un cliente puede acceder a un session bean solamente a travs de mtodos definidos en la interfaz del bean. La interfaz de define la vista al cliente de un bean. Un Session Bean puede ser invocado a travs de RMI a travs de una interfaz:
o o
Remota Local
Session Bean
DEPARTAMENTO DE SISTEMAS
Session Bean
DEPARTAMENTO DE SISTEMAS
El cliente remoto puede ejecutarse en una mquina diferente y una JVM diferente al enterprise bean que accede. Un cliente remoto puede ser un componente web, una aplicacin cliente u otro enterprise bean. Para el cliente remoto la ubicacin del enterprise bean es transparente La interfaz remota define el ciclo de vida de los mtodos que son especificados en el enterprise bean.
Session Bean
DEPARTAMENTO DE SISTEMAS
Session Bean
DEPARTAMENTO DE SISTEMAS
Un cliente local puede invocar un session bean a travs de una interfaz local. En este caso el cliente reside en la misma instancia del session bean.
Session Bean
DEPARTAMENTO DE SISTEMAS
El cliente local debe correr en la misma JVM que los enterprise bean que accede El cliente local puede ser un componente web u otro enterprise bean. La interfaz local define el ciclo de vida de los mtodos del bean. La interfaz por defecto es local
Session Bean
DEPARTAMENTO DE SISTEMAS
Session Bean
DEPARTAMENTO DE SISTEMAS
El estado de un objeto se compone de los valores de sus variables de instancia. Las instancias de las variables representan el estado de una nica sesin cliente-bean. El estado de la interaccin del cliente con el bean es llamado estado conversacional. Modos de estado de administracin
o o
Stateful Stateless
El estado se mantiene durante la sesin del cliente con el bean. La instancia es reservada para el cliente y cada una almacena la informacin del cliente.
El cliente inicia el ciclo de vida obteniendo una referencia al bean de sesin -stateful
1.
2.
Cuando un cliente invoca los mtodos de un stateless bean, las variables de instancia del bean pueden contener un estado especfico del cliente, pero slo por la duracin de la invocacin. Cuando el mtodo finaliza, el estado del cliente especfico no debera mantenerse.
Las instancias pueden estar compartidas por los clientes. El contenedor tiene un pool de instancias, cuando el cliente invoca un mtodo se asigna una instancia, cuando la libere es retornada al pool.
DEPARTAMENTO DE SISTEMAS
Ofrecen mejor escalabilidad para aplicaciones con gran cantidad de clientes Puede implementar un web service, pero no otros tipos de enterprise beans.
El cliente inicia el ciclo de vida obteniendo una referencia al bean de sesin -stateful
1.
Los mtodos Callback son mtodos del bean (no expuestos en la interfaz) que el contenedor llama para notificar la transicin del ciclo de vida de un bean Cuando el evento ocurre el contenedor invoca al mtodo callback correspondiente y los mtodos pueden ser utilizados para mejorar rendimiento Estos mtodos son marcados con anotaciones como @PostContruct and @PreDestroy y para los stateful session bean se agregan @PrePassivate and @PostActivate.
Session Beans
DEPARTAMENTO DE SISTEMAS
Los mtodos Callback: Deben ser pblicos, sin retorno (void), y sin parmetros. Utilizan las siguientes anotaciones
@PostConstruct: invocado sobre una instancia recientemente creada despus de la inyeccin (o JNDI lookup) de todas las dependencias y antes de la invocacin del primer mtodo (javax.annotation.PostConstruct) @PreDestroy: invocado luego de que un mtodo anotado con @Remove ha terminado y antes de que el contenedor elimine la instancia del bean (javax.annotation.PreDestroy) @PrePassivate: invocado antes de que el contenedor desactive (passivave) el bean, el contenedor elimina temporalmente el bean y lo salva en memoria secundaria (javax.ejb.PrePassivate) @PostActivate: invocado despus de que el contenedor mueve el bean de memoria secundaria a estado activo (active) (javax.ejb.PostActivate)
Con JNDI es responsabilidad del cliente hacer la localizacin y obtener la referencia al objeto. Con EJB 3, usted puede utilizar la inyeccin de dependencia, dejando que el contenedor se responsabilice de inyectar un objeto basado sobre la declaracin de la independencia.
JNDI
DEPARTAMENTO DE SISTEMAS
Un servlet puede invocar mtodos remotos de un enterprise bean que consulta informacin de una bd
JNDI es un servicio de nombres que permite a un componente localizar otros componentes o recursos Habilita a las aplicaciones para acceder mltiples servicios de nombres y de directorios. Por ejemplo servicios como LDAP, NDS,DNS, y NIS. Ofrece los mtodos de
El uso de JNDI en aplicaciones Java EE permite almacenar o consultar cualquier objeto de java: acceso a sistemas y aplicaciones Legado
JNDI
DEPARTAMENTO DE SISTEMAS
Un administrador crea un recurso en un namespace de JNDI En el servidor de aplicaciones se pueden crear recursos con la consola de administracin o el comando asadmin Las aplicaciones utilizan anotaciones para acceder a los recursos. Cuando una aplicacin utiliza la inyeccin del recurso, el servidor de aplicaciones invoca el API JNDI (@Resource) La aplicacin puede hacer llamados directos del API JNDI Un recurso y su nombre JNDI son ligados por el servicio de nombres Un recurso nuevo es creado en JNDI con la asociacin del nombre del recurso en el namespace de JNDI (bind del recurso) Namespace: conjunto de todos los nombres de un servicio de nombres
JNDI - Ejemplo
DEPARTAMENTO DE SISTEMAS
Acceso a una base de datos con el API JDBC: recurso JDBC con informacin sobre
Un objeto DataSource es una fbrica de conexiones de una fuente de datos especfica. El mtodo getConnection retorna una conexin fsica a la fuente de datos Si el objeto DataSource es registrado con JNDI, una aplicacin puede utilizar el API JNDI (lookup) para obtener el objeto y posteriormente conectarse a la fuente de datos Las aplicaciones utilizando el API de persistencia especifican la fuente de datos en el archivo persistence.xml
<jta-data-source>jdbc/MyOrderDB</jta-data-source>
JNDI
DEPARTAMENTO DE SISTEMAS
Los servicios de nombres de Java EE proveen ambientes de nombres JNDI a las aplicaciones cliente, enterprise beans, y componente web Un naming environment permite personalizar a un componente sin acceder o cambiar el cdigo fuente de los componentes Un contenedor implementa el ambiente de los componentes como un contexto de nombres Contexto es un objeto cuyo estado tiene asociados un conjunto de relaciones entre nombres y objetos (bindings) Un contexto tiene asociado una convencin de nombres Contexto inicial es el punto de partida para hacer las operaciones En JNDI todas las operaciones son realizadas en un contexto
JNDI
DEPARTAMENTO DE SISTEMAS
Un componente Java EE puede localizar su contexto de nombres con JNDI Un componente puede crear un objeto javax.naming.InitialContext y buscar su contexto bajo el nombre de java:comp/env. Un componente Java EE puede acceder nombres provistos por el sistema (named system-provided) y objetos definidos por los usuarios (user-defined objects) Nombres de objetos provistos por el sistema (e.g., objetos JTA) son almacenados en el contexto java:comp/env Segn el tipo de objeto a definir por el usuario el subcontexto para registrarlo vara
JNDI
DEPARTAMENTO DE SISTEMAS
Hashtable env = new Hashtable(); env.put(Context.PROVIDER_URL, args[2]); //rmi://localhost:1099 Context ctxt = new InitialContext(env); Compute comp = (Compute) ctxt.lookup(name);
Context initial = new InitialContext(); Object objref = initial.lookup("java:comp/env/ejb/SimpleConverter); Archivo build.xml <target name="run" depends="buildjar"> <java fork="true" classname="client.ComputePi"> <classpath path="${build}" /> <classpath path="${compute}" /> <sysproperty key="java.naming.factory.initial" value="com.sun.jndi.rmi.registry.RegistryContextFactory" /> <sysproperty key="java.naming.provider.url" value="rmi://${hostname}:${port}" /> </java> </target>
JNDI
DEPARTAMENTO DE SISTEMAS
Las propiedades del ambiente JNDI se deben configurar de acuerdo con las caractersticas del proveedor del servicio que se va a utilizar Las propiedades se clasifican en: Estndares (java.naming): java.naming.factory.initial Especficas del servicio (java.naming.service): java.naming.corba.orb Caracterstica especfica (java.naming.feature.): java.naming.security.sasl Especificas del proveedor: com.sun.jndi.ldap.trace.ber
JNDI
DEPARTAMENTO DE SISTEMAS
java.naming.factory.initial
nombre de la clase de la fbrica del contexto inicial La clase debe implementar la interface InitialContextFactory
Ejemplo valores:
com.sun.jndi.ldap.LdapCtxFactory com.sun.jndi.rmi.registry.RegistryContextFactory
JNDI
DEPARTAMENTO DE SISTEMAS
java.naming.provider.url
Ejemplo valores:
ldap://localhost:389/o=JNDITutorial rmi://localhost:1099
Inyeccin
@Stateless public class HelloUserBean implement HelloUser { public void saludo(String nombre) { System.out.println("Hola " + nombre + " bienvenido a EJB 3!"); } }
Un cliente de aplicacin JEE para referir la instancia de un enterprise bean lo puede realizar a travs de la anotacin esttica @EJB. El contenedor EJB es el que inyecta en cada objeto los objetos segn las anotaciones que incluya. EJB3 permite reemplazar los descriptores XML por anotaciones en el cdigo
Inyeccin
JNDI
DEPARTAMENTO DE SISTEMAS
@EJB
o o
Atributos Opcionales
o
Nombre de la clase Ejb-name si el EJB tiene un descriptor XML Interface local o remota Nombre JNDI
o o
beanInterface
mappedName
JNDI
DEPARTAMENTO DE SISTEMAS
Partes de un @Resource
name: nombre del recurso en JNDI type: el tipo (Java) del recurso authenticationType: tipo de autenticacin para utilizar el recurso shareable: indica si el recurso puede ser compartido mappedName: nombre especfico de la implementacin que indica que el recurso puede ser mapeado a description: descripcin del recurso
Ejemplos de estilos de inyeccin: atributos, mtodos y clases Atributos: public class SomeClass { @Resource(name="customerDB") private javax.sql.DataSource myDB; ... } Mtodos public class SomeClass { private javax.sql.DataSource myDB; ... @Resource(name="customerDB") private void setMyDB(javax.sql.DataSource ds) { myDB = ds; } Clases @Resource(name="myMessageQueue", type="javax.jms.ConnectionFactory") public class SomeMessageBean { }
Interface
@Remote: indica que se trata de una interfaz de negocio remota @Local: acceso al bean de forma local nicamente
Clase
@stateless similar a @stateful /* bean de sesin con estado */ Indica que el bean de sesin es sin estado Dependiendo del contenedor
Se crea el stub del bean Registra en JNDI el bean con el nombre lgico "java:comp/env/ejb/ nombreBean o con un nombre dado en la anotacin
@EJB Aplica para interfaces remotas nicamente Genera el lookup del bean de sesin en JNDI con el nombre "java:comp/ env/ejb/nombreBean En serviciosCliente.java
@EJB(name = "co.com.uniandes.ejemplo.servicios.IServiciosProducto") private IServiciosProducto serviciosProducto;
Bibliografa
DEPARTAMENTO DE SISTEMAS
EJB 3 in action. Panda Debu, Rahman Reza, Lane Derek. Manning. 2007. EJB 3 Developer Guide. Sikora, Michael. 2008. JSR 220: Enterprise JavaBeansTM,Version 3.0. Sun Microsystems. The Java EE 5 Tutorial Third Edition. For Sun Java System Application Server Platform Edition 9. Eric Jendrock. 2006.