0% encontró este documento útil (0 votos)
246 vistas40 páginas

Ejb

Cargado por

liker
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
246 vistas40 páginas

Ejb

Cargado por

liker
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 40

Componentes en J2EE

Curso de Sistemas Distribuidos


Facultad de Informática

Juan Pavón Mestras


Dep. Sistemas Informáticos y Programación
Universidad Complutense Madrid

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
componentes
n Por ejemplo, el hardware, la mecánica, la arquitectura,
...

© Juan Pavón Mestras, UCM 2001-02 J2EE 2

1
¿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

Múltiples Integración
suministradores
lego robusta

© Juan Pavón Mestras, UCM 2001-02 J2EE 3

¿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

© Juan Pavón Mestras, UCM 2001-02 J2EE 4

2
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 5

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 definidas
n 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

© Juan Pavón Mestras, UCM 2001-02 J2EE 6

3
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 7

Interfaces

n Puntos de acceso a los componentes


n Permite a los clientes acceder a los servicios
proporcionados por un componente
n Un componente puede tener varias interfaces
n 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
contrato
n El respeto de este contrato por cliente y componente
asegura el éxito de la interacción

© Juan Pavón Mestras, UCM 2001-02 J2EE 8

4
Dependencias del contexto

n Un componente también debe especificar sus


necesidades
n ¿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 9

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 contexto
n En la práctica, un componentes que reuniera estas
condiciones sería muy pesado
n 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

© Juan Pavón Mestras, UCM 2001-02 J2EE 10

5
¿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 11

Modelos de componentes software

n Microsoft .NET (COM)


n Perspectiva PC
n SUN J2EE
n Perspectiva Internet
n OMG CORBA Component Model
n Perspectiva de corporaciones empresariales
• Superconjunto multi-lenguaje de la especificación EJB
• Más información en http://ditec.um.es/~dsevilla/ccm

© Juan Pavón Mestras, UCM 2001-02 J2EE 12

6
EJB y JavaBean son cosas distintas
n Un JavaBean es
n un componente software Java reutilizable
n que puede ser manipulado visualmente por herramientas de
construcción de aplicaciones
n 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 Bean
n eventos
• los Beans pueden disparar eventos
n propiedades
• permite manipular los Beans desde un programa
n persistencia
• salvar y recuperar el estado del Bean

© Juan Pavón Mestras, UCM 2001-02 J2EE 13

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
J2EE
n Tienen más que ver en común EJBs, servlets y JSPs que
los JavaBeans con cualquiera de ellos

© Juan Pavón Mestras, UCM 2001-02 J2EE 14

7
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 applets
n 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 15

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

© Juan Pavón Mestras, UCM 2001-02 J2EE 16

8
Objetivos de J2EE

ncia
o nc urre
C
ion s
rizac tario
Auto propie
as
istem
n c on s
ració
Integ
gocio
g ica de ne
L ó

a Datos
Acceso

Seguridad
as
es Distribuid
Transaccion
© Juan Pavón Mestras, UCM 2001-02 J2EE 17

Arquitectura basada en contenedores

n Un contenedor es un proceso donde se ejecutan


los componentes
n Gestiona los componentes de la aplicación
• Ciclo de vida
n Proporciona acceso a servicios de la plataforma
• Por ejemplo, transacciones, seguridad, conectividad
n El desarrollador tiene que especificar
n 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

© Juan Pavón Mestras, UCM 2001-02 J2EE 18

9
Arquitectura de un contenedor

Contrato del componente

Otros servicios del contendor


Servicios declarativos

Componentes
de aplicación
Componentes
de aplicación Descriptor de
despliegue
Descriptor de
despliegue

Componentes
de aplicación
Descriptor de
despliegue

APIs de Servicios del contenedor

© Juan Pavón Mestras, UCM 2001-02 J2EE 19

Arquitectura basada en contenedores

Diferencias con bibliotecas

LÓGI CA GUI GUI


