componentes en j2ee - grasia.fdi.ucm.esgrasia.fdi.ucm.es/jpavon/docencia/dso/ejb.pdf · 1...
TRANSCRIPT
1
Componentes en J2EE
Curso de Sistemas DistribuidosFacultad de Informática
Juan Pavón Mestras
Dep. Sistemas Informáticos y ProgramaciónUniversidad Complutense Madrid
© Juan Pavón Mestras, UCM 2001-02 J2EE 2
Componentes software
n Se habla de ellos desde hace 30 años, como solución a la crisis del software (McIlroy, 1968)
n Toda ingeniería madura acaba por introducir componentesn Por ejemplo, el hardware, la mecánica, la arquitectura,
...
2
© Juan Pavón Mestras, UCM 2001-02 J2EE 3
¿Qué es software basado en componentes?
Componentes software son:n unidades binarias de producción, adquisición e despliegue
independientes, n que interaccionan para conseguir formar un sistema
Integración robusta
Múltiples suministradores lego
© Juan Pavón Mestras, UCM 2001-02 J2EE 4
¿Qué es software basado en componentes?
n Esto es posible hoy día gracias a:n La tecnología de objetos
• Lenguajes de programación: C++, Java• Análisis y diseño: Booch, OMT, UML, ...• Bases de datos orientadas a objetos
n Internet• Software distribuido en la red• XML
n ¡Ya existen modelos de componentes!• EJBs• CCM• COM
3
© Juan Pavón Mestras, UCM 2001-02 J2EE 5
Definición de componente software
n Szyperski y Pfister 97 (ECOOP 96):A software component is a unit of composition with contractually specified interfaces and explicit context dependencies only. A software component can be deployed independently and is subject to composition by third parties
© Juan Pavón Mestras, UCM 2001-02 J2EE 6
Componente vs. objeto
n Un componente se caracteriza por:n Ser una unidad de despliegue independiente
• Encapsula sus características constituyentes respecto a su entorno• Las terceras partes no pueden acceder a los detalles de
construcción del componente• No se implanta de manera parcial
n Ser una unidad de composición• Con componentes posiblemente desarrollados por otros• Debe ser suficientemente autocontenido • Especificaciones claras de lo que requiere y de lo que proporciona
• Interacciona con su entorno a través de interfaces bien definidasn No tener estado persistente
• Un componente no se distingue de otras copias del mismo• Excepto atributos no funcionales como el número de serie
• Por tanto, en un proceso se puede decir si hay o no un componente, pero no varias instancias del mismo
4
© Juan Pavón Mestras, UCM 2001-02 J2EE 7
Componente vs. objeto
n Un objeto se caracteriza por:n Ser una unidad de instanciación; tienen una
identidad única• No se instancia de manera parcial• La identidad es única y no cambia durante la vida del
objeto
n Tener un estado• Se crea con un estado inicial que evoluciona durante la
ejecución
n Encapsular su estado y comportamiento• Que está definido bien por una clase o por un objeto
prototipo
© Juan Pavón Mestras, UCM 2001-02 J2EE 8
Interfaces
n Puntos de acceso a los componentesn Permite a los clientes acceder a los servicios
proporcionados por un componente
n Un componente puede tener varias interfacesn Una por cada punto de acceso: uso, administración,
configuración, ...n Pero no conviene tener varias interfaces similares o
redundantes
n La especificación de las interfaces es un contraton El respeto de este contrato por cliente y componente
asegura el éxito de la interacción
5
© Juan Pavón Mestras, UCM 2001-02 J2EE 9
Dependencias del contexto
n Un componente también debe especificar sus necesidadesn ¿Qué se necesita para poder implantar para que
funcione el componente (dependencias del contexto)?• Interfaces requeridas (servicios que utiliza)• Mundos de componentes para los que está preparado
(CORBA, COM, J2EE)• Entorno de ejecución: máquina, sistema operativo, etc.
© Juan Pavón Mestras, UCM 2001-02 J2EE 10
Peso de un componente
n El componente más útil es el que ofrece el conjunto de interfaces correcto y no tiene ninguna dependencia de contexton En la práctica, un componentes que reuniera estas
condiciones sería muy pesadon Para conseguir mayor reusabilidad (y evitar
implementaciones redundantes en el componente) se puede optar por implementar sólo la funcionalidad primordial del componente
• Esta es la tendencia en diseño OO• Problema: explosión de dependencias de contexto
• Maximizar la reutilización reduce la utilidad
n Hay que buscar un término medio
6
© Juan Pavón Mestras, UCM 2001-02 J2EE 11
¿Por qué componentes software?
Reusabilidad
Modularidad
Software estándar vs. específico
Inevitable
Unidades de despliegue
Experiencia
Mercado
Estándares
La próxima generación de software estábasada en componentes
© Juan Pavón Mestras, UCM 2001-02 J2EE 12
Modelos de componentes software
n Microsoft .NET (COM)n Perspectiva PC
n SUN J2EEn Perspectiva Internet
n OMG CORBA Component Modeln Perspectiva de corporaciones empresariales
• Superconjunto multi-lenguaje de la especificación EJB• Más información en http://ditec.um.es/~dsevilla/ccm
7
© Juan Pavón Mestras, UCM 2001-02 J2EE 13
EJB y JavaBean son cosas distintas
n Un JavaBean esn un componente software Java reutilizablen que puede ser manipulado visualmente por herramientas de
construcción de aplicacionesn Respecto a una clase Java, un JavaBean soporta
n introspección• permite a las herramientas ver qué hay dentro del Bean • la signatura de los métodos sigue unos patrones (p.ej.:
getPropiedad, setPropiedad)n customización
• permite cambiar la apariencia y comportamiento del Beann eventos
• los Beans pueden disparar eventosn propiedades
• permite manipular los Beans desde un programan persistencia
• salvar y recuperar el estado del Bean
© Juan Pavón Mestras, UCM 2001-02 J2EE 14
EJB y JavaBean son cosas distintas
n La arquitectura de JavaBeans está diseñada para dar un formato a componentes de propósito general
n La arquitectura de EJBs proporciona un formato para componentes altamente especializados en la lógica de negocio que se implantan en un entorno J2EEn Tienen más que ver en común EJBs, servlets y JSPs que
los JavaBeans con cualquiera de ellos
8
© Juan Pavón Mestras, UCM 2001-02 J2EE 15
J2EE
n La plataforma J2EE (Java™2 Platform, Enterprise Edition) soporta un modelo de aplicación distribuida multinivel basado en componentes escritos en Java:n Componentes cliente: aplicaciones de cliente y appletsn Componentes web: servlets y JavaServer Pages (JSP)
n Componentes de negocio: Enterprise JavaBeans (EJB)
n Los componentes J2EE pueden incluir componentes basados en JavaBeans, pero éstos no son considerados parte de la especificación J2EE
© Juan Pavón Mestras, UCM 2001-02 J2EE 16
Objetivos de J2EE
n Definir una arquitectura de componentes estándar para la construcción de aplicaciones distribuidas basadas en Java
n Separar los aspectos de lógica de negocio de otros soportados por la plataforma: transacciones, seguridad, ejecución multihilo,pooling y otros elementos de bajo nivel
n Filosofía java: Escribir una vez y ejecutar en cualquier parte
n Cubrir los aspectos de desarrollo, despliegue y ejecución del ciclo de vida de una aplicación
9
© Juan Pavón Mestras, UCM 2001-02 J2EE 17
Objetivos de J2EE
Transacciones Distribuidas
Concurrencia
Seguridad
Autorizacion
Acceso a Datos
Integración con sistemas propietarios
Lógica de negocio
© Juan Pavón Mestras, UCM 2001-02 J2EE 18
Arquitectura basada en contenedores
n Un contenedor es un proceso donde se ejecutan los componentesn Gestiona los componentes de la aplicación
• Ciclo de vidan Proporciona acceso a servicios de la plataforma
• Por ejemplo, transacciones, seguridad, conectividad
n El desarrollador tiene que especificarn Los componentes de la aplicación
• Servlets• JSPs (Java Server Pages)• EJBs (Enterprise Java Beans)
n Los descriptores de despliegue (deployment)• Ficheros XML que describen los componentes de
aplicación
10
© Juan Pavón Mestras, UCM 2001-02 J2EE 19
Arquitectura de un contenedor
Contrato del componenteSer
vici
os
dec
lara
tivo
sO
tros se
rvicios d
el co
nte
ndor
APIs de Servicios del contenedor
Componentes de aplicación
Descriptor de despliegue
Componentes de aplicación
Descriptor de despliegue
Componentes de aplicación
Descriptor de despliegue
© Juan Pavón Mestras, UCM 2001-02 J2EE 20
Arquitectura basada en contenedores
Diferencias con bibliotecas
LÓGI CAESPECÍFICA
DE LA APLICACIÓN
BUCLE DEEVENTOS
GUI
ADTs
BASE DE DATOS
MATHinvoca
Arquitectura basada en Arquitectura basada en biblioteca de clasesbiblioteca de clases
BUCLE DEEVENTOS
GUI
BASE DE DATOS
ADTs
MATHinvoca
LÓGI CAESPECÍFICA
DE LA APLICACIÓN
Arquitectura basada en Arquitectura basada en ContendorContendor (armazón)(armazón)
è reutilización de código è reutilización de diseño y código
11
© Juan Pavón Mestras, UCM 2001-02 J2EE 21
Contenedores en J2EE
Fuente: Sun Microsystems, Inc., J2EE Specification v1.3
© Juan Pavón Mestras, UCM 2001-02 J2EE 22
Contenedor de Applets
clase java.applet.Applet
Métodos para acceder a otros APIs, p.ej. play(url)
MiApplet
Descriptor de despliegue
12
© Juan Pavón Mestras, UCM 2001-02 J2EE 23
Contenedor Web
APIs de Java Servlet y JSPsRole
s de
seguri
dad
req
uer
idos C
iclo d
e vida, p
oolin
g d
e recursosAcceso a servicios remotos
MiServlet
Descriptor de despliegue
MiJSP
Descriptor de despliegue
© Juan Pavón Mestras, UCM 2001-02 J2EE 24
Contenedor de EJBs
javax.ejb.EJBHome, javax.ejb.EJBObjectjavax.ejb.SessionBean o javax.ejb.EntityBean
Tra
nsa
ccio
nes
, se
guridad C
iclo d
e vida, recu
rsos,
gestió
n d
el espacio
de n
om
bres JN
DIAcceso a servicios remotos
MiEntityBean
Descriptor de despliegue
MiSessionBean
Descriptor de despliegue
MiMessageBean
Descriptor de despliegue
13
© Juan Pavón Mestras, UCM 2001-02 J2EE 25
Servicios estándar J2EE
n HTTP/HTTPSn Java Transaction API (JTA)n JDBCn Java Message Service (JMS)n Java Authentication and Authorization Service
(JAAS)n J2EE Connector Architecturen Java API for XML Parsing (JAXP) n Otros: RMI-IIOP, JavaIDL, JavaMail, JavaBeans
Activation Framework (JAF)
© Juan Pavón Mestras, UCM 2001-02 J2EE 26
Aplicación web con J2EE™
servidorservidorBDBD
servidor servidor J2EEJ2EE
máquinamáquinaclientecliente
Páginas HTML,WML o XML
JSP oservlets
EJBs
Base de datos
Nivel cliente
Nivel web
Nivel negocio
Nivel sistema de información
pueden incluirappletspero eso requiere un plug-in Java en el navegador y un fichero de políticas de seguridad, que no hacen falta si se usan JSPs
14
© Juan Pavón Mestras, UCM 2001-02 J2EE 27
Componentes web
n Servletsn Clases escritas en Java que procesan peticiones y
construyen respuestas
n JSPn Documentos basados en texto que contienen dos tipos
de texto: una plantilla de datos estática que puede expresarse en un formato como HTML, WML o XML, y elementos JSP que determinan cómo la página construye el contenido dinámico
n Applets, páginas HTML estáticas, y clases de utilidad no se consideran componentes web en la especificación J2EE
© Juan Pavón Mestras, UCM 2001-02 J2EE 28
máquinamáquinaservidorservidor
BDBD
máquinamáquinaservidor servidor
J2EEJ2EE
máquinamáquinaclientecliente
Aplicación no web basada en J2EE™
Aplicación cliente
EJBs
Base de datos
Nivel cliente
Nivel negocio
Nivel sistema de información
Aplicación con interfaz gráfica (AWT, Swing),que normalmente interactúa directamente con un EJB
15
© Juan Pavón Mestras, UCM 2001-02 J2EE 29
Componentes de negocio
n Lógica que resuelve las necesidades de un determinado dominio de aplicación
n Enterprise beans (EJBs)n Pueden procesar datos recibidos del lado cliente y
enviarlos al nivel de sistema de información para su almacenamiento
n Pueden recuperar datos del sistema de información, procesarlos y enviarlos al cliente
n 3 tipos de EJBsn Bean de sesión: una conversación con un clienten Bean de entidad: datos persistentes
n Bean dirigido por mensajes: combina las características de un bean de sesión con el Java Message Service (JMS)
© Juan Pavón Mestras, UCM 2001-02 J2EE 30
Arquitectura J2EE
n Los componentes se instalan en contenedores desde los que pueden utilizar los servicios de la plataforma
n El proceso de ensamblado de los componentes requiere especificar el soporte del servidor J2EEn Seguridad: usuarios autorizadosn Modelo de gestión de transacciones: relaciones entre
métodos que constituyen una transacción (tratados como una unidad)
n Java Naming and Directory Interface (JNDI): acceso a servicios de nombres y directorio
n Conectividad remota: permite que los clientes invoquen métodos en los EJBs como si estuvieran en la misma máquina virtual
16
© Juan Pavón Mestras, UCM 2001-02 J2EE 31
Tipos de contenedores
n Contenedor de EJBsn Gestiona la ejecución de EJBs en un servidor J2EE
n Contenedor webn Gestiona la ejecución de las páginas JSP y servlets en
un servidor J2EE
n Contenedor de aplicación clienten Gestiona la ejecución de los componentes de aplicación
cliente en una máquina cliente
n Contenedor de appletn Navegador con plug-in Java en una máquina cliente
© Juan Pavón Mestras, UCM 2001-02 J2EE 32
Tipos de contenedores
Servlet JSP
Contenedor Web
EJB EJB
Contenedor de EJB
Servidor J2EE
Navegador
Aplicacióncliente
Contenedorde aplicación
cliente
Máquina cliente
Base de datos
17
© Juan Pavón Mestras, UCM 2001-02 J2EE 33
Interoperabilidad de J2EE
Fuente: Sun Microsystems, Inc., J2EE Specification v1.3
© Juan Pavón Mestras, UCM 2001-02 J2EE 34
Roles de desarrollo
n Rolesn Proveeder de Producto J2EEn Proveedor de herramientasn Desarrollador de componentes (Application Component
Provider)• Creador de EJBs• Creador de componentes web• Creador de aplicaciones cliente J2EE
n Integrador de aplicaciones (Application Assembler)n Responsable de despliegue
n Administrador del sistema
18
© Juan Pavón Mestras, UCM 2001-02 J2EE 35
Transacciones Distribuidas
Concurrencia
Seguridad
Autorizacion
Acceso a Datos
Integración con sistemas heredados
Roles de desarrollo en J2EE
n Proveedor de herramientas y producto J2EEn Proporcionan la plataforma y herramientas para
desarrollar aplicaciones J2EEn Dan el soporte en tiempo de ejecución para las
componentes según la especificación J2EE
© Juan Pavón Mestras, UCM 2001-02 J2EE 36
Roles de desarrollo en J2EE
n Desarrollador de componentes de aplicaciónn Es el encargado de crear los componentesn Es el responsable de implementar el código de los
componentesn Suele ser experto en el dominio
Lógica de negocio
19
© Juan Pavón Mestras, UCM 2001-02 J2EE 37
Roles de desarrollo en J2EE
n Desarrollador de componentes de aplicaciónn Creación de EJB
• Desarrollador software que entrega un fichero EJB JAR que contiene un descriptor de despliegue y ficheros .class
n Creación de componentes web• Diseñador web (páginas JSP) o desarrollador software
(servlets) que entrega un fichero WAR que contiene ficheros descriptor de despliegue, .class, .jsp y .html
n Creación de aplicación cliente J2EE• Desarrollador software que entrega un fichero JAR que
contiene el descriptor de despliegue y los ficheros .class
Lógica de negocio
© Juan Pavón Mestras, UCM 2001-02 J2EE 38
Lógica de negocioLógica de negocioLógica de negocio
Definición de
transacciones
Roles de
Seguidad
Roles de desarrollo en J2EE
n Integrador de aplicaciónn Combina los ficheros JAR de los proveedores de
componentes y los integra en un fichero de aplicación EAR (Enterprise ARchive)
n Puede integrar otros componentes de aplicación (interfaces gráficas, etc.)
n Define las transacciones que gestiona el contenedorn Define los roles de seguridadn Utiliza descriptores de despliegue (XML)
20
© Juan Pavón Mestras, UCM 2001-02 J2EE 39
Composición de módulos en aplicaciones
Módulo EJB (.jar)
ejb-jar.xml
EJB EJB
Módulo Web(.war)
web.xml
Web Web
Módulo Java (.jar)
appl-cliente.xml
Java Java
Aplicación J2EE (.ear)
aplicacion.xml
Módulo EJB Módulo Web Módulo Java
Fuente: Professional Java Server Programming J2EE 1.3 Edition
© Juan Pavón Mestras, UCM 2001-02 J2EE 40
Roles de desarrollo en J2EE
n Responsable de desplieguen Prepara la instalación de la aplicación en un servidor de
aplicaciones J2EE• Copia los ficheros EAR en el servidor de aplicaciones• Puede añadir clases de implementación adicionales para
el contenedor• Instala la aplicación en el servidor
n Configura la aplicación con información específica del servidor de aplicaciones
• Ajustará los roles de seguridad a los del sistema
Lógica de negocioLógica de negocioLógica de negocio
Definición de
transacciones
Roles de
Seguidad
21
© Juan Pavón Mestras, UCM 2001-02 J2EE 41
Ciclo de vida de aplicación J2EE
Fuente: Sun Microsystems, Inc., J2EE Connector Architecture Specification
© Juan Pavón Mestras, UCM 2001-02 J2EE 42
Roles de desarrollo en J2EE
n Administrador del sisteman La arquitectura J2EE no establece contratos para la
administración del sistema desplegadon Se utilizarán herramientas de monitorización para
controlarlos, provistas por los proveedores de los servidores y contenedores
Lógica de negocioLógica de negocioLógica de negocio
Definición de
transacciones
Roles de
Seguidad
Sistema de monitorización
22
© Juan Pavón Mestras, UCM 2001-02 J2EE 43
Roles de desarrollo en J2EE
Servidor J2EE
Contenedor
Aplicación Cliente
EJB
EJB
Desarrollador Desarrollador de componentesde componentes
IntegradorIntegradorde componentesde componentes
Responsable Responsable de desplieguede despliegue
Proveedor del servidor Proveedor del servidor y contenedor J2EEy contenedor J2EE
Administrador del sistemaAdministrador del sistema
© Juan Pavón Mestras, UCM 2001-02 J2EE 44
Programación con EJBs
n Un EJB implementa módulos de una lógica de negocion La funcionalidad de nivel de sistema la proporciona el
contenedor donde se ejecuta el EJB
n Un EJB es una unidad constituida por:n Varias clases Java
• Que siguen ciertas reglas y tienen métodos de callback específicos, tal como define el entorno del contenedor J2EE y las especificaciones EJB
n Un fichero XML
n Actualmente en la versión 2.0n Define una serie de interfaces para acceder y
programar los EJBs
23
© Juan Pavón Mestras, UCM 2001-02 J2EE 45
Contratos del modelo EJB
Servidor EJB
Contenedor
Cliente EJB
Contrato conContrato conel clienteel cliente
Contrato con Contrato con el componenteel componente
© Juan Pavón Mestras, UCM 2001-02 J2EE 46
Contratos del modelo EJB
n Contrato entre el cliente y el contenedor EJBn Define la vista que tiene el cliente del Enterprise Bean
(proporcionada a través del contenedor)• Define un modelo de programación uniforme para
desarrolladores que utilicen el modelo EJB
n Visión del cliente de un Enterprise Bean:• Interfaz Home (crear, eliminar y buscar objetos EJB)• Interfaz Remote (define los métodos del negocio)• Identidad de objeto (los objetos son únicos en el home )• Metadatos (permiten invocación dinámica)
24
© Juan Pavón Mestras, UCM 2001-02 J2EE 47
Contratos del modelo EJB
n Contrato entre el EJB y el contenedorn Creación, inicialización y eliminación propias por parte
de los componentesn Asegurar la ejecución de los métodos en un contexton Visibilidad del Home mediante JNDIn Intercambio memoria-almacenamiento secundario
(session beans)n Gestión de persistencia (entity beans)
n Disponibilidad de un objeto home que lleva a cabo los procesos de búsqueda
n Implementación de servicios básicos de seguridad
© Juan Pavón Mestras, UCM 2001-02 J2EE 48
Llamada a un método de un EJB
Cliente
Stub RMI
EJB
Clase de interposicióndel contenedor
Stub RMI
Red
25
© Juan Pavón Mestras, UCM 2001-02 J2EE 49
Tipos de EJB
n Session beann Realiza una tarea para un cliente
• Su vida está limitada por el tiempo que el cliente interactúa con el servidor
• Los clientes acceden a session beans para acceder a la aplicación en el servidor
n Con estado o sin estado• Un carrito de compra o un convertidor de euros
n Entity beann Representa un objeto de negocio en un mecanismo de
almacenamiento persistente (p.ej., una base de datos)• Un cliente, un producto, una cuenta• La sincronización de los datos con el almacenamiento persistente
puede hacerla el EJB o el contenedorn Permiten acceso compartido desde varios clientes
n Message beann Gestiona mensajes asíncronos (JMS) que llegan al servidor
para los que está suscritos
© Juan Pavón Mestras, UCM 2001-02 J2EE 50
Arquitectura EJB
EJB Remote
Interface
EJB Home
Interface
EJB Instance
Conten
edor
EJBObject
EJBObject
26
© Juan Pavón Mestras, UCM 2001-02 J2EE 51
La interfaz Home
n Definida por el desarrollador del EJBn Métodos de creación, destrucción y búsqueda
del componenten Está asociado al tipo de EJB (no a una instancia
particular)
import java.rmi.RemoteException;import javax.ejb.*;
public interface ConversorEuroHome extends EJBHome {public ConversorEuro create() throws RemoteException, CreateException;
}
© Juan Pavón Mestras, UCM 2001-02 J2EE 52
La interfaz EJBHome
n Métodos disponibles para el clienten La interfaz se extiende
• Un bean de sesión con estado con uno o más métodos create()• Un bean de sesión sin estado con un sólo métodos create() sin
parámetros• Un bean de entidad con uno o más métodos create() y finder()
package javax.ejb;
public interface EJBHome extends java.rmi.Remote {EJBMetadata getEJBMetadata() throws java.rmi.RemoteException;HomeHandle getHomeHandle() throws java.rmi.RemoteException;void remove(Handle handle)
throws java.rmi.RemoteException, javax.ejb.RemoveException;void remove(Object primaryKey )
throws java.rmi.RemoteException, javax.ejb.RemoveException;}
27
© Juan Pavón Mestras, UCM 2001-02 J2EE 53
La interfaz Remote
n Definida por el desarrollador del EJB
n Métodos de la lógica del negocion Visión del EJB para el cliente
n El desarrollador nunca implementa esta interfazn Lo hace el contenedor de EJBs (las clases de interposición
que se generan al implantar el bean, y que gestiona las transacciones, seguridad, etc.)
import java.rmi.RemoteException;import javax.ejb.*;
public interface ConversorEuro extends EJBObject {public double pesetas (double euros) throws RemoteException;public double euros (double pesetas) throws RemoteException;
}
© Juan Pavón Mestras, UCM 2001-02 J2EE 54
La interfaz EJBObject
n Los métodos del componente nunca serán invocados directamenten Los clientes realizan las invocaciones directamente a
través de un objeto que implementa esta interfaz, objeto que actúa como intermediario
package javax.ejb;
public interface EJBObject extends java.rmi.Remote {EJBHome getEJBHome() throws java.rmi.RemoteException;Object getPrimaryKey() throws java.rmi.RemoteException;Handle getHandle() throws java.rmi.RemoteException;void remove() throws java.rmi.RemoteException;boolean isIdentical(EJBObject obj) throws java.rmi.RemoteException;
}
28
© Juan Pavón Mestras, UCM 2001-02 J2EE 55
La interfaz Local
n Métodos de la lógica del negocio que pueden acceder sólo EJBs de la misma unidad de despliegue
n Hay que definir nuevas interfaces que extienden EJBLocalHome y EJBLocalObject de manera similar a la especificación de una interfaz remotan Pero los métodos no lanzan la excepción RemoteException
import java.rmi.RemoteException;import javax.ejb.*;
public interface ConversorEuro extends EJBLocalObject {public double pesetas (double euros);public double euros (double pesetas);
}
© Juan Pavón Mestras, UCM 2001-02 J2EE 56
Programación del EJB
n La clase de implementación del beann Puede apoyarse en otras clasesn Debe tener:
• Un método ejbCreate () por cada método create() de la interfaz home, y con los mismos parámetros
• Devuelve void para un session bean• Devuelve una clave primaria para un entity bean
• Un método ejbPostCreate() correspondiente para entity beans
• Métodos de lógica de negocio que se correspondan con los declarados en la interfaz remota
29
© Juan Pavón Mestras, UCM 2001-02 J2EE 57
Programación del EJB
import java.rmi.RemoteException;import javax.ejb.SessionBean; import javax.ejb.SessionContext ;
public class ConversorEuroEJB implements SessionBean { public double pesetas(double euros) { return euros * 166.386; } public double euros(double pesetas) { return pesetas / 166.386; }
public ConversorEuro () {} public void ejbCreate() {} public void ejbRemove() {} public void ejbActivate() {} public void ejbPassivate() {} public void setSessionContext (SessionContext sc) {}
}
© Juan Pavón Mestras, UCM 2001-02 J2EE 58
Programación del cliente del EJB
n Un cliente es cualquier usuario de un EJBn Una aplicación cliente Java, una aplicación CORBA, un
servlet, otro EJB
n El cliente tiene que adquirir una interfaz home (usando JNDI) paran Crear o encontrar una instancia del EJB (que se
presenta al cliente por la interfaz Remote)n Ejecutar métodos de negocio de esa instancian Obtener una referencia serializable del EJB (un handle)n Eliminar el EJB
• Si es un session bean con estado, se liberan los recursos asociados
• Si es un session bean sin estado, probablemente se devuelva al pool de session beans disponibles
• Si es un entity bean, se elimina de la base de datos
30
© Juan Pavón Mestras, UCM 2001-02 J2EE 59
Programación del cliente del EJBimport javax.naming.Context;import javax.naming.InitialContext; import javax.rmi.PortableRemoteObject ; import ConversorEuro; import ConversorEuroHome;
public class ClienteConversor { public static void main(String[] args) {
try { // 1. Crea un contexto de nombres JNDI
Context initial = new InitialContext(); // 2. Localiza el objeto asociado al nombre ejb/ConversorEuro
Object objref = initial.lookup ("java:comp/env/ejb/ConversorEuro");ConversorEuroHome home = (ConversorEuroHome)PortableRemoteObject .narrow(
objref, ConversorEuroHome.class);
// 3. Crea una instancia del EJBConversorEuro c = home.create();
// 4. Utiliza el EJBdouble cantidad = c.euros(100.00); System.out.println (String.valueOf(cantidad));
// 4. Al acabar, elimina el EJB creadoc.remove();
} catch (Exception ex) {ex.printStackTrace(); } } }
© Juan Pavón Mestras, UCM 2001-02 J2EE 60
Descriptor de despliegue (deployment)
n Fichero XML generado por una herramienta de despliegue
n Información de configuraciónn Clases que conforman el componenten Atributos transaccionalesn Roles de seguridad
n El mismo bean se puede desplegar de varias maneras
31
© Juan Pavón Mestras, UCM 2001-02 J2EE 61
Descriptor de despliegue (deployment)
<!DOCTYPE ejb-jar PUBLIC ' -//Sun Microsystems , Inc.//DTD Enterprise JavaBeans 2.0//EN' 'http://java.sun.com/j2ee/dtds/ejb-jar_2_0.dtd'>
<ejb-jar><enterprise-beans><session>
<ejb-name>ConversorEuro </ejb-name><home>ejb.ConversorEuroHome</home ><remote>ejb.ConversorEuro</remote><ejb-class>ejb.ConversorEuroBean</ejb-class><session-type>Stateless</session-type><transaction-type>Container</ transaction-type>
</session></enterprise-beans>
<assembly-descriptor><container-transaction>
<method><ejb-name>ConversorEuro</ejb-name><method-name >*</method-name >
</ method><trans-attribute>Required</trans-attribute>
</container-transaction></assembly-descriptor></ejb-jar>
© Juan Pavón Mestras, UCM 2001-02 J2EE 62
Tipos de componentes
n Los componentes se distinguen por el tipo que implementan y por la declaración de subtipo que se incluye en el descriptor de despliegue
<<Interfaz>>
EntityBean
void ejbActivate ()void ejbPassivate ()void ejbRemove()void setSessionContext(EntityContext ctx)void unsetEntityContext()void ejbLoad()void ejbStore()
MyEntityBean
<<Interfaz>>
SessionBean
void ejbActivate ()void ejbPassivate ()void ejbRemove()void setSessionContext()
MySessionBean
32
© Juan Pavón Mestras, UCM 2001-02 J2EE 63
Componentes de sesión
n Representan una sesión o conversación entre un cliente o servidorn Por ejemplo, un carrito de la compra en Internet
n Se ejecutan para un único clienten Pueden participar en transaccionesn No representan datos directamente en la base
de datosn Tienen un tiempo de vida corto n Mueren al caer el servidor EJB
© Juan Pavón Mestras, UCM 2001-02 J2EE 64
Componentes de Entidad
n Representan datos que persisten normalmente en la base de datosn Por ejemplo, la lista de clientes de una tienda
electrónica
n Participan en transaccionesn Permiten un acceso compartido para muchos
clientesn Los datos de los componentes de entidad
sobreviven si el servidor EJB se cae.
33
© Juan Pavón Mestras, UCM 2001-02 J2EE 65
Componentes de sesión sin estado
n El contenedor asume que estos componentes no mantienen un estado conversacional entre invocaciones, con lo que pueden ser utilizado por cualquier cliente.
n No tienen identidad.n Están diseñados para que se cree un ‘pool’ de
objetos que puedan atender las peticiones concurrentes que se realicen.
© Juan Pavón Mestras, UCM 2001-02 J2EE 66
Componentes de sesión con estado
n El contenedor asume que estos componentes pueden contener un estado conversacional que se debe mantener a lo largo de sucesivas invocaciones de métodos y transacciones.
n Cuando un cliente ha obtenido uno de estos objetos, tiene que utilizar esta instancia hasta el final de la sesión
34
© Juan Pavón Mestras, UCM 2001-02 J2EE 67
Componentes de sesión con estado
n Vamos a ver como funcionan estos componentes:n El cliente localiza un interfaz Home para el carrito de la
compran El cliente invoca el método crear adecuadon El contenedor crea una instancia del EJB Cart y
devuelve al cliente una referencia remotan El cliente invoca los métodos necesarios de la Interfaz
Remota ...
n … efectúa los cambios … n … y elimina la instancia
© Juan Pavón Mestras, UCM 2001-02 J2EE 68
Componentes de sesión con estado
ClienteWindows
ClienteJava
Navegador
ClienteMóvil
Servidor EJB
Contenedor
JNDI
CartHome
Cart CartBean
35
© Juan Pavón Mestras, UCM 2001-02 J2EE 69
Componentes de sesión con estado
ClienteWindows
ClienteJava
Navegador
ClienteMóvil
Servidor EJB
Contenedor
JNDI
CartHome
Cart CartBean
cartcart..additemadditem(66)(66)cartcart..additemadditem(59)(59)
cartcart..removeremove()()cartcart..purchasepurchase()()
© Juan Pavón Mestras, UCM 2001-02 J2EE 70
Componentes de entidadcon persistencia basada en el componente
n La implementación de un componente de este tipo de componentes de entidad es responsable de implementar la persistencia. El desarrollador del EJB proporciona el código para acceder a la fuente de datos subyacente o a la aplicación correspondiente. Estas llamada se implementan en los métodos ejbCreate(), ejbRemove(),ejbLoad() y ejbStore().
36
© Juan Pavón Mestras, UCM 2001-02 J2EE 71
Componentes de entidadcon persistencia basada en el contenedor
n El contenedor será responsable de implementar la persistencia. En vez de codificar el desarrollador del componente el acceso a datos, el contenedor será el encargado de realizar el código adecuado y de invocar su ejecución. Los campos del componente de entidad que se gestionan automáticamente, se especifican en el descriptor de despliegue.
© Juan Pavón Mestras, UCM 2001-02 J2EE 72
Interacción entre componentes de sesión y de entidad
n Veamos como se coordinan los distintos componentes para ejecutar tareas complejasn El cliente invoca un método en un componente de
sesión que hace que éste busque el interfaz Home de un Componente de entidad
n El EJB de sesión utiliza el método findByPrimaryKey(...) para encontrar una instancia de EJB de entidad adecuada.
n El contenedor lanza el código SQL (a través de BMP o CMP) para cargar los datos de la base de datos relacional
37
© Juan Pavón Mestras, UCM 2001-02 J2EE 73
Interacción entre componentes de sesión y de entidad
n … continuamosn El componente de sesión recibe una referencia remota
a la instancia de EJB de entidadn El componente de sesión realiza invocaciones sobre el
componente de entidadn Cuando se lanza la transacción sobre los EJB de
entidad, el contenedor lanza el SQL para almacenar en las fuentes de datos los datos modificados por el componente de sesión (a través de CMP o BMP, según corresponda).
© Juan Pavón Mestras, UCM 2001-02 J2EE 74
Componentes de sesión con estado
ClienteWindows
ClienteJava
Navegador
ClienteMóvil
Contenedor
JNDI
CartBeanCart
OrderHome
BBDD
OrderBean
ejbLoadejbLoad()()
OrderejbStoreejbStore()()
38
© Juan Pavón Mestras, UCM 2001-02 J2EE 75
La interfaz de los componentes de sesión
n A continuación se muestra la interfaz que deben implementar los componentes de sesión
public interface SessionBean extends EnterpriseBean{void ejbActivate() throws RemoteException;void ejbPassivate() throws RemoteException;void ejbRemove() throws RemoteException;void setSessionContext (SessionContext ctx)throws RemoteException;
}
© Juan Pavón Mestras, UCM 2001-02 J2EE 76
La interfaz de los componentes de entidad
n A continuación se muestra la interfaz que deben implementar los componentes de entidad
public interface EntityBean extends EnterpriseBean{void setEntityContext (EntityContext ctx)throws RemoteException;void ejbActivate() throws RemoteException;void ejbPassivate() throws RemoteException;void ejbRemove() throws RemoteException;void ejbLoad() throws RemoteException;void ejbStore() throws RemoteException;
}
39
© Juan Pavón Mestras, UCM 2001-02 J2EE 77
EJB y CORBA
n Para comunicar EJB y CORBA, EJB proporciona:n Correspondencia de interfaces home y remote con
RMI/IIOP (se generan interfaces IDL para estos interfaces)
n Propagación de contextos transaccionales sobre IIOPn Propagación de contextos de seguridad sobre IIOPn Servicio de nombres interoperable
© Juan Pavón Mestras, UCM 2001-02 J2EE 78
EJB y CORBA
Servidor EJB
Contenedor
Aplicación Cliente
RMI/IIOP
Servicio de
Nombres JNDI
JTS
2-Phase
Commit
EJBSession
EJBEntidad
BBDD
CORBA 2.3CORBA 2.3Objetos por valorObjetos por valorControl de accesoControl de acceso
IIOP/SSLIIOP/SSL
COSNamingCOSNamingLDAPLDAP
Interfaces IDL paraInterfaces IDL paraHomeHome y Remotey Remote
COSTransactions DistributedCOSTransactions Distributed22--Phase CommitPhase Commit
40
© Juan Pavón Mestras, UCM 2001-02 J2EE 79
Bibliografía
n C. Szyperski, Component Software. Beyond Object-Oriented Programming, Addison-Wesley, 1998
n S. Allamaraju et al., Professional Java Server Programming J2EE 1.3 Edition, Wrox Press Ltd, 2001
n Sun Microsystems, Inc (2001) The J2EE Tutorialn Sun Microsystems, Inc (2001) Enterprise JavaBeans
Specification, v2.0(http://java.sun.com/j2ee/docs.html#specs )
n BEA systems, Using Enterprise JavaBeans, Designing a WebLogic EJB application, (www.weblogic .com)