a nivel de diseño - interoperable databases groupsiul02.si.ehu.es/~alfredo/iso/06introj2ee.pdf ·...

83
1 Reutilización de software A nivel de clase: – Clases y algoritmos JGL A nivel de diseño – Patrones de diseño A nivel de arquitectura – Arquitectura J2EE

Upload: hoangkhanh

Post on 27-Sep-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

1

Reutilización de software

• A nivel de clase: – Clases y algoritmos JGL

• A nivel de diseño– Patrones de diseño

• A nivel de arquitectura– Arquitectura J2EE

2

Introducción a la arquitectura J2EE

Aplicaciones Web ServidorAplicaciones Web Servidor

3

Índice

Introducción Servidor de aplicacionesArquitectura de aplicación J2EEDesarrollo de EJB’s (parte 2)

4

IntroducciónObjetivo

Desarrollar, implantar y ejecutarcomponentes de lógica de negocio en la plataforma J2EE – Java 2 Enterprise Edition

5

Introducción¿Dónde lo implementamos?

• Heterogeneidad:– Plataforma: Unix/Linux, Windows, Mac/OS– Lenguaje lógica: 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 ningún software• Únicamente está compuesto por un conjunto de

especificaciones• Los fabricantes desarrollan servidores de

aplicaciones que cumplen las especificaciones J2EE– Permite la migración de un fabricante a otro fácilmente.

6

IntroducciónJ2EE: Distribución básica multinivel

Nivel (es) servidor de aplicaciónNivel Cliente Nivel Datos

Servicios

API

Servicios

API

LógicaAppsPr

esen

taci

ón

7

Java Servlets 2.3Java Server Pages (JSP) 1.2Enterprise Java Beans (EJB) 2.0

IntroducciónEl API de J2EE

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

8

Servidor de aplicaciones

• Es un software que da soporte a los componentes de servidor– Proporciona un entorno de ejecución para los

componentes– Los componentes de servidor utilizan los servicios del

servidor de aplicaciones• Tareas de infraestructura:

– Instalación de componentes– Comunicación– Sincronización de acceso concurrente– Preparación de un entorno seguro– Seguridad en las transacciones

9

Servidor de aplicacionesServicios ofrecidos

• Servicio de nombres: acceso a componentes y recursos a través de nombres lógicos

– Java Naming and Directory Inteface(JNDI)• Servicio de transacciones: ejecución de una serie de pasos de forma

atómica 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• Comunicación: distintas técnicas de comunicación

– Comunicación Web: TCP/IP, UDP/IP,HTTP1.0 y HTTPS– Procesador de objetos distribuidos: RMI-IIOP

• Servicios de configuración y administración: empaquetamiento, instalación y configuración flexible de componentes y la administración de aplicaciones

– Descripción mediantes esquemas XML de las características de servidores, containers y otro servicios.

10

Arquitectura de aplicación J2EE

Cliente web

Cliente Java

Servicios y API’s, JNDI, RMI-IIOP…

J2EE

Web container

Servicios y API’s, JNDI, RMI-IIOP…

J2EE

Bases de datos

Servlets, JSP

Nivel (es) servidor de aplicaciónNivel Cliente Nivel Datos

Aplicaciones legadas

Sistemas ERPServicios y API’s, JNDI, RMI-IIOP…

J2EE

EJB container

Enterprise JavaBeans

11

Arquitectura J2EE

12

Aplicación J2EE desde cliente Java

13

Enterprise (Java)Beans (EJB)

• Es una especificación completa para el desarrollo de “componentes de negocio”

• Objetivos de la arquitectura de componentes EJB:– Facilitar el desarrollo de aplicaciones,

concentrándose en la lógica de negocio– Independencia del proveedor de componentes

mediante la utilización de interfaces– Independencia de la plataforma, gracias a la

utilización del lenguaje Java

Aplicaciones Web ServidorAplicaciones Web Servidor

Desarrollo de EJB’s

15

