Está en la página 1de 83

Reutilizacin de software

A nivel de clase:
Clases y algoritmos JGL

A nivel de diseo
Patrones de diseo

A nivel de arquitectura
Arquitectura J2EE

Aplicaciones Web Servidor

Introduccin a la arquitectura
J2EE

ndice

Introduccin
Servidor de aplicaciones
Arquitectura de aplicacin J2EE
Desarrollo de EJBs (parte 2)

Introduccin
Objetivo

Desarrollar, implantar y ejecutar


componentes de lgica de negocio
en la plataforma J2EE Java 2
Enterprise Edition
4

Introduccin
Dnde lo implementamos?

Heterogeneidad:
Plataforma: Unix/Linux, Windows, Mac/OS
Lenguaje lgica: Java, C++, c#, Perl
Fabricante: Oracle, IBM, HP, Microsoft

Plataforma J2EE (Sun Microsystems):


Define una arquitectura de desarrollo (n niveles)
Define una serie de especificaciones para el desarrollo de
aplicaciones en internet.
No implementa ningn software
nicamente est compuesto
especificaciones

por

un

conjunto

de

Los
fabricantes
desarrollan
servidores
de
aplicaciones que cumplen las especificaciones J2EE
Permite la migracin de un fabricante a otro fcilmente.
5

Introduccin
J2EE: Distribucin bsica multinivel
Nivel (es) servidor de aplicacin

Presentacin

Nivel Cliente

Apps

API
Servicios

Nivel Datos

Lgica

API
Servicios
6

Introduccin
El API de J2EE
Java Servlets 2.3
Java Server Pages (JSP) 1.2
Enterprise Java Beans (EJB) 2.0

JDBC 2.0
Java Message Service (JMS) 1.0
Java Transaction API (JTA) 1.0
Java Mail 1.2
Java Beans Activation Framework (JAF) 1.0
Java API for XML Parsing (JAXP) 1.1
The Java Connector Architecture (JCA) 1.0
Java Authentication and Authorization Service (JASS) 1.0
7

Servidor de aplicaciones
Es un software que da soporte a los componentes
de servidor
Proporciona un entorno de ejecucin para los
componentes
Los componentes de servidor utilizan los servicios del
servidor de aplicaciones

Tareas de infraestructura:

Instalacin de componentes
Comunicacin
Sincronizacin de acceso concurrente
Preparacin de un entorno seguro
Seguridad en las transacciones

Servidor de aplicaciones
Servicios ofrecidos

Servicio de nombres: acceso a componentes y recursos a travs de


nombres lgicos
Java Naming and Directory Inteface(JNDI)

Servicio de transacciones: ejecucin de una serie de pasos de forma


atmica y aislada
Java Transaction Service (JTS)

Servicio de seguridad: directivas de seguridad para recursos protegidos


Java Authentication and Authorization Service(JAAS)

Persistencia: almacenamiento persistente de objetos y estados de objetos,


normalmente en BD relacionales
JDBC

Comunicacin: distintas tcnicas de comunicacin


Comunicacin Web: TCP/IP, UDP/IP,HTTP1.0 y HTTPS
Procesador de objetos distribuidos: RMI-IIOP

Servicios de configuracin y administracin: empaquetamiento, instalacin


y configuracin flexible de componentes y la administracin de aplicaciones
Descripcin mediantes esquemas XML de las caractersticas de servidores,
containers y otro servicios.
9

Arquitectura de aplicacin J2EE


Nivel Cliente

Cliente web

Nivel (es) servidor de aplicacin

Web container

Nivel Datos

EJB container

Bases de datos

Aplicaciones legadas

Cliente Java

Servicios y APIs,
JNDI, RMI-IIOP

J2EE

Servlets, JSP

Servicios y APIs,
JNDI, RMI-IIOP

J2EE

Enterprise JavaBeans

Servicios y APIs,
JNDI, RMI-IIOP

Sistemas ERP

J2EE

10

Arquitectura J2EE

11

Aplicacin J2EE desde cliente Java

12

Enterprise (Java)Beans (EJB)


Es una especificacin completa para el
desarrollo de componentes de negocio
Objetivos de la arquitectura de componentes
EJB:
Facilitar el desarrollo de aplicaciones,
concentrndose en la lgica de negocio
Independencia del proveedor de componentes
mediante la utilizacin de interfaces
Independencia de la plataforma, gracias a la
utilizacin del lenguaje Java
13