ESPECÍFICA BASE DE
DE LA
DATOS MATH
APLICACIÓN
LÓGI CA
invoca
MATH BUCLE DE
ESPECÍFICA
DE LA
EVENTOS APLICACIÓN ADTs
invoca
BUCLE DE
EVENTOS ADTs
BASE DE DATOS

Arquitectura basada en Arquitectura basada en


biblioteca de clases Contendor (armazón)
è reutilización de código è reutilización de diseño y código

© Juan Pavón Mestras, UCM 2001-02 J2EE 20

10
Contenedores en J2EE

Fuente: Sun Microsystems, Inc., J2EE Specification v1.3

© Juan Pavón Mestras, UCM 2001-02 J2EE 21

Contenedor de Applets

clase java.applet.Applet

MiApplet

Descriptor de
despliegue

Métodos para acceder a otros APIs, p.ej. play(url)

© Juan Pavón Mestras, UCM 2001-02 J2EE 22

11
Contenedor Web

APIs de Java Servlet y JSPs


Roles de seguridad requeridos

Ciclo de vida, pooling de recursos


MiServlet

Descriptor de
despliegue

MiJSP

Descriptor de
despliegue

Acceso a servicios remotos

© Juan Pavón Mestras, UCM 2001-02 J2EE 23

Contenedor de EJBs

javax.ejb.EJBHome, javax.ejb.EJBObject
gestión del espacio de nombres JNDI

javax.ejb.SessionBean o javax.ejb.EntityBean
Transacciones, seguridad

Ciclo de vida, recursos,

MiEntityBean

Descriptor de
despliegue

MiSessionBean

MiMessageBean Descriptor de
despliegue
Descriptor de
despliegue

Acceso a servicios remotos

© Juan Pavón Mestras, UCM 2001-02 J2EE 24

12
Servicios estándar J2EE

n HTTP/HTTPS
n Java Transaction API (JTA)
n JDBC
n Java Message Service (JMS)
n Java Authentication and Authorization Service
(JAAS)
n J2EE Connector Architecture
n Java API for XML Parsing (JAXP)
n Otros: RMI-IIOP, JavaIDL, JavaMail, JavaBeans
Activation Framework (JAF)

© Juan Pavón Mestras, UCM 2001-02 J2EE 25

Aplicación web con J2EE™

máquina Nivel Páginas HTML, pueden incluir


cliente cliente WML o XML applets
pero eso requiere
un plug-in Java en
el navegador y un
servidor Nivel JSP o fichero de políticas
J2EE web servlets de seguridad, que
no hacen falta si se
usan JSPs
Nivel
negocio EJBs

servidor Nivel
BD sistema de Base de datos
información

© Juan Pavón Mestras, UCM 2001-02 J2EE 26

13
Componentes web

n Servlets
n Clases escritas en Java que procesan peticiones y
construyen respuestas
n JSP
n 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 27

Aplicación no web basada en J2EE™

Nivel máquina
Aplicación con Aplicación cliente cliente
interfaz gráfica cliente
(AWT, Swing),
que normalmente
interactúa
directamente con máquina
un EJB Nivel servidor
EJBs
negocio J2EE

Nivel máquina
Base de datos sistema de servidor
información BD

© Juan Pavón Mestras, UCM 2001-02 J2EE 28

14
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 EJBs
n Bean de sesión: una conversación con un cliente
n 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 29

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 J2EE
n Seguridad: usuarios autorizados
n 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
© Juan Pavón Mestras, UCM 2001-02 J2EE 30

15
Tipos de contenedores

n Contenedor de EJBs
n Gestiona la ejecución de EJBs en un servidor J2EE
n Contenedor web
n Gestiona la ejecución de las páginas JSP y servlets en
un servidor J2EE
n Contenedor de aplicación cliente
n Gestiona la ejecución de los componentes de aplicación
cliente en una máquina cliente
n Contenedor de applet
n Navegador con plug-in Java en una máquina cliente

© Juan Pavón Mestras, UCM 2001-02 J2EE 31