Tecnología utilizadaArquitecturaDesarrollo de un EJB Clasificación de EJB´sLos Session Bean

Índice

16

Tecnología utilizada

• RMI-IIOP: Invocación de objetos remotos

• JNDI: Localización de los objetos remotos

mensaje mensaje

InternetCliente EJB

17

Invocación remota de objetos: RMI-IIOP

Queremos que los objetos del servidor se abstraigan de los aspectos relacionados con la comunicación remota

Cliente

Stub

Interfaz remota

La tarea mas importante de los Stubs y Skeleton consiste en serializar los objetos que se envían como parámetro

Objeto remoto

Skeleton

Interfaz remota

18

Invocación remota de objetos: RMI-IIOPSeparación interfaz y lógica

Para construir y usar una clase Kaixo remota con el método iepa(String n) debemos:

Definir una interfaz IKaixo con el método iepa(String n) que extienda la interfaz java.rmi.Remote y hacer que este método declare la interfaz RemoteException

Definir una clase KaixoImp que implemente la interfaz KaixoLlamar al compilador RMI (rmic) para que cree las clases KaixoStub

y KaixoSkeletonCrear al menos un objeto de la clase KaixoImpl y darle un nombreUn cliente debe localizar el objeto remoto, obtener el stub y realizar las

llamadas al stub. El cliente debe tener en su máquina virtual la clase KaixoStub.class

19

Jerarquia de clases

interface IKaixo

+ iepa(n:String):void

-- INTERFAZ REMOTA

interface java.rmi.remote

-- INTERFAZ REMOTA

implementa

extiendeclass KaixoImp

+iepa(n:String):void

-- CLASE REMOTA

classjava.rmi.server.UnicastRemoteObject

-- CLASE REMOTA

extiende

class Cliente

-- CLASE CLIENTE

kaixo: IKaixo

usa

20

Invocación remota de objetos: RMI-IIOPEjemplo: la interfaz IKaixo

import java.rmi.Remote;import java.rmi.RemoteException

// La interfaz remota del objeto remoto. Los clientes// utilizarán esta interfaz para invocar el objeto remoto

public interface IKaixo extend Remote {public String iepa(String n) throws RemoteException;

}

21

Invocación remota de objetos: RMI-IIOPEjemplo: la implementación Kaixo

import java.rmi.RemoteExceptionimport java.rmi.PortableRemoteObject;

public class KaixoImp extend PortableRemoteObjectimplements IKaixo{

public KaixoImp throws RemoteException {super();

}public String iepa(String n) throws RemoteException {

return (“iepa ”+n);}

}

22

Búsqueda remota de objetos: JNDIServicios de naming y directory

Mecanismo para la búsqueda de:Máquinas, Impresoras, drivers

Consiste en asociar a un nombre lógico un elemento físico

Código Cliente

LDAB ServiceProvider

NIS ServiceProvider

File SystemService Provider

Service Provider Interface

JNDI Client API

23

Búsqueda remota de objetos: JNDIServicios de naming y directory

RMI-IIOPStub

Cliente Code

RMI-IIOPRemote Object

RMI-IIOPSkeleton

Initial Context

1: Almacenar el objetoremoto en el árbol JNDI

2: Buscar el objeto en un árbol JNDI conocido

3: return Stub

4: Invocación método remoto

5: Delegar

6: Delegar

Máquina #1

Máquina #2

Máquina #3

24

Búsqueda remota de objetos: JNDIAlmacenar el objeto remoto en el árbol JNDI

Crear una instancia del objeto remoto

Localizar el contexto

objeto del árbol y la máquina

Ubicar el objeto en el contexto

25

Búsqueda remota de objetos: JNDIServicios de naming y directory

Import javax.naming.*;public class Startup {

public static void main(String args[]) Throws Exception {

// Crear una instancia del objetoIKaixo kaixoInstance= new Kaixo();

// Localizar el objeto en el árbol JNDIInitialContext ctx=new InitialContext(System.getProperties());

ctx.rebind(“KaixoObj”, kaixoInstance);

synchonized(kaixoInstance) {kaixoInstance.wait();

}}}

