Download Aplicaciones Web Servidor

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
2
Aplicaciones Web Servidor
Introducción a la arquitectura
J2EE
3
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
1
Índice
§
§
§
§
§
Introduccion
Servidor de aplicaciones
Arquitectura de aplicación J2EE
Ejemplo de aplicación J2EE
Desarrollo de EJB’s (parte 2)
4
Introducción
Objetivo
Desarrollar aplicaciones de
internet utilizando la plataforma
J2EE – Java 2 Enterprise Edition
5
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
2
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 ningun sofware
• Unicamente está compuesto
especificaciones
por
un
conjunto
de
• Los
fabricantes
desarrollan
servidores
de
aplicaciones que cumplen las espeficicaciones J2EE
– Permite la migracion de un fabricante a otro fácilmente.
6
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
7
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
3
Introducción
J2EE: Distribución básica multinivel
• Nivel cliente (Client tier)
– Interfaz de usuario (y opcional parte lógica)
• Nivel medio(Middle tier)
– Lógica de negocio: parte principal de la
aplicación. Necesita de:
• servicios especializados para la realización de
determinadas tareas:
– Monitores transacciones
– acceso a BD
– sistemas de nombres
– Procesado de la presentación: servlets/JSP
• Nivel de datos (Back-end tier)
– Bases de datos o Enterprise Information Systems
8
Introducción
El API de J2EE
•
•
•
•
•
•
•
•
•
•
•
JDBC 2.0
Enterprise Java Beans (EJB) 2.0
Java Servlets 2.3
Java Server Pages (JSP) 1.2
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
9
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
4
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:
–
–
–
–
–
Instalacion de componentes
Comunicación
Sincronización de acceso concurrente
Preparacion de un entorno seguro
Seguridad en las transacciones
10
Servidor de aplicaciones
Servicios
• Conexión y acceso a BD
• Facilidad de mapear:
– Clases è Tablas
– Instancias èregistros.
• Consistencia de datos: control de
acceso concurrente a los datos.
• Transacciones: agrupación de
operaciones
• Interaccion con el usuario:
autentificacion, control de acceso
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
11
5
Servidor de aplicaciones
Servicios ofrecidos
•
Servicio de nombres: acceso a componentes y recursos a través de
nombres lógicos
•
Servicio de transacciones: ejecución de una serie de pasos de forma
atómica y aislada
•
Servicio de seguridad: directivas de seguridad para recursos protegidos
•
Persistencia: almacenamiento persistente de objetos y estados de objetos,
normalmente en BD relacionales
•
Comunicación: distintas técnicas de comunicación
– Java Naming and Directory Inteface(JNDI)
– Java Transaction Service (JTS)
– Java Authentication and Authorization Service(JAAS)
– JDBC
– 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.
12
Servidor de aplicaciones
no funcional
• Eficiencia: tiempo de respuesta rápida entre
los distintos componentes
• Escalabilidad: posibilidad de incorporar
nuevos servidores, distribución de carga
• Disponibilidad: seguridad frente a caidas de
la aplicación (ideal disponibilidad 24*7),
sistemas de tolerancia a fallos, clustering de
servidores y datos
• Modularidad: diseño en niveles
(presentación, lógica y datos)
13
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
6
Arquitectura de aplicación J2EE
Nivel (es) servidor de aplicación
Nivel Cliente
Web container
Cliente web
Nivel Datos
Bases de datos
EJB container
Aplicaciones legadas
Servlets, JSP
Cliente Java
Servicios y API’s,
JNDI, RMI-IIOP…
Servicios y API’s,
JNDI, RMI-IIOP…
J2EE
J2EE
Enterprise JavaBeans
Servicios y API’s,
JNDI, RMI-IIOP…
Sistemas ERP
J2EE
14
Arquitectura de aplicación J2EE
• División lógica del desarrollo de
aplicaciones en diferentes niveles:
– Presentación
– Lógica
– Datos
• El estandar J2EE nos da el soporte
necesario para este tipo de desarrollos.
15
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
7
Arquitectura de aplicación J2EE
Capa de cliente - Clientes Stand-alone
– Se ejecutan sin necesidad de un navegador
– Necesitan ser instalados en cada cliente
• Las actualizaciones son más costosas
– Tecnologías
• Clientes Java (Swing o AWT)
• Clientes no Java
– C++, VB
– La comunicación con el servidor deberá realizarse
mediante RMI-IIOP
• Se recomienda cuando la interacción es compleja o se
trata de una aplicación de intranet
16
Arquitectura de aplicación J2EE
Capa de cliente - Clientes Web
J2EE no establece restricciones en el tipo de clientes:
• El navegador es el cliente universal.
• La interfaz se genera en el servidor.
»Se elimina el problema de la actualización
del cliente.
• Tecnologías:
–HTML
–XML
–Applets
–Todas aquellas soportadas por los
navegadores
»Scripting, Plug-in...
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
17
8
Arquitectura de aplicación J2EE
Capa de datos - Enterprise Information System
• Es la capa en la que se almacenan los datos.
• Incluye:
– SGBD.
– ERP (Enterprise Resource Planning).
– Sistemas legados.
– No impone restricciones en cuanto a las fuentes
de información.
18
Arquitectura de aplicación J2EE
Capa intermedia
• Es el núcleo de la especificación J2EE.
• Se dividen las tecnologías en tres categorías:
– Servicios:
• Funcionalidades que simplifica el desarrollo de los
componentes
– Componentes:
• De presentación y de lógica
– Comunicación:
• Mecanismos de comunicación entre cliente y servidor
– Protocolos de Internet (HTTP,TCP/IP...)
– Invocación Remota (RMI,IIOP...)
19
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
9
Arquitectura de aplicación J2EE
Capa intermedia - Servicios
• Servicios
– Despliegue (Instalación):
• Se establecen formatos de empaquetado que
permiten la instalación automática en cualquier
servidor J2EE
• Permite configurar los componentes al instalarlos
– Transacciones
– Seguridad:
• Control de acceso a los recursos
– Localización:
• Permite a los componentes localizar recursos sin
necesidad de tener codificar en el código la
localización de los mismos
20
Arquitectura de aplicación J2EE
Capa intermedia - Componentes
•
•
•
Modulos donde se implementa la lógica de negocio y presentación
Todo componente debe ejecutarse dentro de un container
Los containers ofrecen:
– el entorno de ejecución para los componentes
– Ofrecen una serie de servicios a utilizar por los componentes
– Heramientas adicionales(Deployment tools) para la instalación y
configuración de los componentes
Applet container
Servlet/JSP container
JSP Tools
EJB container
Enterprise JavaBeans
Servlet Engine
Applets
JSP
JSP
JSP
Gestion recursos
Servicios
Servicios
21
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
10
Ejemplo: Aplicación banco en c/s
Cliente
Cliente (AWT)
Datos
Middleware
Web Container
EJB Container
Servlets, JSP
SGBD
RMI-IIOP
JDBC
22
Ejemplo: Ejemplo de desarrollo en n niveles
Cliente
Datos
Middlware
Componente
cuenta cliente
Mac
Unix
Java
Presentación
Windows
Browser
EIS
Componente
banco
Componente
movimiento
Driver BD
Conector
SGBD
Servicio Transacciones
23
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
11
Ejemplo: Aplicación banco en web
Cliente
Datos
Middlware
Web Container
Browser
EJB Container
Servlets, JSP
HTTP
SGBD
JDBC
RMI-IIOP
JDBC
24
Resumen arquitectura J2EE
25
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
12
Aplicación J2EE desde cliente Java
26
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,
concentrandose 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
27
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
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
29
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
14
Tecnología utilizada
• RMI-IIOP: Invocación de objetos remotos
mensaje
Cliente
mensaje
EJB
Internet
• JNDI: Localización de los objetos remotos
30
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
31
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
15
Invocación remota de objetos: RMI-IIOP
Separación interfaz y lógica
La interfaz (interfaz remota):
• Exporta la signatura de los métodos disponibles.
• Oculta la implementación a los clientes
• Permite la transparencia local/remota
• La información que se va a ofrecer al cliente.
• Hereda la interfaz java.rmi.Remote
La implementación (la lógica)
El código de la clase, donde describe la lógica
32
Invocación remota de objetos: RMI-IIOP
Ejemplo: la interfaz Hello World
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 IHelloWorld extend Remote {
public String hello() throws RemoteException;
}
33
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
16
Invocación remota de objetos: RMI-IIOP
Ejemplo: la implementación Hello World
import java.rmi.RemoteException
import java.rmi.PortableRemoteObject;
public class HelloWorld extend PortableRemoteObject
implements IHelloWorld {
public HelloWorld throws Exception, RemoteException {
super();
}
public String hello() throws RemoteException {
return “hello world”;
}
}
34
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
35
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
17
Búsqueda remota de objetos: JNDI
Servicios de naming y directory
2: Buscar el objeto en un árbol JNDI conocido
Cliente Code
Initial Context
3: return Stub
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 #3
36
Máquina #2
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
37
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
18
Búsqueda remota de objetos: JNDI
Servicios de naming y directory
Import javax.naming.*;
public class Startup {
public static void main(Stringargs[]) Throws Exception {
// Crear una instancia del objeto
HelloWorld helloInstance= new HelloWorld();
// Localizar el objeto en el árbol JNDI
InitialContext ctx=new InitialContext(System.getProperties());
ctx.rebind(“HelloWorld”,helloInstance);
synchonized(helloWorld) {
helloWorld.wait();
}
}
}
38
Búsqueda remota de objetos: JNDI
Servicios de naming y directory
Import javax.naming.*;
import java.rmi.*;
public class Client {
public static void main(Stringargs[]) Throws Exception {
// Buscar el Stub através del JNDI
Context ctx=new InitialContext(System.getProperties());
Object remoteObject=ctx.lookup(“HelloWorld”);
// Casting
IHelloWorld
ihelloworld=(IHelloWorld)javax.rmi.portableObject.narrow(rem
oteObject,IHelloWorld.class);
System.out.printl(ihelloworld.hello());
}
39
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
19
Índice
§
§
§
§
§
§
Tecnología utilizada
Qué son los EJB’s ?
Desarrollo de un EJB
Clasificación de EJB´s
Los Session Bean
Los Entity Bean
40
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 gestion del
ciclo de vida.
• Una aplicación puede tener uno o varios EJB’s en
uno o varios contenedores EJB
41
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
20
Instalación típica J2EE
Web container
Servlets
JSP
EJB container
Enteprise
Beans
Firewall
Cliente app. local
Servlets
JSP
Bases de datos
JDBC
Enteprise
Beans
Conectores
Cliente web
browser
Aplicaciones legadas
RMII-IIOP
Enteprise
Beans
Sistemas ERP
RMI-IIOP
Cliente Applet
Messaging(EJB 2.0, JMS, EJB 2.1)
Servidor J2EE
42
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,........
43
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
21
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
44
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
}
45
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
22
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.
46
Arquitectura J2EE
Middleware implícito
XML deployment
<transaction>…
<security>….
<data>….
Cliente
API Transacciones
Objeto remoto
API Seguridad
Interfaz remota
Servicios
EJB Container
API BD
Interfaz remota
Stub
Red
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
Skeleton
47
23
Arquitectura J2EE
Middleware implícito
EJB Container
Cliente
Interfaz remota
API Transacciones
Objeto intercpt
API Seguridad
Interfaz remota
Servicios
Objeto remoto
API BD
Interfaz remota
Stub
Red
Skeleton
48
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
49
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
24
Arquitectura
Middleware implícito: Ventajas
1. Fácil de escribir: Unicamente 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.
50
Índice
§
§
§
§
§
§
Tecnología utilizada
Arquitectura de componentes
Desarrollo de un EJB
Clasificación de EJB´s
Los Session Bean
Los Entity Bean
51
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
25
Desarrollo de un EJB
La invocación
Código cliente, como
Sevlets o Applets
EJB Container/Server
5: Devolución resultado
2: Invocación
middleware API
1: Invocación método
Transaction service,
Security service
Persistence service, etc...
Objeto EJB
interface remota
4: Resultado método
3: Invocación Bean
Enterprise
Bean
El Contenedor de EJB actúa como el nivel de indirección entre el
código del cliente y el bean. Este nivel de indirección se manifiesta
52
a través del objeto contenedor Objecto EJB.
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
53
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
26
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 Hello extend javax.ejb.EJBObject {
public String hello() throws java.rmi.RemoteException;
}
54
Desarrollo de un EJB
El objeto Home
Cómo obtiene el cliente referencias a los objetos EJB ?
El cliente no puede instanciar un objeto EJB
directamente porque el objeto EJB está en una máquina
diferente a la que esta el cliente.
Además los EJB’s promueven la transparencia de
localización, por lo que los clientes nunca deben conocer
la ubicación exacta del EJB.
55
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
27
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 interface home se indican los parámetros necesarios (de los
métodos constructores) para instanciar los objetos EJB
56
Desarrollo de un EJB
El objeto Home
• Crea/elimina las instancias de EJB Objects.
• Propietario de cada contenedor
• Sus tareas consisten en balanceo de cargas,
monitorización del sistema.
• Son generadas automáticamente por
herramientas proporcionadas servidor de EJBs
57
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
28
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 HelloHome extend javax.ejb.EJBHomeObject {
Hello create() throws java.rmi.RemoteException,
java.ejb.CreateException;
}
58
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
Objeto EJB
Transaction service,
Security service
5: middleware Persistence service, etc...
4:invocar al Objeto EJB
Red
Stub
Enterprise
Beans
2: marshall
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
Skeleton
3: unmarshall
59
29
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!!
60
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 HelloLocal extend javax.ejb.EJBLocalObject {
public String hello() ;
}
61
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
30
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 HelloLocalHome extend javax.ejb.EJBLocalHome {
HelloLocal create() throws java.ejb.CreateException;
}
62
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
63
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
31
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>
<ejb-jar>
64
Desarrollo de un EJB
Descriptor deployment independiente
<ejb-jar>
<enterprise-beans>
<session>
<ejb-name> Hello </ejb-name>
<home> examples.HelloHome </home>
<remote> examples.Hello </remote>
<local-home> examples.HelloLocalHome </local- home>
<local> examples.HelloLocal </local>
<ejb-class> examples.HelloBean </ejb-class>
<session-type> Stateless </session-type>
<transaction-type> Container </transaction-type>
<session>
<enterprise-beans>
<ejb-jar>
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
65
32
Desarrollo de un EJB
Descriptor deployment dependiente
• Describe parámetros no estándar.
• Depende del servidor de EJBs.
– Referencia JNDI
66
Desarrollo de un EJB
La clase Bean
public class HelloBean 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 hello() {
return “Hello, World!”;
}
67
}
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
33
Desarrollo de un EJB
El contexto
EJB Container/Server
2: Lo almacena en
una variable privada
1: Da el contexto al Bean
Objeto EJB
3: Invocación método
Objeto EJB
Contexto
Enterprise
Bean
4: Consulta al contenedor
por información de contexto
Ejemplo: El bean necesita saber quien es el usuario que le
está invocando
68
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
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
Deployment
Descriptor
dependiente
69
34
Desarrollo de un EJB
El fichero de despliegue. El fichero .jar
• Construir el JAR
– El JAR contiene:
• Clases de implementación del Bean, interfaz Home y
Remote.
• Descripores de despliegue: estándar y específico.
– Situados en el directorio de clases:
• jar -cvf <archivo-jar>.jar *
– El fichero jar tiene la siguiente estrucutura:
– /<clases del EJB>
– /META-INF/ejb-jar.xml
70
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
71
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
35
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>>
Hello World
Local Interface
<<interface>>
Hello World
Remote Interface
<<interface>>
Hello World
Home Interface
<<interface>>
Hello World
Local HomeInterface
Hello World Bean
Clase Implementación
Suministrado por el proveedor del Bean (tenemos que escribirlo)
Hello World
EJB Local Object
Hello World
EJB Object
Hello World
Home Object
Hello World
Local Home Object
72
Generado por nosotros utilizando las herramientas del vendedor
Desarrollo de un EJB
El cliente
EJB Container/Server
Interface
3: Crear nuevo objeto EJB 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)
73
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
36
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.
74
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 HelloClient {
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
75
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
37
Desarrollo de un EJB
El código del cliente
Localización del objeto Home
Object obj=ctx.lookup(“HelloHome”);
// Casting
HelloHome home=(HelloHome)
javax.rmi.PortableRemoteObject.narrow(
obj, HelloHome.class);
Hello hello=home.create();
Creación del objeto remoto
System.out.println(hello.hello());
}
Invocación de los servicios del EJB
76
Índice
§
§
§
§
Tecnología utilizada
Arquitectura de componentes
Desarrollo de un EJB
Clasificación de EJB´s
§ Los Session Bean
§ Los Entity Bean
77
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
38
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
78
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
79
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
39
Los Entity-bean
Account class
String accountID
String ownerName
double balance
AccountID
ownerName
balance
1
Ray Combs
1000
2
Bob Barker
1500
3
Monty Haul
2750
deposit(amount)
withdraw(amount)
Account Instance
Tabla Account
accountID=1
ownerName=Ray Combs
balance=1000
Base de datos
80
Los Entity Bean
Account class
String accountID
String ownerName
double balance
deposit(amount)
§ El desarrollador del Bean únicamente
withdraw(amount)
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
81
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
40
Desarrollo de EJB’s
Los Session Beans
82
Índice
§ Clasificación de los Session Bean
§ Stateless y Stateful
§ Desarrollo de un Session Bean
§ Stateless y Stateful
83
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
41
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
84
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
85
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
42
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)
86
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
87
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
43
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 .
88
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
89
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
44
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) thr ows
Rem oteException {}
public void ejbCreate () throws RemoteException {}
public void ejbActivate
ejbActivate() throws RemoteException {}
public void ejbPassivate () throws RemoteException {}
public void ejbRemove () throws RemoteException {}
public void setSessionContext (SessionContext ctx) throws RemoteException {}
}
– Estos métodos son invocados por el contenedor
de EJBs
90
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
91
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
45
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;
}
92
...
}
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)
93
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
46
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)
94
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
95
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
47
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 .
96
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
ejbCreate(String name) throws RemoteException {}
public void ejbCreate
ejbCreate() throws RemoteException {}
public void ejbActivate
ejbActivate() throws RemoteException {}
public void ejbPassivate
ejbPassivate() throws RemoteException {}
public void ejbRemove
ejbRemove() throws RemoteException {}
public void setSessionContext (SessionContext ctx ) throws
RemoteException {}
}
– Estos métodos son invocados por el contenedor
de EJBs
97
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
48
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;
98
}
...}
Ingeniería del Software 2004/2005
Dpto. Lenguajes y Sistemas Informáticos
49