Documentos de Académico
Documentos de Profesional
Documentos de Cultura
A nivel de clase:
Clases y algoritmos JGL
A nivel de diseo
Patrones de diseo
A nivel de arquitectura
Arquitectura J2EE
Introduccin a la arquitectura
J2EE
ndice
Introduccin
Servidor de aplicaciones
Arquitectura de aplicacin J2EE
Desarrollo de EJBs (parte 2)
Introduccin
Objetivo
Introduccin
Dnde lo implementamos?
Heterogeneidad:
Plataforma: Unix/Linux, Windows, Mac/OS
Lenguaje lgica: Java, C++, c#, Perl
Fabricante: Oracle, IBM, HP, Microsoft
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
Cliente web
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
12
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
Objeto remoto
Interfaz remota
Interfaz remota
Stub
Skeleton
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
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
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
NIS Service
Provider
File System
Service Provider
22
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
Localizar el contexto
objeto del rbol y la mquina
24
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
26
ndice
Tecnologa utilizada
Qu son los EJBs ?
Desarrollo de un EJB
Clasificacin de EJBs
Los Session Bean
Los Entity Bean
27
Web container
Firewall
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
Servidor J2EE
29
EJB Container
API Transacciones
Objeto remoto
API Seguridad
Cliente
Interfaz remota
Servicios
Arquitectura
API BD
Interfaz remota
Stub
Red
Skeleton
Arquitectura Corba
Objeto remoto
API Transacciones
API Seguridad
Servicios
API BD
Cliente
Interfaz remota
Interfaz remota
Stub
Red
Skeleton
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
}
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
39
Desarrollo de un EJB
Creacin de un EJB Object remoto
EJB Container/Server
Objeto Home
interface Home
JNDI
Enterprise
Beans
Objeto EJB
interface remota
Servicio Naming (LDAP)
40
42
Desarrollo de un EJB
La interfaz remota
Indica qu mtodos del Bean se exportan
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.
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
45
Desarrollo de un EJB
Invocacin a un Bean remoto
EJB Container/Server
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...
Red
Stub
Enterprise
Beans
Skeleton
3: unmarshall
46
Desarrollo de un EJB
Creacin de un EJB Object local
EJB Container/Server
Objeto local
Home
3: llamada bean
interface local
Enterprise
Beans
Objeto local
EJB
Transaction service,
Security service
2: middleware Persistence service, etc...
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
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
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
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
54
Desarrollo de un EJB
El fichero de despliegue. El fichero .jar
Interfaces Home
Remota
Interfaces Home
Local
Creador fichero JAR
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
<<interface>>
javax.ejb.EJBLocalHome
<<interface>>
javax.ejb.SessionBean
<<interface>>
Kaixo Remote
Interface
<<interface>>
Kaixo Home
Interface
<<interface>>
Kaixo Local
HomeInterface
Kaixo Bean
Clase Implementacin
Kaixo
EJB Local Object
Kaixo
EJB Object
Kaixo
Home Object
Kaixo
Local Home Object
57
Desarrollo de un EJB
El cliente
EJB Container/Server
Interface
Home
Objeto Home
Cliente
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
58
Desarrollo de un EJB
El cliente
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();
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
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
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
66
Desarrollo de EJBs
67
ndice
Clasificacin de los Session Bean
Stateless y Stateful
68
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
71
import javax.ejb.*;
import java.rmi.*;
public interface PasswordManager extends EJBObject {
public Boolean isLoginValid(String login, String password)
throws java.rmi.RemoteException;
}
La interfaz home
Relacin entre create() y ejbCreate()
EJB Container/Server
2:ejbCreate()
1: create
Objeto Home
Cliente
4: return id
objeto
Session Bean
Instance
Objeto EJB
74
Bean
Interface
Remota
Bean
Objeto EJB
Bean
Invoke()
Bean
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
79
81