26

Búsqueda remota de objetos: JNDIServicios de naming y directory

Import javax.naming.*;import java.rmi.*;public class Client {

public static void main(String args[]) Throws Exception {

// Buscar el Stub através del JNDIContext ctx=new InitialContext(System.getProperties());

Object remoteObject=ctx.lookup(“KaixoObj”);

// CastingIKaixo ikaixo=(IKaixo)javax.rmi.portableObject.narrow(remoteObject,Kaixo.class);

System.out.println(ikaixo.iepa(“alumnos de iso”));}

27

Tecnología utilizadaQué son los EJB’s ?Desarrollo de un EJB Clasificación de EJB´sLos Session BeanLos Entity Bean

Índice

28

Qué son los Enterprise JavaBeans

• EJB´s: componentes usados como parte de aplicaciones corporativas distribuidas

• Cada bean encapsula parte de la lógica de negocio de la aplicación

• Se comunica con gestores de recursos y otro EJB’s• Accedido por distintos tipos de clientes: EJB’s,

servlets, clientes de aplicación, etc.• En tiempo de ejecución reside en un contenedor

EJB: servicios de seguridad, transacción, instalación(deployment), concurrencia y gestión del ciclo de vida.

• Una aplicación puede tener uno o varios EJB’s en uno o varios contenedores EJB

29

Instalación típica J2EE

Cliente webbrowser

Bases de datos

Aplicaciones legadas

Sistemas ERP

Cliente app. local

Cliente Applet

Web container

JSP Servlets

Servlets JSP

EJB container

EntepriseBeans

EntepriseBeans

EntepriseBeans

Servidor J2EEMessaging(EJB 2.0, JMS, EJB 2.1)

Fire

wal

l

RMI-IIOP

JDBC

Con

ecto

res

RMII-IIOP

30

Cliente

Stub

Interfaz remota

Objeto remoto

Skeleton

Interfaz remota

Red

Aumento de las necesidades en el servidor:Transacciones, Persistencia, Seguridad, Threads,........

Arquitectura EJB Container

Serv

icio

sAPI Transacciones

API Seguridad

API BD

31

Cliente

Stub

Interfaz remota

Skeleton

Interfaz remota

Red

CORBA: Invocación explícita a los servicios middleware a través de un API dentro del código del objeto remoto

Arquitectura CorbaMiddleware explícito (anterior a J2EE)

Objeto remoto

EJB Container

Serv

icio

s

API Transacciones

API Seguridad

API BD

32

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 transacción// 3: Invocar al API del middleware para cargar las tuplas de la BD4: eliminar la cantidad de una cuenta y añadirlo a la otra// 5: Invocar al API del middleware para almacenar las tuplas// 6: Invocar al API del middleware para finalizar una transacción}

Arquitectura CorbaMiddleware explícito: Ejemplo

33

Arquitectura CorbaMiddleware explícito: Desventajas

1. Difícil de escribir: El código está contaminado. Muchas líneas de código no relacionadas con la lógica de negocio.

2. Difícil de mantener: Si se quiere modificar los servicios que utiliza el Bean, se necesita reescribir el código.

3. Difícil de Modificar: Los Vendedores Independientes de Software (ISV) NO ofrecen el código fuente, ya que es su propiedad intelectual. Por lo tanto los cambios en el código no serán posibles directamente.

34

Cliente

Stub

Interfaz remota

SkeletonRed

Arquitectura J2EEMiddleware implícito

Objeto remoto

Interfaz remota

EJB Container

Serv

icio

sAPI Transacciones

API Seguridad

API BD

<transaction>…<security>….<data>….

XML deployment

35

Cliente

Stub

Interfaz remota

SkeletonRed

Arquitectura J2EEMiddleware implícito

Objeto remoto

Interfaz remota

EJB Container

Serv

icio

sAPI Transacciones

API Seguridad

API BD

Objeto intercpt

Interfaz remota

36

1. Escribir el objeto distribuido que contiene únicamente la lógica de negocio. No implementar invocación a los servicios del middleware

2. Declarar los servicios que necesita el objeto distribuido en un fichero separado: fichero descriptor3. 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 interceptor5. 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

transfer (Cuenta cuenta1, Cuenta cuenta2, long cantidad) {// 1: eliminar la cantidad de una cuenta y añadirlo a la otra

}

ArquitecturaMiddleware implícito: Arquitectura EJB

37

1. Fácil de escribir: Únicamente se escribe la lógica de la aplicación. Los servicios necesarios se declaran en un fichero de texto.

2. Fácil de mantener: La separación de la lógica de negocio y la lógica del middleware es ortogonal. Modificaciones en el middleware NO implica modificaciones en el código de la aplicación.

3. Fácil 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 código fuente.

ArquitecturaMiddleware implícito: Ventajas

38

RMI y EJB’s

39

Arquitectura completa EJB’s

40

Objeto Home

EnterpriseBeans

EJB Container/ServerClient Code, such asSevlets or Applets

interface Home

3: Crear un nuevo objeto EJB

5: Devolución referencia Objeto EJB (Stub)

En la interfaz home se indican los parámetros necesarios (de los métodos constructores) para crear los objetos EJB

Objeto EJBinterface remota

4: Crear objeto EJB

Desarrollo de un EJBCreación de un EJB Object remoto

1: localizar referencia objeto Home

JNDI

2: return referencia objeto Home

Servicio Naming (LDAP)

41

Implementación componente EJB

Un componente EJB [Kaixo] se define mediante tres objetos:

Interfaz componente (o ejb) [IKaixo.java]: define los métodos del componente accesibles desde el clienteInterfaz home [IKaixoHome.java]: define los métodos de creación y borrado de componentes accesibles desde el cliente Objeto bean [KaixoBean.java]: define la implementación de los métodos del componente y el código de inicialización y borrado de los componentes

42

Desarrollo de un componente EJB

1. Escribir las interfaces componente y home2. Escribir la clase bean con la implementación

de los métodos de negocio3. Crear el descriptor de despliegue ejb-jar.xml4. Crear el fichero EJB JAR5. Desplegar el bean en el contenedor6. Usar el bean desde los clientes

43

• Indica qué métodos 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

Desarrollo de un EJBLa interfaz remota

44

public interface IKaixo extend javax.ejb.EJBObject {public String iepa() throws java.rmi.RemoteException;

}

La interfaz con la que opera el cliente cuando quiere invocar alEJB. Es tarea del sistema implementar esta interfaz. El objeto implementado es el objeto EJB, quien delega la invocación al bean.

Desarrollo de un EJBLa interfaz remota

45

public interface IKaixoHome extend javax.ejb.EJBHomeObject {IKaixo create() throws java.rmi.RemoteException,

java.ejb.CreateException;}

Esta interfaz tiene métodos para crear/destruir objetos EJB. La implementación del home interface es el home Object y la implementa el sistema

Desarrollo de un EJBLa interfaz Home

46

Objeto Home

EnterpriseBeans

EJB Container/ServerClient Code, such asSevlets or Applets

interface Home

Objeto EJBinterface remota

Stub

Interfaz remota

SkeletonRed

1: invocar Stub

2: marshall 3: unmarshall

4:invocar al Objeto EJB

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

6: llamada bean

Desarrollo de un EJBInvocación a un Bean remoto

47

Objeto localHome

EnterpriseBeans

EJB Container/Server

Client Code, such asSevlets

Interface local Home

Objeto localEJBinterface local Transaction service,

Security servicePersistence service, etc...2: middleware

3: llamada bean1: invocar el objeto local

En ocasiones, el cliente se encuentra en la misma máquina que el contenedor de EJB!!

Desarrollo de un EJBCreación de un EJB Object local

48

public interface IKaixoLocal extend javax.ejb.EJBLocalObject {public String iepa() ;

}

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

Desarrollo de un EJBLa interfaz local

49

public interface IKaixoLocalHome extend javax.ejb.EJBLocalHome {KaixoLocal create() throws java.ejb.CreateException;

}

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

Desarrollo de un EJBLa interfaz local home

50

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

//Métodos de negociopublic String iepa() {

return “iepa guztioi!!!!”;}

}

