Download de componentes software

Document related concepts
no text concepts found
Transcript
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
1
Aplicaciones Web Servidor
Introducción a la arquitectura
J2EE
2
Índice
ƒ
ƒ
ƒ
ƒ
Introducción
Servidor de aplicaciones
Arquitectura de aplicación J2EE
Desarrollo de EJB’s (parte 2)
3
Introducción
Objetivo
Desarrollar, implantar y ejecutar
componentes de lógica de negocio
en la plataforma J2EE – Java 2
Enterprise Edition
4
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
especificaciones
por
un
conjunto
de
• Los
fabricantes
desarrollan
servidores
de
aplicaciones que cumplen las especificaciones J2EE
– Permite la migración de un fabricante a otro fácilmente.
5
Introducción
J2EE: Distribución básica multinivel
Nivel (es) servidor de aplicación
Presentación
Nivel Cliente
Apps
API
Servicios
Nivel Datos
Lógica
API
Servicios
6
Introducción
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 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
8
Servidor de aplicaciones
Servicios 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.
9
Arquitectura de aplicación J2EE
Nivel Cliente
Cliente web
Nivel (es) servidor de aplicación
Web container
Nivel Datos
EJB container
Bases de datos
Aplicaciones legadas
Cliente Java
Servicios y API’s,
JNDI, RMI-IIOP…
J2EE
Servlets, JSP
Servicios y API’s,
JNDI, RMI-IIOP…
J2EE
Enterprise JavaBeans
Servicios y API’s,
JNDI, RMI-IIOP…
Sistemas ERP
J2EE
10
Arquitectura J2EE
11
Aplicación J2EE desde cliente Java
12
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
13
Aplicaciones Web Servidor
Desarrollo de EJB’s
Índice
ƒ
ƒ
ƒ
ƒ
ƒ
Tecnología utilizada
Arquitectura
Desarrollo de un EJB
Clasificación de EJB´s
Los Session Bean
15
Tecnología utilizada
• RMI-IIOP: Invocación de objetos remotos
mensaje
Cliente
mensaje
Internet
EJB
• JNDI: Localización de los objetos remotos
16
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
Objeto remoto
Interfaz remota
Interfaz remota
Stub
Skeleton
La tarea mas importante de los Stubs y Skeleton consiste en
serializar los objetos que se envían como parámetro
17
Invocación remota de objetos: RMI-IIOP
Separación interfaz y lógica
ƒ Para construir y usar una clase Kaixo remota con el método
iepa(String n) debemos:
9Definir 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
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 máquina 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
Invocación 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
// utilizarán esta interfaz para invocar el objeto remoto
public interface IKaixo extend Remote {
public String iepa(String n) throws RemoteException;
}
20
Invocación remota de objetos: RMI-IIOP
Ejemplo: la implementación 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
Búsqueda remota de objetos: JNDI
Servicios 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
JNDI Client API
Service Provider Interface
LDAB Service
Provider
NIS Service
Provider
File System
Service Provider
22
Búsqueda 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: Invocación método
remoto
RMI-IIOP
Stub
Máquina #1
5: Delegar
RMI-IIOP
Skeleton
1: Almacenar el objeto
remoto en el árbol JNDI
6: Delegar
RMI-IIOP
Remote Object
Máquina #2
Máquina #3
23
Búsqueda 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 máquina
¾
Ubicar el objeto en el contexto
24
Búsqueda 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
Búsqueda 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 através 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
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
Tecnología utilizada
Qué son los EJB’s ?
Desarrollo de un EJB
Clasificación de EJB´s
Los Session Bean
Los Entity Bean
27
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
28
Instalación típica 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 explícito (anterior a J2EE)
EJB Container
API BD
Cliente
Interfaz remota
Interfaz remota
Stub
Red
Skeleton
CORBA: Invocación explícita a los servicios middleware a
31
través de un API dentro del código del objeto remoto
Arquitectura Corba
Middleware explícito: 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 transacción
// 3: Invocar al API del middleware para cargar las tuplas de la BD
4: 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
}
32
Arquitectura Corba
Middleware 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.
33
Arquitectura J2EE
Middleware implícito
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 implícito
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 implícito: Arquitectura EJB
1. Escribir el objeto distribuido que contiene únicamente la lógica de
negocio. No implementar invocación a los servicios del middleware
transfer (Cuenta cuenta1, Cuenta cuenta2, long cantidad) {
// 1: eliminar la cantidad de una cuenta y añadirlo 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 implícito: Ventajas
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.
37
RMI y EJB’s
38
Arquitectura completa EJB’s
39
Desarrollo de un EJB
Creación 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: Devolución 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 parámetros necesarios (de los
métodos constructores) para crear los objetos EJB
40
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 cliente
ƒ Interfaz 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
41
Desarrollo de un componente EJB
1. Escribir las interfaces componente y home
2. Escribir la clase bean con la implementación
de los métodos 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é 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
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 invocación 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 métodos para crear/destruir objetos EJB. La
implementación 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
Invocación 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
Creación 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 máquina 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;}
}
//Métodos de negocio
public String iepa() {
return “iepa guztioi!!!!”;
}
50
Desarrollo de un EJB
Descriptor deployment independiente
Los servicios middleware requeridos por el Bean (XML)
- Gestión del bean: Nombre, tipo, home interface
- Requisitos de Persistencia: Cómo 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 parámetros no estándar.
• 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 distribución de EJB
<<interface>>
Kaixo Local
Interface
<<interface>>
Kaixo Remote
Interface
<<interface>>
Kaixo Home
Interface
<<interface>>
Kaixo Local
HomeInterface
Kaixo Bean
Clase Implementación
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: Invocación método
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 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.
59
Desarrollo de un EJB
El código del cliente
Import javax.naming.Context;
import javax.naming.InitialContext;
import javax.util.Properties;
Parámetros de conexión 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);
“Conexión” con el servidor JNDI
60
Desarrollo de un EJB
El código del cliente
Localización del objeto Home
Object obj=ctx.lookup(“KaixoHome”);
// Casting
KaixoHome home=(KaixoHome )
javax.rmi.PortableRemoteObject.narrow(
obj, KaixoHome.class);
Kaixo kaixo=home.create();
Creación del objeto remoto
System.out.println(kaixo.iepa());
}
Invocación de los servicios del EJB
61
Índice
ƒ
ƒ
ƒ
ƒ
Tecnología utilizada
Arquitectura de componentes
Desarrollo de un EJB
Clasificación de EJB´s
ƒ Los Session Bean
ƒ Los Entity Bean
62
Clasificacion de EJB
Session Bean
Características
Ejecutados en relación a un único cliente
Puede manejar datos en una BD subyacente
De vida relativamente corta
No se garantiza su persistencia en caso de caída del sistema
Implementa lógica y/o reglas de negocio
Ejemplos: validación tarjeta crédito
carrito de la compra
63
Clasificacion de EJB
Entity Bean
Características
Representa datos en una base de datos
Siempre es transaccional
Siempre compartido por múltiples usuarios
Existe mientras existan los datos que subyacen
Su persistencia es transparente en caso de caída del
sistema
Encapsula objetos de negocio
Ejemplo: control de inventario de productos
64
Los Entity-bean
Account class
AccountID
ownerName
balance
1
Ray Combs
1000
2
Bob Barker
1500
3
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 métodos
deposit y withdraw
ƒ El 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
66
Desarrollo de EJB’s
Los Session Beans
67
Índice
ƒ Clasificación de los Session Bean
ƒ Stateless y Stateful
ƒ Desarrollo de un Session Bean
ƒ Stateless y Stateful
68
Introducción a los Session Beans
• 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
69
Ejemplo I: Stateless bean
Bean sin estado
EJB Container/Server
Interface
Home
Gestión 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 definición de la clase del Bean
– Meta-data (descriptores y otra info. de configuración)
71
Ejemplo I: Stateless bean
La interfaz remota
• Creación 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 parámetros deben ser serializables
72
Ejemplo I: Stateless bean
La interfaz home
• 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.
73
La interfaz home
Relación 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
métodos:
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 métodos 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
• 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;
}
77
...
}
Ejemplo II: Stateful bean
La clase Bean
EJB Container/Server
Interface
Home
Gestión 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 definición de la clase del Bean
– Meta-data (descriptores y otra info. de configuración)
79
Ejemplo II: Stateful bean
La interfaz remota
• Creación 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 parámetros deben ser serializables
80
Ejemplo II: Stateful bean
La interfaz home
• 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
PasswordManager 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.
81
Ejemplo II: Stateful bean
La clase Bean
Debe implementar javax.ejb.SessionBean, que proporciona los
métodos:
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 métodos son invocados por el contenedor
de EJBs
82
Ejemplo II: Stateful bean
La clase Bean
• 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;
83
}
...}