Transcript 6-_EJB_3

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 Beans
 Stateless
Session Beans
 Stateful Session Beans

Entity Beans
 Container
Managed Persistance
 Bean Managed Persistance

Message Driven Beans
Servicios del Contenedor
Comunicación remota
 Transacciones
 Control de concurrencia
 Eventos utilizando JMS
 Servicios JNDI
 Seguridad

Arquitectura
Web
Browser
Web
service
client
Cliente
Desktop
Aplicación
Web
Web
Service
HTTP
SOAP-WSDL
HTTP
RMI
Aplicación
Web
Web
Service
Local Method Invocation
RMI
SQL
Session
Beans
RMI
Servidor de aplicaciones
J2EE 1.4 Application Components
Problemas con EJB 2.x

Inconvenientes
 Requiere
implementar varias interfaces y
varios métodos innecesarios
 Las 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

Inconvenientes
 Los
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
Objetivo
Características nuevas
Definición
Ejemplos
Conclusió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;
@Local
public 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 hagan
sobre 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
insert into
alumno (…)
values) (...)
Session Bean
EntityBean
EntityManager
SQL
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());