Desarrollo de un EJBLa clase Bean

51

- Gestión del bean: Nombre, tipo, home interface

- Requisitos de Persistencia: Cómo almacenar los datos

- Requisitos Transacionales

- Requisitos de Seguridad

Los servicios middleware requeridos por el Bean (XML)

Desarrollo de un EJBDescriptor deployment independiente

52

Desarrollo de un EJBDescriptor 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>

<ejb-jar>

53

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

Desarrollo de un EJBDescriptor deployment independiente

54

Desarrollo de un EJBDescriptor deployment dependiente

• Describe parámetros no estándar.

• Depende del servidor de EJBs.– Referencia JNDI

55

Interfaces HomeRemota

Interfaces HomeLocal

Interfaces ObjectRemota

Interfaces ObjectLocal

DeploymentDescriptor independiente

DeploymentDescriptor dependiente

Creador fichero JAR Fichero Jar EJB

Clases EnterpriseBean

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

56

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 deploymentCompilar las clases del punto 1Crear al fichero Ejb-jar utilizando la utilidad jar. Este fichero

debe contener el fichero de deployment y los ficheros .classImplantar el fichero ejb-jarIniciar el contenedor de EJB (servidor)Crear un fichero .java que pruebe si funciona correctamente

Desarrollo de un EJBPasos a seguir