Tipos de contenedores

Navegador Servlet JSP

Contenedor Web
Aplicación
cliente Base de
Contenedor datos
de aplicación EJB EJB
cliente
Contenedor de EJB
Máquina cliente
Servidor J2EE

© Juan Pavón Mestras, UCM 2001-02 J2EE 32

16
Interoperabilidad de J2EE

Fuente: Sun Microsystems, Inc., J2EE Specification v1.3

© Juan Pavón Mestras, UCM 2001-02 J2EE 33

Roles de desarrollo

n Roles
n Proveeder de Producto J2EE
n Proveedor de herramientas
n 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

© Juan Pavón Mestras, UCM 2001-02 J2EE 34

17
Roles de desarrollo en J2EE

n Proveedor de herramientas y producto J2EE


n Proporcionan la plataforma y herramientas para
desarrollar aplicaciones J2EE
n Dan el soporte en tiempo de ejecución para las
componentes según la especificación J2EE

ncia
urre
Conc c ion
riza os
Auto redad
as he
con sistem
ración
Integ

a Datos
Acceso

Seguridad

tribuidas
iones Dis
Transacc

© Juan Pavón Mestras, UCM 2001-02 J2EE 35

Roles de desarrollo en J2EE

n Desarrollador de componentes de aplicación


n Es el encargado de crear los componentes
n Es el responsable de implementar el código de los
componentes
n Suele ser experto en el dominio

cio
de nego
Lógica

© Juan Pavón Mestras, UCM 2001-02 J2EE 36

18
Roles de desarrollo en J2EE

n Desarrollador de componentes de aplicación


n 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

cio
de nego
Lógica

© Juan Pavón Mestras, UCM 2001-02 J2EE 37

Roles de desarrollo en J2EE

n Integrador de aplicación
n 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 contenedor
n Define los roles de seguridad
n Utiliza descriptores de despliegue (XML)
de
Roles d
e gu ida
g ocio S
de ne
Lógica egocio
a de n
Lógcicio e
o ición d
de neg Defin ciones
Lógica trans ac

© Juan Pavón Mestras, UCM 2001-02 J2EE 38

19
Composición de módulos en aplicaciones

Aplicación J2EE (.ear)


aplicacion.xml

Módulo EJB Módulo Web Módulo Java

Módulo EJB (.jar) Módulo Web(.war) Módulo Java (.jar)


ejb-jar.xml web.xml appl-cliente.xml

EJB EJB Web Web Java Java

Fuente: Professional Java Server Programming J2EE 1.3 Edition

© Juan Pavón Mestras, UCM 2001-02 J2EE 39

Roles de desarrollo en J2EE

n Responsable de despliegue
n 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

Roles de
ad
de nego
cio Seguid
Lógica de negocio
Lógica
cio Definición de
de nego iones
Lógica
transacc

© Juan Pavón Mestras, UCM 2001-02 J2EE 40

20
Ciclo de vida de aplicación J2EE

Fuente: Sun Microsystems, Inc., J2EE Connector Architecture Specification

© Juan Pavón Mestras, UCM 2001-02 J2EE 41

Roles de desarrollo en J2EE

n Administrador del sistema


n La arquitectura J2EE no establece contratos para la
administración del sistema desplegado
n Se utilizarán herramientas de monitorización para
controlarlos, provistas por los proveedores de los
servidores y contenedores
de
Roles d
a
Seguid
gocio
de ne
Lógica de ne
gocio
Lógica
ocio
g Defin ición de
Sistema de de ne iones
Lógica trans acc
monitorización

© Juan Pavón Mestras, UCM 2001-02 J2EE 42

21
Roles de desarrollo en J2EE

Integrador lient e
Desarrollador
ción C
de componentes de componentes Aplica

Responsable
de despliegue
EJB

dor
ontene
C
EJB

Proveedor del servidor


y contenedor J2EE

J2EE
Administrador del sistema Servidor
© Juan Pavón Mestras, UCM 2001-02 J2EE 43

