Está en la página 1de 62

Implementacin de la capa de lgica

Enterprise Java Beans (EJB)

Arquitectura en capas
API

API

dic-08

Capa lgica de negocio


Ofrece un interfaz de servicios
En JEE es una interfaz java

Cada servicio (mtodo) puede resolver un caso de uso o parte Los servicios pueden ser:
Sin estado: cada llamada es independiente de las dems; el cliente puede invocar en cualquier orden Con estado: existe nocin de sesin, una llamada estar condicionada por las anteriores

dic-08

Interfaz de servicio: ejemplo

dic-08

Capa de lgica: implementacin


Modelo de dominio:
Ncleo de la aplicacin

Clases que representan conceptos del problema que se trata de resolver Todos los procesos identificados durante al anlisis operan sobre instancias de estas clases

Clases de proceso:
Implementan procesos lgicos que se ejecutan sobre las clases del dominio
dic-08 5

dic-08

Modelo de dominio: ejemplo

Capa de lgica: implementacin


En esta capa no se debera meter ninguna dependencia de tecnologa de infraestructura
Debera poderse ejecutar fuera de cualquier entorno (para testear) La persistencia suele ser la principal dependencia. La capa DAO la evita

dic-08

Solucin en capas
Service Interface Control Action Action Action Action Fa ca de Fa ca de Persistence Interface Hibernate DAO Model Model Model D JDBC DAO A O JPA DAO Spring DAO D F
JDBC

Procs Procs Procs Procs

DAO Factory Persistencia


8

Presentac.
dic-08

Lgica

Posibles requisitos no funcionales de la capa lgica


Persistencia automtica POJO Acceso remoto (remoting) o local Transacciones locales o distribuidas Control de acceso (seguridad) por aplicacin o por mtodo Soporte MOM (Message Oriented Mid) Integracin con servidores de otras tecnologas (legacy) Escalabilidad, vertical y horizontal 9

dic-08

Conexiones remotas

Requisitos no funcionales: acceso remoto

Acceso local

dic-08

10

RNF: Transacciones distribuidas

Se actualizan dos BDD


dic-08 11

Requisitos no funcionales: Integracin MOM

 

 

Pueden tener cola para soportar cadas del sistema receptor 


Channel


dic-08 12

Requisitos no funcionales: escalabilidad


Balanceo de carga Fail over transparente Clustering Redeploy dinmico Gestin de servidores Control de Concurrencia Cacheado Pool de recursos
dic-08 13

Resolucin de requisitos no funcionales


Persistencia POJO automtica Acceso remoto Transacciones distribuidas Control de acceso Soporte MOM Integracin con servidores Escalabilidad
dic-08

EJB SI SI SI SI SI SI SI

Otras tecnologas Java JDBC, Hibernate, TopLink, iBatis, SpringDAO Web Services como capa de presentacin, programando RMI Programando API JTA A nivel de Aplicacin, o por programa, o con AOP Programando API JMS Programando API JCA o con frameworks que lo soporten Condicionando la programacin, servidores de cache 2 nivel, etc. 14

Eleccin de la plataforma
S, se puede hacer una aplicacin con todos los requisitos sin usar EJBs
pero si se necesitan ms de uno de los vistos es una invitacin muy clara a usar EJB

El servidor de aplicaciones (contenedor de EJB) nos los da resueltos


dic-08 15

Qu es la especificacin EJB?
Una arquitectura de componentes de servidor:
Simplifica el proceso de construccin de aplicaciones distribuidas Es posible escribir aplicaciones escalables, fiables y seguras sin escribir cdigo de infraestructura Desarrollo ms rpido de la parte servidora

Aplicaciones portables entre distintas plataformas (Java) y servidores de aplicaciones (especificacin estndar)
dic-08 16

S pero qu es un EJB?
En EJB 3.0 es una clase java normal (POJO) con anotaciones especficas que se ejecuta dentro de un contenedor que le da un contexto y le resuelve los servicios de infraestructura de forma transparente
dic-08 17

Clase java normal (POJO) con annotations

Interfaz que ve la capa de presentacin

dic-08

18

Anotaciones EJB

@Stateless @Statefull @Local @Remote @WebService @Entity @Embeddable .