57

KaixoEJB Local Object

KaixoEJB Object

KaixoHome Object

KaixoLocal Home Object

Kaixo BeanClase Implementación

<<interface>>Kaixo Local

Interface

<<interface>>javax.ejb.SessionBean

<<interface>>javax.ejb.EJBLocalObject

<<interface>>javax.ejb.EJBObject

<<interface>>java.io.Serializable

<<interface>>Kaixo Remote

Interface

<<interface>>Kaixo HomeInterface

<<interface>>Kaixo Local HomeInterface

<<interface>>javax.ejb.EnterpriseBean

<<interface>>javax.ejb.EJBHome

<<interface>>javax.ejb.EJBLocalHome

Generado por nosotros utilizando las herramientas del vendedor

Suministrado por el proveedor del Bean (tenemos que escribirlo)

Viene con la distribución de EJB

Viene con la plataforma Java 2

<<interface>>javax.rmi.Remote

Desarrollo de un EJBModelo de Objetos

58

Objeto Home

EnterpriseBeans

EJB Container/Server

Cliente

InterfaceHome

Objeto EJBinterface local

7: delegar llamada al bean

1: localizar referencia objeto Home

JNDI

2: return referencia objeto Home

3: Crear nuevo objeto EJB

5: return referencia objeto EJB

4: Crear objeto EJB6: Invocación método

Servicio Naming (LDAP)

Desarrollo de un EJBEl cliente

59

– Crear el contexto inicial.• Los parámetros 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 través de la interfaz remota obtenida.

Desarrollo de un EJBEl cliente

60

