a nivel de diseño - interoperable databases groupsiul02.si.ehu.es/~alfredo/iso/06introj2ee.pdf ·...
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
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
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
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
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)
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