En EJB 3.0 se reducen considerablemente las tareas que el desarrollador del bean debe realizar EJB 3.0 todos los beans son POJOs con anotaciones EJB. Mediante anotaciones:
Se declara el interfaz del bean El mapeo O/R Referencias a recursos Cualquier cosa que antes ponamos en los descriptores

El descriptor no es obligatorio
dic-08 19

Cmo le resuelve el acceso remoto?


Generando automticamente clases que se encargan del protocolo (RMI-IIOP, SOAP, RMI, )
dic-08

Clases generadas por el 20 contenedor

Cmo le resuelve los servicios de forma transparente?


Clase que se programa

Interceptando las llamadas y tomando el control Algo as como el stack de interceptores de Struts2
dic-08 21

dic-08

22

Tipos de EJBs
Session Beans:
Modelan procesos de negocio accedidos de manera sncrona Implementacin del patrn Faade

Message-driven Beans:
Modelan procesos de negocio accedidos de manera asncrona, permiten el uso de JMS desde EJBs

Entity Beans:
Representan entidades de negocio con mapeo objeto/relacional En EJB 3.0 ya no se usan, pasan a ser POJOs
Pero un contenedor EJB3.0 debe gestionar Entity Beans (compatibilidad hacia atrs)
dic-08 23

Versiones de la especificacin
EJB 1.0
Session Beans y Message Beans

EJB 1.1
Aade Entity Beans Registro JNDI Descriptor de despliegue XML

EJB 2.0
Define mejor, permite interoperabildad de herramientas Compatible CORBA, RMI-IIOP

EJB 2.1
WebServices Timer Service

EJB 3.0
dic-08

Simplifica desarrollo, uso de POJOS y annotations Persitencia de POJOS, evita uso de EntityBeans

24

Despliegue EJB 3.0

dic-08

25

Empaquetado de EJBs: jar


Se realiza en ficheros JAR Uno o ms EJBs por cada JAR
ejb-jar.xml (optativo en EJB 3.0)

Ejemplo: jboss.xml (depende del contenedor) (puede ser optativo)


dic-08 26

Estrucutra interna del paquete jar


opcionales

dic-08

27

Descriptor de Despliegue: ejb-jar.xml


Especifica las propiedades y servicios del EJB de forma declarativa. Describe como ha de ser desplegado el EJB en el contenedor, y como ha de ser manejado:
Ciclo de vida Sistema de persistencia Control de transacciones Servicios de seguridad

Es un fichero XML: ejb-jar.xml Habr uno por paquete de despliegue (fichero jar) y puede declarar varios EJBs de distintos tipos.
dic-08 28

Descriptor de despliegue: ejb-jar.xml, ejemplo

dic-08

29

Descriptor especfico del contenedor


Cada contenedor permite particularizar el despliegue para buscar optimizaciones Fuera del estndar J2EE
Consultar documentacin de cada contenedor

Es otro fichero XML que se adjunta al ejbjar.xml


orion-jar.xml, jboss.xml, web-sphere.xml, etc

Normalmente, los servidores de aplicaciones facilitan herramientas para realizar el despliegue y confeccionar los descriptores.
dic-08 30

Empaquetado de aplicaciones de servidor: ficheros EAR

dic-08

31

Empaquetado de aplicaciones: ficheros EAR


Contienen la parte WEB y la parte EJB Necesitan un descriptor especial: /META-INF/application.xml

dic-08

32

applicaction.xml: ejemplo

dic-08

33

Session Beans

Sesin Beans
Implementacin del patrn Facade Implementan la interfaz de la capa de servicio Dos tipos de session beans
Sin estado: cada invocacin a un mtodo es independiente de las dems Con estado

dic-08

35

Aplicacin del patrn Faade

dic-08

36

Staless session beans


Cada invocacin a un mtodo es independiente de las dems invocaciones
No hay orden en las llamadas No guardan estado conversacional
Pero pueden guardar atributos independientes de las invocaciones: conexiones, sockets, etc

El contenedor instancia un pool suficiente para atender las peticiones


dic-08 37

Pool de stateless session beans


Para cada invocacin a mtodo el contenedor escoge un bean del pool para atender la llamada

Si el contenedor tiene demanda puede instanciar ms, si le sobran puede eliminar algunos dic-08