Import javax.naming.Context;import javax.naming.InitialContext;import javax.util.Properties;public class KaixoClient {

public static void main(String[] args) throws Exception {//propiedades JNDIProperties props=System.getProperties();// Obtener el contexto JNDI inicial (ip, posicion árbol)InitialContext ctx=new InitialContext(props);

Parámetros de conexión al servidor JNDI

“Conexión” con el servidor JNDI

Desarrollo de un EJBEl código del cliente

61

Object obj=ctx.lookup(“KaixoHome”);// Casting

KaixoHome home=(KaixoHome )javax.rmi.PortableRemoteObject.narrow(obj, KaixoHome.class);

Kaixo kaixo=home.create();

System.out.println(kaixo.iepa());

}

Localización del objeto Home

Creación del objeto remoto

Invocación de los servicios del EJB

Desarrollo de un EJBEl código del cliente

62

Índice

Tecnología utilizadaArquitectura de componentesDesarrollo de un EJB Clasificación de EJB´s

Los Session BeanLos Entity Bean

63

CaracterísticasEjecutados en relación a un único clientePuede manejar datos en una BD subyacenteDe vida relativamente cortaNo se garantiza su persistencia en caso de caída del sistemaImplementa lógica y/o reglas de negocio

Ejemplos: validación tarjeta créditocarrito de la compra

Clasificacion de EJBSession Bean

64

CaracterísticasRepresenta datos en una base de datosSiempre es transaccionalSiempre compartido por múltiples usuariosExiste mientras existan los datos que subyacenSu persistencia es transparente en caso de caída del sistema

Encapsula objetos de negocioEjemplo: control de inventario de productos

Clasificacion de EJBEntity Bean

65

Account Instance

accountID=1ownerName=Ray Combsbalance=1000

AccountID ownerName balance

1 Ray Combs 1000

2 Bob Barker 1500

3 Monty Haul 2750

Tabla Account

Base de datos

Los Entity-bean

Account class

String accountIDString ownerNamedouble balance

deposit(amount)withdraw(amount)

66

Los Entity Bean

Cada objeto se caracteriza por una clave El desarrollador del Bean únicamente

se encarga de implementar los métodos deposit y withdrawEl sistema se encargará de manera automática de

actualizar la BD cuando haya habido alguna operación que haya modificado alguna de las variables del objeto cuenta

Account class

String accountIDString ownerNamedouble balance

deposit(amount)withdraw(amount)

67

LosSession Beans

Desarrollo de EJB’s

68

Clasificación de los Session BeanStateless y Stateful

Desarrollo de un Session BeanStateless y Stateful

Índice

69

• Tipos de Session Bean– Sin estado (stateless EJBs)

• Completamente transitorio• Mera pieza de maquinaria de negocio• No retiene información entre llamadas

– Con estado (stateful EJBs)• Mantiene “estado conversacional” con el cliente• “Extensión lógica en el servidor de la aplicación cliente• Pueden participar en transacciones

• Accedidos a través de su interfaz remota

Introducción a los Session Beans

70

Ejemplo I: Stateless beanBean sin estado

Objeto Home

EnterpriseBeans

EJB Container/Server

InterfaceHome

Objeto EJB

InterfaceRemota

Gestión de PasswordsisLoginValid(login, passwd)

isLoginValid(login, passwd)

isLoginValid(login, passwd)

71

4 partes requeridas al definir un bean:

– La interfaz remota. Extiende javax.ejb.EJBObject

– La interfaz “Home”. Extiende javax.ejb.EJBHome

– La definición de la clase del Bean

– Meta-data (descriptores y otra info. de configuración)

Ejemplo I: Stateless beanBean sin estado

72

• Creación de la interfaz remota– Extiende javax.ejb.EJBObject

• Esta interfaz define los servicios ofrecidos por el EJB.– Todos los parámetros deben ser serializables

import javax.ejb.*;import java.rmi.*;public interface PasswordManager extends EJBObject {

public Boolean isLoginValid(String login, String password)throws java.rmi.RemoteException;

}

Ejemplo I: Stateless beanLa interfaz remota

73

• Creación 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 métodos create():

• Invocan a los métodos ejbCreate() de la clase bean• Deben corresponderse en número y tipo de argumentos a los métodos

ejbCreate() de la clase bean.• En lugar de devolver void devuelven una instancia de la interfaz remota• Lanza cualquier excepción que lance sus homónimos en la clase bean,

y debe lanzar javax.ejb.CreateException– Los métodos remove() no deben ser sobreescritos.

Ejemplo I: Stateless beanLa interfaz home

74

La interfaz homeRelación entre create() y ejbCreate()

Objeto HomeSession Bean

Instance

EJB Container/Server

Cliente

Objeto EJB

2:ejbCreate()1: create

6: return referencia objeto EJB

5: Crear objeto EJB(id objeto)

4: return idobjeto

75

Debe implementar javax.ejb.SessionBean, que proporciona losmétodos:

import javax.ejb.*;import java.rmi.*;public class PasswordManagerBean implements SessionBean {public boolean isLoginValid(String login, String password) throws

RemoteException {}public void ejbCreateejbCreate() throws RemoteException {}public void ejbActivateejbActivate() throws RemoteException {}public void ejbPassivateejbPassivate() throws RemoteException {}public void ejbRemoveejbRemove() throws RemoteException {}public void setSessionContextsetSessionContext (SessionContext ctx) throws RemoteException {}

}

– Estos métodos son invocados por el contenedor de EJBs

Ejemplo I: Stateless beanLa clase Bean

76

Objeto EJB

Bean

EJB Container/Server

InterfaceRemota

Cliente

Bean

Bean

BeanInvoke()

Stateless Bean Pool

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

Gestion de los BeansStateless Bean

77

• Creación de la clase bean (II)– Además se deben implementar uno o más métodos ejbCreate():

• Es el mecanismo de inicialización del EJB. Puede estar parametrizado.

– También debe implementar uno o más métodos 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;}...}