Programación con EJBs

n Un EJB implementa módulos de una lógica de


negocio
n 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.0
n Define una serie de interfaces para acceder y
programar los EJBs

© Juan Pavón Mestras, UCM 2001-02 J2EE 44

22
Contratos del modelo EJB

tenedor
Contrato con Con
el cliente

e EJB
Client

Contrato con EJB


el componente Servidor

© Juan Pavón Mestras, UCM 2001-02 J2EE 45

Contratos del modelo EJB

n Contrato entre el cliente y el contenedor EJB


n 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)

© Juan Pavón Mestras, UCM 2001-02 J2EE 46

23
Contratos del modelo EJB

n Contrato entre el EJB y el contenedor


n Creación, inicialización y eliminación propias por parte
de los componentes
n Asegurar la ejecución de los métodos en un contexto
n Visibilidad del Home mediante JNDI
n 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 47

Llamada a un método de un EJB

Cliente EJB

Clase de interposición
del contenedor

Stub RMI Stub RMI

Red

© Juan Pavón Mestras, UCM 2001-02 J2EE 48

24
Tipos de EJB
n Session bean
n 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 bean
n 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 contenedor
n Permiten acceso compartido desde varios clientes
n Message bean
n Gestiona mensajes asíncronos (JMS) que llegan al servidor
para los que está suscritos
© Juan Pavón Mestras, UCM 2001-02 J2EE 49

Arquitectura EJB

Home
EJB
face
Inter
Contenedor

ce
nstan
EJB I

e
JB R emot
E face bject
Inter EJBO

bject
EJBO

© Juan Pavón Mestras, UCM 2001-02 J2EE 50

25
La interfaz Home

n Definida por el desarrollador del EJB


n Métodos de creación, destrucción y búsqueda
del componente
n 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 51

La interfaz EJBHome
n Métodos disponibles para el cliente
n 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;
}
© Juan Pavón Mestras, UCM 2001-02 J2EE 52

26
La interfaz Remote
n Definida por el desarrollador del EJB
n Métodos de la lógica del negocio
n Visión del EJB para el cliente
n El desarrollador nunca implementa esta interfaz
n 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 53

La interfaz EJBObject

n Los métodos del componente nunca serán


invocados directamente
n 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;
}
© Juan Pavón Mestras, UCM 2001-02 J2EE 54

27
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 remota
n 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 55

Programación del EJB

n La clase de implementación del bean


n Puede apoyarse en otras clases
n 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

© Juan Pavón Mestras, UCM 2001-02 J2EE 56

28
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 57

Programación del cliente del EJB

n Un cliente es cualquier usuario de un EJB


n Una aplicación cliente Java, una aplicación CORBA, un
servlet, otro EJB
n El cliente tiene que adquirir una interfaz home
(usando JNDI) para
n Crear o encontrar una instancia del EJB (que se
presenta al cliente por la interfaz Remote)
n Ejecutar métodos de negocio de esa instancia
n 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

© Juan Pavón Mestras, UCM 2001-02 J2EE 58

29
Programación del cliente del EJB
import 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 EJB


ConversorEuro c = home.create();
// 4. Utiliza el EJB
double cantidad = c.euros(100.00);
System.out.println (String.valueOf(cantidad));
// 4. Al acabar, elimina el EJB creado
c.remove();
} catch (Exception ex) {ex.printStackTrace(); } }
} Pavón Mestras, UCM 2001-02
© Juan J2EE 59

Descriptor de despliegue (deployment)

n Fichero XML generado por una herramienta de


despliegue
n Información de configuración
n Clases que conforman el componente
n Atributos transaccionales
n Roles de seguridad
n El mismo bean se puede desplegar de varias
maneras

© Juan Pavón Mestras, UCM 2001-02 J2EE 60

30
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 61

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>> <<Interfaz>>
EntityBean SessionBean

void ejbActivate () void ejbActivate ()