38

Ciclo de vida stateless bean

dic-08

39

Ciclo de vida
New Inyeccin de dependencias PostConstruct
Llamada callback para que el inicialize lo que necesite

Operativo: llamada a mtodos Predestroy


Llamada callback para que cierre lo inicializado
dic-08 40

Creacin de un bean, pasos


Definir el interfaz de negocio que se va a implementar Escribir la clase que lo implementa
Se le pueden aadir mtodos callback

Anotar la implementacin
@Stateless [@Remote] Si va a tener acceso remoto [@TransactionAttribute]

Empaquetar y desplegar
dic-08 41

Stateless: ejemplo

Tendr acceso remoto

dic-08

42

Invocacin de stateless: cliente


Este cdigo se ejecuta en otra mquina (JVM) El cliente necesita acceso a la implementacin del stub El stub se obtiene de un registro JNDI

dic-08

43

Despliegue y JNDI: ejemplo

El registro JNDI mantiene referencias a los beans que sirve el contenedor

dic-08

44

Acceso desde Action Struts: ejemplo

Sin dependencias de la implementacin

dic-08

45 Clave en contexto JNDI

Statefull session beans


El bean mantiene estado conversacional
Los valores de sus atributos son funcionales para un usuario

Para cada usuario concurrente se asigna uno (vinculado a la sesin del usuario) La gestin en pool es ms compleja
Passivation y Activation
dic-08 46

Ciclo de vida de Statefull bean

dic-08

47

Passivation & Activation


Si se alcanza el tamao mximo del pool el contenedor serializar un bean
Serializar: lo saca de memoria y lo guarda en soporte persistente Habitualmente poltica LRU

Cuando se vuelve a necesitar el bean serializado se vuelve a cargar


Desplazando a otro a soporte persistente

dic-08

Cuando un bean termina su proceso se puede eliminar o mantener en el pool 48

Pasivacin

dic-08

49

Activacin

dic-08

50

Statefull bean: ejemplo, corrector de examen

Atributos que definen el examen en curso de un usuario @Statefull @Remote


dic-08 51

Uso desde Struts: ejemplo, corrector de examen

Inicio del examen

dic-08

52

Uso desde Struts: ejemplo, corrector de examen

Respuesta a cada pregunta

dic-08

53

Callbacks en session beans


Un bean puede ser notificado cada vez que cambia de estado en su ciclo de vida
El bean puede tener cosas que hacer

Para recibir notificaciones el bean debe implementar mtodos y asociarlos a los eventos
Con anotaciones

dic-08

54

Anotaciones para callbacks

@PostConstruct @PrePassivate @PostActivate @PreDestroy

dic-08

55

Control de transacciones
Programtica: usando el API JTA Declarativa:
En deployment descriptor Con anotaciones Por defecto

Se especifica la forma de participacin en transacciones


Por mtodo Por bean completo No se indica el nivel de aislamiento configuracin particular de cada contenedor
dic-08 56

Transacciones controladas por el contenedor


@TransactionAttribute
MANDATORY REQUIRED REQUIRES_NEW SUPPORTS NOT_SUPPORTED NEVER
REQUIRED en el tipo por defecto para todos los mtodos del bean
dic-08 57

Por defecto el control de transacciones es CONTAINERCONTAINER -MANAGED

Transacciones controladas por el contenedor: cmo?

Invocacin al mtodo del EJB que se solicita

dic-08

58

Control de acceso
El contenedor (o la aplicacin) debe autenticar al usuario y asignarle el rol(es) que le corresponda(n) Se especifica qu rol tiene acceso por bean o mtodo:
@RolesAllowed, @PermitAll, @DenyAll

Roles abstractos que maneja el sistema


@DeclareRoles
dic-08 59

Configuracin de seguridad: ejemplo

dic-08

60

Message Driven Beans


Incorporados en la especificacin 2.0. Pensados para mensajera asncrona. Funcionan sobre JMS (manejo de colas de mensajes, publish & subscribe) Interesantes para integracin de sistemas.
dic-08 61

Message Driven Beans


Es el nico que est obligado a cumplir una interfaz concreta:
javax.jms.MessageListener

No implican cambios significativos

dic-08

62