componentes en j2ee - grasia.fdi.ucm.esgrasia.fdi.ucm.es/jpavon/docencia/dso/ejb.pdf · 1...

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

Upload: dotruc

Post on 10-Sep-2018

219 views

Category:

Documents


0 download

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)