Aplicaciones Web Servidor

Desarrollo de EJBs

ndice

Tecnologa utilizada
Arquitectura
Desarrollo de un EJB
Clasificacin de EJBs
Los Session Bean

15

Tecnologa utilizada
RMI-IIOP: Invocacin de objetos remotos

mensaje

Cliente

mensaje

Internet

EJB

JNDI: Localizacin de los objetos remotos


16

Invocacin remota de objetos: RMI-IIOP


Queremos que los objetos del servidor se abstraigan de los
aspectos relacionados con la comunicacin remota
Cliente

Objeto remoto
Interfaz remota

Interfaz remota

Stub

Skeleton

La tarea mas importante de los Stubs y Skeleton consiste en


serializar los objetos que se envan como parmetro
17

Invocacin remota de objetos: RMI-IIOP


Separacin interfaz y lgica

Para construir y usar una clase Kaixo remota con el mtodo


iepa(String n) debemos:
9Definir una interfaz IKaixo con el mtodo iepa(String n) que extienda la
interfaz java.rmi.Remote y hacer que este mtodo declare la
interfaz RemoteException
9Definir una clase KaixoImp que implemente la interfaz Kaixo
9Llamar al compilador RMI (rmic) para que cree las clases KaixoStub
y KaixoSkeleton
9Crear al menos un objeto de la clase KaixoImpl y darle un nombre
9Un cliente debe localizar el objeto remoto, obtener el stub y realizar las
llamadas al stub. El cliente debe tener en su mquina virtual la
clase KaixoStub.class
18

Jerarquia de clases
class
java.rmi.server.UnicastRemoteObject

interface java.rmi.remote

-- CLASE REMOTA

-- INTERFAZ REMOTA

extiende

extiende
class KaixoImp
+iepa(n:String):void
-- CLASE REMOTA

implementa

interface IKaixo
+ iepa(n:String):void
-- INTERFAZ REMOTA

usa
class Cliente
kaixo: IKaixo
-- CLASE CLIENTE

19

Invocacin remota de objetos: RMI-IIOP


Ejemplo: la interfaz IKaixo

import java.rmi.Remote;
import java.rmi.RemoteException
// La interfaz remota del objeto remoto. Los clientes
// utilizarn esta interfaz para invocar el objeto remoto
public interface IKaixo extend Remote {
public String iepa(String n) throws RemoteException;
}

20

Invocacin remota de objetos: RMI-IIOP


Ejemplo: la implementacin Kaixo

import java.rmi.RemoteException
import java.rmi.PortableRemoteObject;
public class KaixoImp extend PortableRemoteObject
implements IKaixo{
public KaixoImp throws RemoteException {
super();
}
public String iepa(String n) throws RemoteException {
return (iepa +n);
}
}
21

Bsqueda remota de objetos: JNDI


Servicios de naming y directory

Mecanismo para la bsqueda de:


Mquinas, Impresoras, drivers
Consiste en asociar a un nombre lgico un elemento fsico
Cdigo Cliente

JNDI Client API


Service Provider Interface
LDAB Service
Provider

NIS Service
Provider

File System
Service Provider
22

Bsqueda remota de objetos: JNDI


Servicios de naming y directory

2: Buscar el objeto en un rbol JNDI conocido

Cliente Code

3: return Stub

Initial Context

4: Invocacin mtodo
remoto

RMI-IIOP
Stub

Mquina #1

5: Delegar

RMI-IIOP
Skeleton

1: Almacenar el objeto
remoto en el rbol JNDI

6: Delegar

RMI-IIOP
Remote Object

Mquina #2

Mquina #3
23

Bsqueda remota de objetos: JNDI


Almacenar el objeto remoto en el rbol JNDI

Crear una instancia del objeto remoto

Localizar el contexto
objeto del rbol y la mquina

Ubicar el objeto en el contexto

24

Bsqueda remota de objetos: JNDI


Servicios de naming y directory

