ejb 3.0 tutor: ing. juan e. talavera horn 2010. definición la especificación ejb es una de las...

Post on 02-Apr-2015

109 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

EJB 3.0

Tutor: Ing. Juan E. Talavera Horn

2010

Definición

La especificación EJB es una de las varias APIs definidas en la Plataforma Java Enterprise Edition.

Provee una manera estándar de implementar código de negocios que típicamente se encuentran en las aplicaciones empresariales

Historia

Fue inicialmente desarrollada por IBM en 1997 y luego adoptada por Sun Mycrosystems (EJB 1.0 y EJB 1.1) 98/99

En sep/2001 se lanza EJB 2.0 En nov/2003 se lanza EJB 2.1 En may/2006 se lanza EJB 3.0

Tipos EJB

Session BeansStateless Session BeansStateful Session Beans

Entity BeansContainer Managed PersistanceBean Managed Persistance

Message Driven Beans

Servicios del Contenedor

Comunicación remota Transacciones Control de concurrencia Eventos utilizando JMS Servicios JNDI Seguridad

Arquitectura

Cliente Desktop

AplicaciónWeb

Web Service

AplicaciónWeb

Servidor de aplicaciones

Web Service

SessionBeans

Webserviceclient

WebBrowser

HTTP

SOAP-WSDL HTTP

RMI

RMI

RMI

Local Method Invocation

SQL

J2EE 1.4 Application Components

Problemas con EJB 2.x

InconvenientesRequiere implementar varias interfaces y

varios métodos innecesariosLas interfaces requieren la implementación de

EJBObject o EJBLocalObject e implementar varias excepciones innecesarias

El deployment descriptor es complejo y propenso a errores

La persistencia es compleja de desarrollar y administrar

Problemas con EJB 2.x

InconvenientesLos componentes EJB no son orientados a

objetos (no admite herencia)No es posible probar los componentes EJB

fuera del contenedor EJB, y hacer debugging dentro del contenedor es extremadamente impráctio

Encontrar e invocar un EJB es una tarea complicada. (JNDI)

J5EE – Breve Presentación

Es la siguiente evolución de J2EE 1.4 Implementa los estándares más

actualizados en el mercado Es construido sobre la API J2SE 1.5 Incluye a la especificación EJB 3.0

Especificación EJB 3.0

ObjetivoCaracterísticas nuevasDefiniciónEjemplosConclusión

Objetivo

El objetivo de EJB 3.0 es simplificar el desarrollo de las aplicaciones Java y estandarizar la API de persistencia

Características nuevas

Elimina la necesidad de implementar interfaces y métodos innecesarios

Utiliza metadata annotations en vez del descriptor de despliegue

Los EJBs son clases Java normales (POJO) así como las interfaces

Qué es un EJB?

Es un componente JEE reusable y portable

Consisten en métodos que encapsulan la lógica de negocios

Puede ser invocado por una variedad de componentes internos y externos al JVM

Son desarrollados como POJOs y los metadata annotations definen cómo estos beans deben ser tratados.

Entity EJB

@Entity@Table(name = "EMPLOYEES")public class Employee implements java.io.Serializable { @Id @Column(name="EMPNO", primaryKey=true) private int empId;

private String eName; private double sal;

<...getters y setters>

}

Stateless Session EJBs

import javax.ejb.Stateless;

@Stateless(name="CalculateEJB")public class CalculateEJBBean implements CalculateEJB{

int value = 0;

public String incrementValue() {value++; return "value incremented by 1";

}}

Stateless Session EJBs (interfaz)

import javax.ejb.Local;

@Localpublic interface CalculateEJB{

public String incrementValue();}

Cliente

import javax.naming.Context;import javax.naming.InitialContext;

public class CalculateejbClient {

public static void main(String [] args){ Context context = new InitialContext(); CalculateEJB myejb =

(CalculateEJB)context.lookup("java:comp/env/ejb/CalculateEJB");

System.out.println ( myejb.incrementValue() ); }}

Cliente (DI)

public class CalculateejbClient {

@EJB CalculateEJB myejb;

public static void main(String [] args){

System.out.println ( myejb.incrementValue() ); }}

Dependency Injection (DI)

Reglas para DI

Solo desde clases cuyo ciclo de vida es administrado por el contenedor, como servlets, JSF backing bean, implementaciones de tags jsp, filters y listeners.

Se inyectan las referencias a las variables al instanciar la clase.

Stateful Session EJBs

Stateful Session EJBs

Stateful Session Bean Client

Session Beans

Una clase que implementa los métodos, anotada con @Stateless o @Stateful

Una o mas interfaces, anotadas con @Local, @Remote o @WebService

Múltiples Interfaces

Reglas para Session Beans Un session bean debe tener al menos una

interfaz La clase debe ser concreta. Implementa todos

los métodos definidos en las interfaces Debe tener un constructor sin argumentos Puede heredar otro session bean o cualquier

POJO Los métodos de negocio o life-cycle-callbacks

pueden definirse en la super clase Los métodos de negocio no deben comenzar

con “ejb”

Lifecycle callbacks

Pool de Stateless Session Beans

Ciclo de vida de Stateless EJBs

Crear instancias del bean con el constructor por defecto

Inyectar recursos al bean Poner las instancias en un pool Cuando un cliente invoca un método, sacar del

pool una instancia Ejecutar el método solicitado por el cliente Cuando termina la ejecución del método,

retornar la instancia al pool Cuando se requiera, eliminar algunas instancias

Sateful session beans

El contenedor se asegura que invocaciones sucesivas al mismo bean se hagansobre la misma instancia para un cliente dado.

Consideraciones para Stateful Beans Las variables de instancia deben ser tipos

primitivos o deben implementar la interfaz serializable.

Debe marcarse algún método con el annotation @Remove

Además de los callbacks PostConstruct y PreDestroy, se invocan a PrePassivate y PostActivate

Consideraciones para Stateful Beans No debe inyectarse un stateful bean en un

objeto sin estado como un stateless session bean, o un servlet.

Puede inyectarse un stateful bean en otro stateful bean.

Puede inyectarse un stateless bean en un stateful bean

Cuando no pueda inyectarse, debe usarse JNDI

Principales diferencias

Persistencia

Session Bean EntityManagerEntityBean SQL

insert intoalumno (…) values) (...)

EntityBean

EntityManager

Stateful Bean desde Servlet

InitialContext ctx = new InitialContext();InscripcionesFacadeLocal inscFacade = (InscripcionesFacadeLocal)ctx.lookup("InscripcionesFacade/local");inscFacade.setAlumno(alumno);

request.getSession().setAttribute("beanInscFacade", inscFacade);

-----------------------------------------------------------

InscripcionesFacadeLocal inscFacade = (InscripcionesFacadeLocal)request.getSession().getAttribute("beanInscFacade");

inscFacade.removeMateria(materia.getCodigoMateria());

top related