Anda di halaman 1dari 48

DEPARTAMENTO DE SISTEMAS

Enterprise Java Bean 3 (EJB 3)


Arquitectura de software

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

Desarrollo por Componentes

Introduccin
DEPARTAMENTO DE SISTEMAS

Introduccin
DEPARTAMENTO DE SISTEMAS

Recordar Contenedor EJB 3


o o o o o

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

Tomado de: EJB 3 in action

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

Desarrollo por Componentes

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

Se deben utilizar en los siguientes casos:


o

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.

Tomado de: EJB 3 in action

DEPARTAMENTO DE SISTEMAS

Tipos de componentes EJB 3


o o o

Session beans Message-driven beans Entity bean

Tomado de: EJB 3 in action

Estructura Enterprise Java Bean


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.

Tomado del libro JavaEE Tutorial

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

Desarrollo por Componentes

Session Bean
DEPARTAMENTO DE SISTEMAS

Que son los componentes session bean?


Son una tecnologa EJB que permiten encapsular procesos de negocio (EJB 3 developer guide)

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.

Tomado de: EJB 3 in action

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

Un cliente remoto invoca una interfaz remota de un session bean

Tomado del libro EJB 3 Developer Guide

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

Definicin de un session bean con interfaz remota.


o

Definir la interfaz anotada con @Remote

Definir la clase que implementa la interfaz


Estado Opcional

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.

Tomado del libro EJB 3 Developer Guide

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

Definicin de un session bean con interfaz local.


o

Definir la interfaz anotada con @Local

Definir la clase que implementa la interfaz

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

Stateful Session Bean


DEPARTAMENTO DE SISTEMAS

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.

La sesin finaliza si el cliente remueve el bean o finaliza su sesin. Adicionar artculos


Realizar compra Agregar informacin adicional compra

Stateful Session Bean


DEPARTAMENTO DE SISTEMAS

Definicin Stateful session bean

Ciclo de vida bean con estado


DEPARTAMENTO DE SISTEMAS

El mtodo remove es el nico que es invocado directamente por el cliente

El contendor decide desactivar el bean

El cliente inicia el ciclo de vida obteniendo una referencia al bean de sesin -stateful

1.

2.

El cliente invoca algn mtodo del negocio durante la desactivacin

Stateless Session Bean


DEPARTAMENTO DE SISTEMAS

No mantiene un estado conversacional con el cliente.


o

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.

Ciclo de vida bean sin estado


DEPARTAMENTO DE SISTEMAS

El cliente inicia el ciclo de vida obteniendo una referencia al bean de sesin -stateful

1.

Callback Session Bean


DEPARTAMENTO DE SISTEMAS

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)

Localizacin Enterprise Bean


DEPARTAMENTO DE SISTEMAS

Tomado: EJB 3 in action

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

Acceso desde un componente a otros componentes o recursos (e.g., bases de datos)

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

Asociar un nombre con un objeto (binding) Buscar un objeto (lookup)

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

Servidor de BD Nombre de la BD Protocolo de red utilizado para la comunicacin

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>

Este punto es el nico que referencia algo sobre el objeto JDBC

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

Enterprise beans: java:comp/env/ejb JDBC DataSource: java:comp/env/jdbc

JNDI
DEPARTAMENTO DE SISTEMAS

Ejemplo con propiedades del ambiente

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

Ejemplo con archivo de configuracin de las propiedades

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

El URL para configurar el proveedor del servicio definido en la propiedad "java.naming.factory.initial"

Ejemplo valores:

ldap://localhost:389/o=JNDITutorial rmi://localhost:1099

Localizacin Enterprise Bean


DEPARTAMENTO DE SISTEMAS

La localizacin se puede realizar definiendo explcitamente la bsqueda con JNDI.

Localizacin Enterprise Bean


DEPARTAMENTO DE SISTEMAS

@EJB private HelloUser helloUser; void hello() { helloUser.saludo(Pepito"); }

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

Localizacin Enterprise Bean


DEPARTAMENTO DE SISTEMAS

Inyeccin

JNDI
DEPARTAMENTO DE SISTEMAS

@EJB
o o

Declaracin del atributo Mtodo Setter beanName


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

Session Beans - Anotaciones


DEPARTAMENTO DE SISTEMAS

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;

@Resource Inyeccin de recursos @Resource(name="jdbc/sqetestDB",type=javax.sql.DataSource.class)


public javax.sql.DataSource myTestDB;

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.

Anda mungkin juga menyukai