Import javax.naming.*;
public class Startup {
public static void main(String args[]) Throws Exception {
// Crear una instancia del objeto
IKaixo kaixoInstance= new Kaixo();
// Localizar el objeto en el rbol JNDI
InitialContext ctx=new InitialContext(System.getProperties());
ctx.rebind(KaixoObj, kaixoInstance);
synchonized(kaixoInstance) {
kaixoInstance.wait();
}
}
}

25

Bsqueda remota de objetos: JNDI


Servicios de naming y directory
Import javax.naming.*;
import java.rmi.*;
public class Client {
public static void main(String args[]) Throws Exception {
// Buscar el Stub atravs del JNDI
Context ctx=new InitialContext(System.getProperties());
Object remoteObject=ctx.lookup(KaixoObj);
// Casting
IKaixo ikaixo=(IKaixo)javax.rmi.portableObject.narrow(remoteObject,Kaixo.class);
System.out.println(ikaixo.iepa(alumnos de iso));
}

26

ndice

Tecnologa utilizada
Qu son los EJBs ?
Desarrollo de un EJB
Clasificacin de EJBs
Los Session Bean
Los Entity Bean

27

Qu son los Enterprise JavaBeans


EJBs: componentes usados como parte de
aplicaciones corporativas distribuidas
Cada bean encapsula parte de la lgica de negocio
de la aplicacin
Se comunica con gestores de recursos y otro EJBs
Accedido por distintos tipos de clientes: EJBs,
servlets, clientes de aplicacin, etc.
En tiempo de ejecucin reside en un contenedor
EJB: servicios de seguridad, transaccin,
instalacin(deployment), concurrencia y gestin del
ciclo de vida.
Una aplicacin puede tener uno o varios EJBs en
uno o varios contenedores EJB
28

Instalacin tpica J2EE

Web container

Firewall

Cliente app. local

Servlets

JSP

Enteprise
Beans
Servlets

JSP

Bases de datos

EJB container

Enteprise
Beans

RMII-IIOP

Conectores

Cliente web
browser

JDBC

Aplicaciones legadas

Enteprise
Beans

Cliente Applet

Sistemas ERP

RMI-IIOP

Messaging(EJB 2.0, JMS, EJB 2.1)

Servidor J2EE
29

EJB Container

API Transacciones

Objeto remoto
API Seguridad

Cliente

Interfaz remota

Servicios

Arquitectura

API BD

Interfaz remota

Stub

Red

Skeleton

Aumento de las necesidades en el servidor:


Transacciones, Persistencia, Seguridad, Threads,........
30

Arquitectura Corba

Objeto remoto

API Transacciones

API Seguridad

Servicios

Middleware explcito (anterior a J2EE)


EJB Container

API BD

Cliente
Interfaz remota
Interfaz remota

Stub

Red

Skeleton

CORBA: Invocacin explcita a los servicios middleware a


31
travs de un API dentro del cdigo del objeto remoto

Arquitectura Corba
Middleware explcito: Ejemplo
transfer (Cuenta cuenta1, Cuenta cuenta2, long cantidad) {
// 1: Invocar al API del middleware para verificar la seguridad
// 2: Invocar al API del middleware para iniciar una transaccin
// 3: Invocar al API del middleware para cargar las tuplas de la BD
4: eliminar la cantidad de una cuenta y aadirlo a la otra
// 5: Invocar al API del middleware para almacenar las tuplas
// 6: Invocar al API del middleware para finalizar una transaccin
}

32

Arquitectura Corba
Middleware explcito: Desventajas
1. Difcil de escribir: El cdigo est contaminado. Muchas lneas de
cdigo no relacionadas con la lgica de negocio.
2. Difcil de mantener: Si se quiere modificar los servicios que utiliza el
Bean, se necesita reescribir el cdigo.
3. Difcil de Modificar: Los Vendedores Independientes de Software
(ISV) NO ofrecen el cdigo fuente, ya que es su propiedad intelectual.
Por lo tanto los cambios en el cdigo no sern posibles directamente.

33

Arquitectura J2EE
Middleware implcito

XML deployment
<transaction>
<security>.
<data>.

Cliente
EJB Container

Objeto remoto
API Seguridad

Interfaz remota

Servicios

API Transacciones

API BD

Interfaz remota

Stub

Red

Skeleton

34

Arquitectura J2EE
Middleware implcito
EJB Container

Cliente

Objeto remoto
API Transacciones

Objeto intercpt
API Seguridad

Interfaz remota

Servicios

Interfaz remota

API BD

Interfaz remota

Stub

Red

Skeleton

35

Arquitectura
Middleware implcito: Arquitectura EJB
1. Escribir el objeto distribuido que contiene nicamente la lgica de
negocio. No implementar invocacin a los servicios del middleware
transfer (Cuenta cuenta1, Cuenta cuenta2, long cantidad) {
// 1: eliminar la cantidad de una cuenta y aadirlo a la otra
}

2. Declarar los servicios que necesita el objeto distribuido en un


fichero separado: fichero descriptor
3. Describir (interfaz) los servicios que exporta el objeto distribuido.
4. Ejecutar el programa suministrado por el proveedor, para que
teniendo en cuenta las necesidades del objeto distribuido genere el
objeto interceptor
5. El objeto interceptor intercepta la llamada desde el cliente, ejecuta
los servicios del middleware que necesita el objeto distribuido y
finalmente delega la llamada al objeto distribuido
36

Arquitectura
Middleware implcito: Ventajas
1. Fcil de escribir: nicamente se escribe la lgica de la aplicacin.
Los servicios necesarios se declaran en un fichero de texto.
2. Fcil de mantener: La separacin de la lgica de negocio y la lgica
del middleware es ortogonal. Modificaciones en el middleware NO
implica modificaciones en el cdigo de la aplicacin.
3. Fcil de Modificar: Los clientes pueden modificar las necesidades
del middleware modificando el fichero descriptor. Por ejemplo, se
puede modificar aspectos de seguridad sin modificar el cdigo fuente.

37

RMI y EJBs

38

Arquitectura completa EJBs

39

Desarrollo de un EJB
Creacin de un EJB Object remoto

Client Code, such as


Sevlets or Applets

3: Crear un nuevo objeto EJB


1: localizar referencia
objeto Home
2: return referencia
objeto Home

EJB Container/Server

5: Devolucin referencia Objeto EJB (Stub)

Objeto Home

interface Home

JNDI

4: Crear objeto EJB

Enterprise
Beans

Objeto EJB
interface remota
Servicio Naming (LDAP)

En la interfaz home se indican los parmetros necesarios (de los


mtodos constructores) para crear los objetos EJB

40

Implementacin componente EJB


Un componente EJB [Kaixo] se define mediante tres
objetos:
Interfaz componente (o ejb) [IKaixo.java]: define los
mtodos del componente accesibles desde el cliente
Interfaz home [IKaixoHome.java]: define los mtodos de
creacin y borrado de componentes accesibles desde el
cliente
Objeto bean [KaixoBean.java]: define la
implementacin de los mtodos del componente y el
cdigo de inicializacin y borrado de los componentes
41

Desarrollo de un componente EJB


1. Escribir las interfaces componente y home
2. Escribir la clase bean con la implementacin
de los mtodos de negocio
3. Crear el descriptor de despliegue ejb-jar.xml
4. Crear el fichero EJB JAR
5. Desplegar el bean en el contenedor
6. Usar el bean desde los clientes

42

Desarrollo de un EJB
La interfaz remota
Indica qu mtodos del Bean se exportan

Es una interfaz java


Descrita por el desarrollador
Tiene que extender a javax.ejb.EJBObject
javax.ejb.EJBObject extiende a java.rmi.Remote.
Todo objeto que implementa java.rmi.Remote es
un objeto remoto que puede ser invocado desde
cualquier JVM
43

Desarrollo de un EJB
La interfaz remota
La interfaz con la que opera el cliente cuando quiere invocar al
EJB. Es tarea del sistema implementar esta interfaz. El objeto
implementado es el objeto EJB, quien delega la invocacin al
bean.

public interface IKaixo extend javax.ejb.EJBObject {


public String iepa() throws java.rmi.RemoteException;
}

44

Desarrollo de un EJB
La interfaz Home
Esta interfaz tiene mtodos para crear/destruir objetos EJB. La
implementacin del home interface es el home Object y la
implementa el sistema

public interface IKaixoHome extend javax.ejb.EJBHomeObject {


IKaixo create() throws java.rmi.RemoteException,
java.ejb.CreateException;
}

45

Desarrollo de un EJB
Invocacin a un Bean remoto
EJB Container/Server

Client Code, such as


Sevlets or Applets
Objeto Home

1: invocar Stub

interface Home
6: llamada bean

interface remota

Interfaz remota

2: marshall

Objeto EJB

Transaction service,
Security service
5: middleware Persistence service, etc...

4:invocar al Objeto EJB

Red

Stub

Enterprise
Beans

Skeleton
3: unmarshall

46

Desarrollo de un EJB
Creacin de un EJB Object local
EJB Container/Server

Client Code, such as


Sevlets
Interface local Home

Objeto local
Home
3: llamada bean

1: invocar el objeto local

interface local

Enterprise
Beans

Objeto local
EJB

Transaction service,
Security service
2: middleware Persistence service, etc...

En ocasiones, el cliente se encuentra en la misma mquina que


el contenedor de EJB!!
47

Desarrollo de un EJB
La interfaz local
Los clientes locales pueden utilizar esta interfaz para invocar al
bean. La mayor diferencia radica en el tratamiento de
excepciones

public interface IKaixoLocal extend javax.ejb.EJBLocalObject {


public String iepa() ;
}

48

Desarrollo de un EJB
La interfaz local home
Los clientes locales pueden utilizar esta interfaz para invocar al
bean. La mayor diferencia radica en el tratamiento de
excepciones

public interface IKaixoLocalHome extend javax.ejb.EJBLocalHome {


KaixoLocal create() throws java.ejb.CreateException;
}

49

Desarrollo de un EJB
La clase Bean
public class KaixoBean implements javax.ejb.SessionBean {
private SessionContext ctx;
public void ejbCreate() {};
public void ejbRemove() {};
public void ejbActivate() {};
public void ejbPassivate() {};
public void setSessionContext(javax.ejb.SessionContext ctx){
this.ctx=ctx;}

//Mtodos de negocio
public String iepa() {
return iepa guztioi!!!!;
}

50

Desarrollo de un EJB
Descriptor deployment independiente
Los servicios middleware requeridos por el Bean (XML)
- Gestin del bean: Nombre, tipo, home interface

- Requisitos de Persistencia: Cmo almacenar los datos


- Requisitos Transacionales
- Requisitos de Seguridad
51

Desarrollo de un EJB
Descriptor deployment independiente
<ejb-jar>
<enterprise-beans>
<session>
<ejb-name> El nombre del bean
<home> El nombre de la interface home
<remote> El nombre de la interface remota
<local-home> El nombre del la interface local remota
<local> El nombre de la interface local
<ejb-class> el nombre del la clase del bean (class)
<session-type> Si es stateful o stateless
<transaction-type> .......
<session>
<enterprise-beans>
52
<ejb-jar>

Desarrollo de un EJB
Descriptor deployment independiente
<ejb-jar>
<enterprise-beans>
<session>
<ejb-name> Kaixo </ejb-name>
<home> examples.IKaixoHome </home>
<remote> examples.IKaixo </remote>
<local-home> examples.IKaixoLocalHome </local-home>
<local> examples.IKaixoLocal </local>
<ejb-class> examples.KaixoBean </ejb-class>
<session-type> Stateless </session-type>
<transaction-type> Container </transaction-type>
<session>
<enterprise-beans>
<ejb-jar>

53

Desarrollo de un EJB
Descriptor deployment dependiente

Describe parmetros no estndar.


Depende del servidor de EJBs.
Referencia JNDI

54

Desarrollo de un EJB
El fichero de despliegue. El fichero .jar

Interfaces Home
Remota

Interfaces Home
Local
Creador fichero JAR

Fichero Jar EJB

Clases Enterprise Interfaces Object Interfaces Object


Bean
Remota
Local

Deployment
Descriptor
independiente

Deployment
Descriptor
dependiente

55

Desarrollo de un EJB
Pasos a seguir
Escribir los ficheros .java que componen el bean: interfaces
local y remoto, interfaces home local y remoto, el propio
fichero y las clases adyacentes que sean necesarias
Escribir el fichero de deployment
Compilar las clases del punto 1
Crear al fichero Ejb-jar utilizando la utilidad jar. Este fichero
debe contener el fichero de deployment y los ficheros .class
Implantar el fichero ejb-jar
Iniciar el contenedor de EJB (servidor)
Crear un fichero .java que pruebe si funciona correctamente

56

Desarrollo de un EJB
Modelo de Objetos
<<interface>>
java.io.Serializable

<<interface>>
javax.rmi.Remote

Viene con la plataforma Java 2


<<interface>>
javax.ejb.EnterpriseBean
<<interface>>
<<interface>>
<<interface>>
javax.ejb.EJBLocalObject javax.ejb.EJBObject javax.ejb.EJBHome

<<interface>>
javax.ejb.EJBLocalHome
<<interface>>
javax.ejb.SessionBean

Viene con la distribucin de EJB


<<interface>>
Kaixo Local
Interface

<<interface>>
Kaixo Remote
Interface

<<interface>>
Kaixo Home
Interface

<<interface>>
Kaixo Local
HomeInterface

Kaixo Bean
Clase Implementacin

Suministrado por el proveedor del Bean (tenemos que escribirlo)

Kaixo
EJB Local Object

Kaixo
EJB Object

Kaixo
Home Object

Kaixo
Local Home Object

Generado por nosotros utilizando las herramientas del vendedor

57

Desarrollo de un EJB
El cliente
EJB Container/Server

3: Crear nuevo objeto EJB

Interface
Home

Objeto Home
Cliente

5: return referencia objeto EJB


4: Crear objeto EJB

6: Invocacin mtodo
1: localizar referencia
objeto Home

2: return referencia
objeto Home

interface local

Objeto EJB

Enterprise
Beans
7: delegar llamada al bean

JNDI

Servicio Naming (LDAP)

58

Desarrollo de un EJB
El cliente

Crear el contexto inicial.


Los parmetros iniciales dependen de la plataforma.

Localizar la referencia al EJB.


Se obtiene una referencia a un objeto Home.

Obtener la referencia a un objeto remoto


(Remote Interface).
Invocar los servicios ofrecidos por el EJB a
travs de la interfaz remota obtenida.
59

Desarrollo de un EJB
El cdigo del cliente

Import javax.naming.Context;
import javax.naming.InitialContext;
import javax.util.Properties;
Parmetros de conexin al servidor JNDI
public class KaixoClient {
public static void main(String[] args) throws Exception {
//propiedades JNDI
Properties props=System.getProperties();
// Obtener el contexto JNDI inicial (ip, posicion rbol)
InitialContext ctx=new InitialContext(props);
Conexin con el servidor JNDI
60

Desarrollo de un EJB
El cdigo del cliente
Localizacin del objeto Home

Object obj=ctx.lookup(KaixoHome);
// Casting
KaixoHome home=(KaixoHome )
javax.rmi.PortableRemoteObject.narrow(
obj, KaixoHome.class);
Kaixo kaixo=home.create();

Creacin del objeto remoto

System.out.println(kaixo.iepa());
}
Invocacin de los servicios del EJB

61

ndice

Tecnologa utilizada
Arquitectura de componentes
Desarrollo de un EJB
Clasificacin de EJBs
Los Session Bean
Los Entity Bean

62

Clasificacion de EJB
Session Bean

Caractersticas
Ejecutados en relacin a un nico cliente
Puede manejar datos en una BD subyacente
De vida relativamente corta
No se garantiza su persistencia en caso de cada del sistema
Implementa lgica y/o reglas de negocio

Ejemplos: validacin tarjeta crdito


carrito de la compra

63

Clasificacion de EJB
Entity Bean

Caractersticas
Representa datos en una base de datos
Siempre es transaccional
Siempre compartido por mltiples usuarios
Existe mientras existan los datos que subyacen
Su persistencia es transparente en caso de cada del
sistema

Encapsula objetos de negocio


Ejemplo: control de inventario de productos

64

Los Entity-bean
Account class

AccountID

ownerName

balance

Ray Combs

1000

Bob Barker

1500

Monty Haul

2750

String accountID
String ownerName
double balance
deposit(amount)
withdraw(amount)

Account Instance

Tabla Account
Base de datos

accountID=1
ownerName=Ray Combs
balance=1000

65

Los Entity Bean


Account class
String accountID
String ownerName
double balance
deposit(amount)
withdraw(amount)

Cada objeto se caracteriza por una clave


El desarrollador del Bean nicamente
se encarga de implementar los mtodos
deposit y withdraw
El sistema se encargar de manera automtica de
actualizar la BD cuando haya habido alguna operacin
que haya modificado alguna de las variables del objeto cuenta

66

Desarrollo de EJBs

Los Session Beans

67

ndice
Clasificacin de los Session Bean
Stateless y Stateful

Desarrollo de un Session Bean


Stateless y Stateful

68

Introduccin a los Session Beans


Tipos de Session Bean
Sin estado (stateless EJBs)
Completamente transitorio
Mera pieza de maquinaria de negocio
No retiene informacin entre llamadas

Con estado (stateful EJBs)


Mantiene estado conversacional con el cliente
Extensin lgica en el servidor de la aplicacin cliente
Pueden participar en transacciones

Accedidos a travs de su interfaz remota


69

Ejemplo I: Stateless bean


Bean sin estado

EJB Container/Server
Interface
Home

Gestin de Passwords
Objeto Home
isLoginValid(login, passwd)

isLoginValid(login, passwd)

Enterprise
Beans

Interface
Remota
isLoginValid(login, passwd)

Objeto EJB

70

Ejemplo I: Stateless bean


Bean sin estado

4 partes requeridas al definir un bean:


La interfaz remota. Extiende javax.ejb.EJBObject
La interfaz Home. Extiende javax.ejb.EJBHome
La definicin de la clase del Bean
Meta-data (descriptores y otra info. de configuracin)

71

Ejemplo I: Stateless bean


La interfaz remota

Creacin de la interfaz remota


Extiende javax.ejb.EJBObject

import javax.ejb.*;
import java.rmi.*;
public interface PasswordManager extends EJBObject {
public Boolean isLoginValid(String login, String password)
throws java.rmi.RemoteException;
}

Esta interfaz define los servicios ofrecidos por el EJB.


Todos los parmetros deben ser serializables
72

Ejemplo I: Stateless bean


La interfaz home

Creacin de la interfaz home


Extiende javax.ejb.EJBHome
import javax.ejb.*;
import java.rmi.*;
public interface PasswordManagerHome extends EJBHome {
PasswordManager create() throws CreateException, RemoteException
}

Los mtodos create():


Invocan a los mtodos ejbCreate() de la clase bean
Deben corresponderse en nmero y tipo de argumentos a los mtodos
ejbCreate() de la clase bean.
En lugar de devolver void devuelven una instancia de la interfaz remota
Lanza cualquier excepcin que lance sus homnimos en la clase bean,
y debe lanzar javax.ejb.CreateException

Los mtodos remove() no deben ser sobreescritos.


73

La interfaz home
Relacin entre create() y ejbCreate()
EJB Container/Server

2:ejbCreate()

1: create

Objeto Home
Cliente

4: return id
objeto

6: return referencia objeto EJB

Session Bean
Instance

5: Crear objeto EJB(id objeto)

Objeto EJB

74

Ejemplo I: Stateless bean


La clase Bean
Debe implementar javax.ejb.SessionBean, que proporciona los
mtodos:
import javax.ejb.*;
import java.rmi.*;
public class PasswordManagerBean implements SessionBean {
public boolean isLoginValid(String login, String password) throws
RemoteException {}
public void ejbCreate()
throws
RemoteException
{}
ejbCreate
public void ejbActivate()
throws RemoteException {}
ejbActivate
public void ejbPassivate()
throws RemoteException {}
ejbPassivate
public void ejbRemove()
throws RemoteException {}
ejbRemove
public void setSessionContext (SessionContext ctx) throws RemoteException {}
}

Estos mtodos son invocados por el contenedor


de EJBs
75

Gestion de los Beans


Stateless Bean
EJB Container/Server
Cliente

Stateless Bean Pool

Bean

Interface
Remota

Bean
Objeto EJB

Bean
Invoke()

Bean

Se tiene un conjunto de Beans, y los clientes pueden reutilizar los


Beans
76

Ejemplo I: Stateless bean


La clase Bean

Creacin de la clase bean (II)


Adems se deben implementar uno o ms mtodos ejbCreate():
Es el mecanismo de inicializacin del EJB. Puede estar parametrizado.

Tambin debe implementar uno o ms mtodos de negocio:


Debe implementar los servicios de la interfaz remota
import javax.ejb.*;
import java.rmi.*;
public class PasswordManagerBean implements SessionBean {
...
public boolean isLoginValid(String login, String password)
throws java.rmi.RemoteException;
{
//Pedir una conexion JDBC al Pool de conexiones.
DataSource ds = initialContext.lookup(java:comp/env/jdbc/Passwords);
Connection conn=ds.getConnection();
...
//Comprobar si existe ese login con ese password
// boolean passValid=..
return passValid;
}
77
...
}

Ejemplo II: Stateful bean


La clase Bean
EJB Container/Server
Interface
Home

Gestin de Passwords
Objeto Home

Interface
Remota

isLoginValid(passwd)
changePass(oldPass,
newPass)

Enterprise
Beans

isLoginValid(passwd)
changePass(oldPass,newPass)

Objeto EJB
isLoginValid(passwd)
changePass(oldPass,
newPass)

78

Ejemplo II: Stateful bean


Bean con estado

4 partes requeridas al definir un bean:


La interfaz remota. Extiende javax.ejb.EJBObject
La interfaz Home. Extiende javax.ejb.EJBHome
La definicin de la clase del Bean
Meta-data (descriptores y otra info. de configuracin)

79

Ejemplo II: Stateful bean


La interfaz remota

Creacin de la interfaz remota


Extiende javax.ejb.EJBObject
import javax.ejb.*;
import java.rmi.*;
public interface PasswordManager extends EJBObject {
public Boolean isLoginValid(String password)
throws java.rmi.RemoteException;
public Boolean changePass(String oldPass, String new Pass)
throws java.rmi.RemoteException;
}

Esta interfaz define los servicios ofrecidos por el EJB.


Todos los parmetros deben ser serializables
80

Ejemplo II: Stateful bean


La interfaz home

Creacin de la interfaz home


Extiende javax.ejb.EJBHome
import javax.ejb.*;
import java.rmi.*;
public interface PasswordManagerHome extends EJBHome {
PasswordManager create() throws CreateException, RemoteException
PasswordManager create(String login)
throws CreateException, RemoteException
}

Los mtodos create():


Los metodos create invocan a los mtodos ejbCreate() de la clase
bean.
Deben corresponderse en nmero y tipo de argumentos a los mtodos
ejbCreate() de la clase bean.
En lugar de devolver void devuelven una instancia de la interfaz remota
Lanza cualquier excepcin que lance sus homnimos en la clase bean,
y debe lanzar javax.ejb.CreateException

Los mtodos remove() no deben ser sobreescritos.

81

Ejemplo II: Stateful bean


La clase Bean
Debe implementar javax.ejb.SessionBean, que proporciona los
mtodos:
import javax.ejb.*;
import java.rmi.*;
public class PasswordManagerBean implements SessionBean {
String name;
public boolean isLoginValid(String password) throws
RemoteException {}
public void ejbCreate(String
name) throws RemoteException {}
ejbCreate
public void ejbCreate()
throws RemoteException {}
ejbCreate
public void ejbActivate()
throws RemoteException {}
ejbActivate
public void ejbPassivate()
throws RemoteException {}
ejbPassivate
public void ejbRemove()
throws
RemoteException {}
ejbRemove
public void setSessionContext (SessionContext ctx) throws
RemoteException {}
}

Estos mtodos son invocados por el contenedor


de EJBs
82

Ejemplo II: Stateful bean


La clase Bean

Creacin de la clase bean (II)


Adems se deben implementar uno o ms mtodos ejbCreate():
Es el mecanismo de inicializacin del EJB. Puede estar parametrizado.

Tambin debe implementar uno o ms mtodos de negocio:


Debe implementar los servicios de la interfaz remota
import javax.ejb.*;
import java.rmi.*;
public class PasswordManagerBean implements SessionBean {
String login;
public void ejbCreate(String login) {
this.login=login;
}
public Boolean isLoginValid( String password)
throws java.rmi.RemoteException {
//Pedir una conexion JDBC al Pool de conexiones.
DataSource ds = initialContext.lookup(java:comp/env/jdbc/Passwords);
Connection conn=ds.getConnection();
...
//Comprobar si existe el login con ese password
// Boolean passValid=..
return passValid;
83
}
...}

También podría gustarte