void ejbPassivate () void ejbPassivate ()
void ejbRemove() void ejbRemove()
void setSessionContext(EntityContext ctx) void setSessionContext()
void unsetEntityContext()
void ejbLoad()
void ejbStore()

MyEntityBean MySessionBean

© Juan Pavón Mestras, UCM 2001-02 J2EE 62

31
Componentes de sesión

n Representan una sesión o conversación entre un


cliente o servidor
n Por ejemplo, un carrito de la compra en Internet
n Se ejecutan para un único cliente
n Pueden participar en transacciones
n No representan datos directamente en la base
de datos
n Tienen un tiempo de vida corto
n Mueren al caer el servidor EJB

© Juan Pavón Mestras, UCM 2001-02 J2EE 63

Componentes de Entidad

n Representan datos que persisten normalmente


en la base de datos
n Por ejemplo, la lista de clientes de una tienda
electrónica
n Participan en transacciones
n Permiten un acceso compartido para muchos
clientes
n Los datos de los componentes de entidad
sobreviven si el servidor EJB se cae.

© Juan Pavón Mestras, UCM 2001-02 J2EE 64

32
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 65

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

© Juan Pavón Mestras, UCM 2001-02 J2EE 66

33
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
compra
n El cliente invoca el método crear adecuado
n El contenedor crea una instancia del EJB Cart y
devuelve al cliente una referencia remota
n 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 67

Componentes de sesión con estado


Servidor EJB
Cliente
Windows
Contenedor

Cliente
Java Cart CartBean

CartHome
Navegador

Cliente
Móvil JNDI

© Juan Pavón Mestras, UCM 2001-02 J2EE 68

34
Componentes de sesión con estado
Servidor EJB
Cliente
Windows
Contenedor

Cliente cart
cart.
cart...additem
cart additem(66)
(66)
additem(59)
additem(59)
Java Cart CartBean

cart..purchase
cart purchase()
()
Navegador cart . remove
cart. remove()
() CartHome

Cliente
Móvil JNDI

© Juan Pavón Mestras, UCM 2001-02 J2EE 69

Componentes de entidad
con 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().

© Juan Pavón Mestras, UCM 2001-02 J2EE 70

35
Componentes de entidad
con 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 71

Interacción entre componentes de sesión y


de entidad

n Veamos como se coordinan los distintos


componentes para ejecutar tareas complejas
n 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

© Juan Pavón Mestras, UCM 2001-02 J2EE 72

36
Interacción entre componentes de sesión y
de entidad

n … continuamos
n El componente de sesión recibe una referencia remota
a la instancia de EJB de entidad
n El componente de sesión realiza invocaciones sobre el
componente de entidad
n 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 73

Componentes de sesión con estado

Cliente
Windows
Contenedor
OrderHome

Cliente CartBean
Java Cart ejbLoad()
ejbLoad()
ejbStore()
ejbStore () Order

OrderBean
Navegador

BBDD
Cliente
Móvil JNDI

© Juan Pavón Mestras, UCM 2001-02 J2EE 74

37
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 75

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;
}

© Juan Pavón Mestras, UCM 2001-02 J2EE 76

38
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 IIOP
n Propagación de contextos de seguridad sobre IIOP
n Servicio de nombres interoperable

© Juan Pavón Mestras, UCM 2001-02 J2EE 77

EJB y CORBA CORBA 2.3


e Objetos por valor
ción Client Control de acceso
Aplica IIOP/SSL

EJB RMI/IIOP
Session
de
erv icio DI
S JN
r bres
ntenedo Nom
Co
EJB
COSNaming
Entidad
JTS LDAP
ase
2-Ph it
m
Com EJB
BBDD Servidor
Interfaces IDL para COSTransactions Distributed
Home
© Juan Pavón Mestras, y Remote
UCM 2001-02 J2EE 2-Phase Commit 78

39
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 Tutorial
n 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)

© Juan Pavón Mestras, UCM 2001-02 J2EE 79

40

También podría gustarte