Ejemplo I: Stateless beanLa clase Bean

78

Objeto Home

EnterpriseBeans

EJB Container/Server

InterfaceHome

Objeto EJB

InterfaceRemota

Gestión de Passwords

isLoginValid(passwd)changePass(oldPass,newPass)

Ejemplo II: Stateful beanLa clase Bean

isLoginValid(passwd)changePass(oldPass,

newPass)

isLoginValid(passwd)changePass(oldPass,

newPass)

79

4 partes requeridas al definir un bean:

– La interfaz remota. Extiende javax.ejb.EJBObject

– La interfaz “Home”. Extiende javax.ejb.EJBHome

– La definición de la clase del Bean

– Meta-data (descriptores y otra info. de configuración)

Ejemplo II: Stateful beanBean con estado

80

• Creación de la interfaz remota– Extiende javax.ejb.EJBObject

• Esta interfaz define los servicios ofrecidos por el EJB.– Todos los parámetros deben ser serializables

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;

}

Ejemplo II: Stateful beanLa interfaz remota

81

• Creación de la interfaz home– Extiende javax.ejb.EJBHome

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

throws CreateException, RemoteException}

– Los métodos create():• Los metodos create invocan a los métodos ejbCreate() de la clase

bean.• Deben corresponderse en número y tipo de argumentos a los métodos

ejbCreate() de la clase bean.• En lugar de devolver void devuelven una instancia de la interfaz remota• Lanza cualquier excepción que lance sus homónimos en la clase bean,

y debe lanzar javax.ejb.CreateException– Los métodos remove() no deben ser sobreescritos.

Ejemplo II: Stateful beanLa interfaz home

82

Debe implementar javax.ejb.SessionBean, que proporciona losmétodos:

import javax.ejb.*;import java.rmi.*;public class PasswordManagerBean implements SessionBean {String name;public boolean isLoginValid(String password) throws

RemoteException {}public void ejbCreateejbCreate(String name) throws RemoteException {}public void ejbCreateejbCreate() throws RemoteException {}public void ejbActivateejbActivate() throws RemoteException {}public void ejbPassivateejbPassivate() throws RemoteException {}public void ejbRemoveejbRemove() throws RemoteException {}public void setSessionContextsetSessionContext (SessionContext ctx) throws

RemoteException {}}

– Estos métodos son invocados por el contenedor de EJBs

Ejemplo II: Stateful beanLa clase Bean

83

• Creación de la clase bean (II)– Además se deben implementar uno o más métodos ejbCreate():

• Es el mecanismo de inicialización del EJB. Puede estar parametrizado.

– También debe implementar uno o más métodos 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;}...}

Ejemplo II: Stateful beanLa clase Bean