Desarrollo de Aplicaciones Distribuidas Con J2EE

17
1 Departamento del Informática Universidad Técnica Federico Santa María EX UMBRA SOLEM IN Raúl Monge Tecnología J2EE 1 PRIMERA PARTE: Introducción al Desarrollo de Aplicaciones Distribuidas con J2EE Raúl Monge Anwandter [email protected] Universidad Técnica Federico Santa María Valparaíso / Chile Valparaíso, Julio del 2005 Raúl Monge Tecnología J2EE 2 EX UMBRA SOLEM IN Agenda Distribución de Aplicaciones Empresariales Tecnología J2EE Servlets y Páginas JSP Enterprise Java Bean (EJB) Persistencia con EJB Mensajería con EJB Ejemplo y Conclusiones Departamento del Informática Universidad Técnica Federico Santa María EX UMBRA SOLEM IN Raúl Monge Tecnología J2EE 3 1. Distribución de Aplicaciones Empresariales Introducción General Raúl Monge Tecnología J2EE 4 EX UMBRA SOLEM IN Requisitos Generales de Aplicaciones Empresariales Alta disponibilidad Éxito de una organización muchas veces depende del buen funcionamiento de sus sistemas Seguridad Sistemas con información sensible Escalabilidad Carga del sistema es impredecible Heterogeneidad Gran variedad de sistemas, plataformas, lenguajes y APIs a integrar Raúl Monge Tecnología J2EE 5 EX UMBRA SOLEM IN Modelo de Una Capa (1-Tier) Mainframe Terminales BD Raúl Monge Tecnología J2EE 6 EX UMBRA SOLEM IN Una Capa (Mainframes) Características Modelo centralizado (monolítico) Terminales tontos Presentación, lógica de negocios y acceso a datos están entrelazados en el mainframe Ventajas: No se requiere administrar clientes Es fácil lograr consistencia de datos Desventajas: Difícil de actualizar, mantener y reusar código

Transcript of Desarrollo de Aplicaciones Distribuidas Con J2EE

1

Departamento del InformáticaUniversidad Técnica Federico Santa María

EX UMBRA SOLEMIN

Raúl Monge Tecnología J2EE 1

PRIMERA PARTE:Introducción al Desarrollo de

Aplicaciones Distribuidas con J2EE

Raúl Monge [email protected]

Universidad Técnica Federico Santa MaríaValparaíso / Chile

Valparaíso, Julio del 2005Raúl Monge Tecnología J2EE 2

EX UMBRA SOLEMIN

Agenda

Distribución de Aplicaciones EmpresarialesTecnología J2EEServlets y Páginas JSPEnterprise Java Bean (EJB)

Persistencia con EJBMensajería con EJB

Ejemplo y Conclusiones

Departamento del InformáticaUniversidad Técnica Federico Santa María

EX UMBRA SOLEMIN

Raúl Monge Tecnología J2EE 3

1. Distribución de Aplicaciones Empresariales

Introducción General

Raúl Monge Tecnología J2EE 4

EX UMBRA SOLEMINRequisitos Generales deAplicaciones Empresariales

Alta disponibilidadÉxito de una organización muchas veces depende del buen funcionamiento de sus sistemas

SeguridadSistemas con información sensible

EscalabilidadCarga del sistema es impredecible

HeterogeneidadGran variedad de sistemas, plataformas, lenguajes y APIs a integrar

Raúl Monge Tecnología J2EE 5

EX UMBRA SOLEMIN

Modelo de Una Capa (1-Tier)

Mainframe

Terminales

BD

Raúl Monge Tecnología J2EE 6

EX UMBRA SOLEMIN

Una Capa (Mainframes)Características

Modelo centralizado (monolítico)Terminales tontosPresentación, lógica de negocios y acceso a datos están entrelazados en el mainframe

Ventajas:No se requiere administrar clientesEs fácil lograr consistencia de datos

Desventajas:Difícil de actualizar, mantener y reusar código

2

Raúl Monge Tecnología J2EE 7

EX UMBRA SOLEMIN

Modelo de Dos Capas (2-Tier)

Servidor de DatosClientes

BD

Raúl Monge Tecnología J2EE 8

EX UMBRA SOLEMIN

Dos CapasCaracterísticas

Clientes (gordos) envían consultas SQLPresentación, lógica de negocios y procesamiento del modelo de datos en el cliente

Ventajas:Independencia de productos de BD

Desventajas:Difícil de actualizar, mantener y escalarModelo de datos fuertemente acoplado al clienteFuerte tráfico de datos sin mayor procesamiento

Raúl Monge Tecnología J2EE 9

EX UMBRA SOLEMIN

Modelo de Tres Capas (3-Tier)

Servidor deDatos

Clientes

BD

Servidor deAplicación

Raúl Monge Tecnología J2EE 10

EX UMBRA SOLEMIN

Tres Capas (basado en RPC)Características

Clientes son más delgados (sólo presentación)Capa media maneja servicios del sistema

Ventajas:Lógica de negocios puede cambiar más fácilmente

Desventajas:Se introduce complejidad en capa mediaClientes y capa media mantienen fuerte acoplamiento

Raúl Monge Tecnología J2EE 11

EX UMBRA SOLEMIN

Tres Capas (basado en Objetos)Características

Lógica de negocios y modelo de datos en objetosUsan típicamente: Corba, RMI o DCOM

Ventajas:Acoplamiento más débilMayor reusabilidad de código

Desventajas:Esfuerzo de administración aun significativoComplejidad de la capa media(un problema que hay que atacar)

Raúl Monge Tecnología J2EE 12

EX UMBRA SOLEMIN

Tres Capas (basado en la Web)Características

Browser maneja lógica de presentaciónBrowser se comunica vía HTTPLógica de negocios y modelo de datos manejados por generación dinámica de contenidos

Ventajas:Ubicuidad y cero administración de clientesSoporta diferentes tipos de clientes

Desventajas:Complejidad de la capa media

3

Raúl Monge Tecnología J2EE 13

EX UMBRA SOLEMIN

Contenedor y Componentes

Servicios del Contenedor

Contenedor

Componentes

Raúl Monge Tecnología J2EE 14

EX UMBRA SOLEMIN

Arquitecturas de Componentes

Contenedores permiten desplegar componentes en el servidorIdeal es que exista un estándar para no depender del proveedor de la solución

Componentes pueden desplegarse en cualquier servidor

Una “arquitectura de componentes” establece un estándar entre “contenedores” y “componentes”

Raúl Monge Tecnología J2EE 15

EX UMBRA SOLEMIN

Complejidad de Integración

Cliente Gordo(SWING)

AplicaciónEmpresarial

Base de Datos

Gestión deInventario

SistemaCRM

Consola deAdministración

Browser

ClienteCORBA

ClienteSOAP

RMI

HTTP

SOAP

IIOP

SQL

SNMP/JMX

Propietario

También: PDAs, celulares, etc.Raúl Monge Tecnología J2EE 16

EX UMBRA SOLEMIN

Tendencias Actuales

Moverse a arquitecturas de 2 o más capasMoverse a modelos de aplicaciones basadas en objetosUsar tecnología de componentes para facilitar despliegue y mantención de aplicacionesUsar clientes basados en HTMLUsar tecnologías que faciliten la integración de diversas aplicaciones

Departamento del InformáticaUniversidad Técnica Federico Santa María

EX UMBRA SOLEMIN

Raúl Monge Tecnología J2EE 17

2. Java 2 Standard Edition(J2SE)

Algunas tecnologías básicas para J2EE

Raúl Monge Tecnología J2EE 18

EX UMBRA SOLEMIN

RMI: Modelo de Ejecución

ObjetoCliente

ObjetoServidor

Envío de PeticiónSerializada

Retorno de RespuestaSerializada o Excepción

ObjetoStub

Receptor

Invocaciónlocal

RetornoResultado

Método

Retornode valor

o excepción

Invocacióndel Stub

4

Raúl Monge Tecnología J2EE 19

EX UMBRA SOLEMIN

RMI: Modelo de Localización

ObjetoCliente

ObjetoServidor

rmiregistry

ObjetoStub

bind()o rebind()

lookup()

Invocación de método remoto

Raúl Monge Tecnología J2EE 20

EX UMBRA SOLEMIN

JDBC

Cliente JDBC BD

Cliente BDLógica deNegocios JDBC

HTTP,RMI,etc.

ProtocoloBase de Datos

ProtocoloBase de Datos

Raúl Monge Tecnología J2EE 21

EX UMBRA SOLEMIN

JDBC: Sentencias SQL// suponiendo que se está conectado a la BD

Statement stat = conn.createStatement();

stat.execute( "CREATE TABLE Saludos (Name CHAR(20))” );stat.execute( "INSERT INTO Saludos VALUES ('Hola Mundo!')” );

ResultSet resultado = stat.executeQuery( "SELECT * FROM Saludos” );

resultado.next();System.out.println(resultado.getString(1));resultado.close();

stat.execute( "DROP TABLE Saludos” );stat.close();

Raúl Monge Tecnología J2EE 22

EX UMBRA SOLEMIN

Applet: Modelo de Ejecución

Browser

ServidorWeb

JVM

AppletApplet

Departamento del InformáticaUniversidad Técnica Federico Santa María

EX UMBRA SOLEMIN

Raúl Monge Tecnología J2EE 23

3. Java 2 Enterprise Edition(J2EE)

Visión General

Raúl Monge Tecnología J2EE 24

EX UMBRA SOLEMIN

Metas de J2EEDefinir una plataforma estándar para soportar aplicaciones distribuidasSimplificar el desarrollo mediante un modelo de aplicación basada en componentesFacilitar la integración de la aplicación con diferentes tipos de clientes y con otros sistemas o aplicaciones

5

Raúl Monge Tecnología J2EE 25

EX UMBRA SOLEMIN

Modelo Multi-capa J2EE

cliente

cliente

cliente

cliente

Firewall

Capa Cliente

ContenedorWeb

(Servlets, JSP, HTML y XML)

Capa Media

JNDI,JMS,

JavaMail

EJBEJB

EJB

ContenedorEJB

Sistemas deInformaciónEmpresarial

(RDBMS,Aplicacionesheredadas)

Capa SIERaúl Monge Tecnología J2EE 26

EX UMBRA SOLEMIN

Modelo de Aplicación J2EE

Raúl Monge Tecnología J2EE 27

EX UMBRA SOLEMIN

Tecnología J2EE

Raúl Monge Tecnología J2EE 28

EX UMBRA SOLEMIN

Contenedores J2EE

Raúl Monge Tecnología J2EE 29

EX UMBRA SOLEMIN

Servicios de PlataformaServicio de Nombres

Permite mantener un ambiente de nombres donde se pueden personalizar componentes

Servicios de DesplieguePermiten personalizar componentes y aplicaciones en el tiempo de empaquetado y despliegue

Servicios TransaccionalesPara apoyar transacciones distribuidas

Servicios de SeguridadControl de acceso con autenticación y autorización

Raúl Monge Tecnología J2EE 30

EX UMBRA SOLEMIN

Tecnología de ServiciosJava Naming and Directory Interface(JNDI)

Asociar atributos con objetos y búsqueda de objetosJava Transaction API (JTA) y Java Transaction Service (JTS)

Soporte para transacciones distribuidasJ2EE Connector Architecture (JCA)

Conectar plataforma J2EE con SIE (e.g. ERP, procesamiento transacional en mainframes, etc.)

Java API para Procesamiento XML (JAXP)Parsing y transformación de documentos XML

6

Raúl Monge Tecnología J2EE 31

EX UMBRA SOLEMIN

Tecnologías de Comunicación

Protocolos de InternetTCP/IP, HTTP, SSL

RMIInterfaces para objetos remotos y serialización

Protocolos de OMG (Corba)Java IDL y RMI-IIOP

Web Services

Raúl Monge Tecnología J2EE 32

EX UMBRA SOLEMIN

Tecnologías de Mensajería

Java Message Service API (JMS)Permite seguir el progreso de tareasSoporta mensajería punto a punto (PTP) y de publicación-suscripción (Pub/Sub)

JavaMail APIAPI para sistema de correo electrónicoSoporta diferentes formas de almacenamiento, formatos y transporte (e.g. IMAP4, POP3 y SMTP)

Raúl Monge Tecnología J2EE 33

EX UMBRA SOLEMIN

Aplicación Multicapas

Browser

ContenedorWeb

ContenedorEJB

RecursosSIE

HTML,HTTP,XML Páginas JSP,

Servlets,XML,JavaMail

EJB,JMS,JTA,JDBC

Raúl Monge Tecnología J2EE 34

EX UMBRA SOLEMINEscenario:Clientes Stand-Alone

ClienteStand-Alone

ContenedorWeb

ContenedorEJB

RecursosSIE

RMI-IIOP(3-Tier)

JDBC(2-Tier)

Aplicacionesno Java

HTML,HTTP,XML

Raúl Monge Tecnología J2EE 35

EX UMBRA SOLEMINEscenario:Aplicaciones Centradas en la Web

Browser

ContenedorWeb

RecursosSIE

HTML,HTTP,XML

Páginas JSP,Servlets,XML JDBC

Contenedor Web tiene funciones de presentación y delógica de negocios

Raúl Monge Tecnología J2EE 36

EX UMBRA SOLEMINContenedor Web en Escenario 3-Tier

Firewall

Contenedor Web

ObjetoAccesoDatos

ObjetoAccesoDatos

PáginaJSP

Servlet

Browser

HTTP(S)

HTML/XML

JavaMail

JavaMail

JDBC

JDBC

7

Raúl Monge Tecnología J2EE 37

EX UMBRA SOLEMIN

Escenario: B2B

ContenedorWeb

ContenedorWeb

ContenedorEJB

ContenedorEJB

RecursosSIE

HTTP(S)XML

RMI-IIOPJMS

Raúl Monge Tecnología J2EE 38

EX UMBRA SOLEMIN

Los Roles de los EJBProveedor deHerramientas

Proveedor deBeans

Ensamblador deAplicaciones

Proveedor deContenedores/Servidores

Desplegador Administrador

construiraplicación

desplegarsistema

construirbeans

Raúl Monge Tecnología J2EE 39

EX UMBRA SOLEMIN

Patrones J2EE

Corresponden a patrones de diseño y arquitectónicosPatrones se clasifican en:

Capa de presentaciónCapa de negocioCapa de integración

Sun Java Center J2EE Pattern Cataloghttp://developer.java.sun.com/developer/restricted/patterns/J2EEPatternsAtAGlance.html

Raúl Monge Tecnología J2EE 40

EX UMBRA SOLEMIN

Blueprints

http://java.sun.com/blueprints/enterprise/

Departamento del InformáticaUniversidad Técnica Federico Santa María

EX UMBRA SOLEMIN

Raúl Monge Tecnología J2EE 41

4. Servlets y Páginas JSP

Raúl Monge Tecnología J2EE 42

EX UMBRA SOLEMIN

Movimiento hacia el Servidor

Applets están bien para clientes delgados, pero ...

Applets grandes requieren mayor tiempo de carga y usan más ancho de bandaProblemas de compatibilidad con los browsers

Solución es ejecutar código de aplicación en el lado del servidor

Existen varias soluciones técnicasEjemplos: CGI, PHP, ASP, JSP

8

Raúl Monge Tecnología J2EE 43

EX UMBRA SOLEMIN

¿Porqué Páginas Web Dinámicas?

La página está basada en datos enviados por el usuario

Ejemplo: Confirmación de transacciónLa página está derivada de datos que cambian frecuentemente

Ejemplo: Noticias del díaLa página usa información de base de datos u otras fuentes al lado del servidor

Ejemplo: Cupo disponible de asientos

Raúl Monge Tecnología J2EE 44

EX UMBRA SOLEMIN

CGIEstándar popular, que corresponde a las primeras soluciones

Una aplicación CGI recibe petición desde el Servidor Web y responde con código HTML

Desventajas:Se crea un nuevo proceso por cada peticiónTípicamente se procesa la petición con PERL, lo que obliga a hacer partir el interpretadorSi programa CGI termina antes de responder al Servidor Web, el cliente sufre de retardos

Raúl Monge Tecnología J2EE 45

EX UMBRA SOLEMIN

Contenedor de Servlets

Contenedorde Servlets

Browser

ContenidoEstático

Servlet

Respuesta HTTP

Petición HTTP

Raúl Monge Tecnología J2EE 46

EX UMBRA SOLEMIN

Modelo de Interacción de Servlets

Request

Responseservice()

ServletServidor Web

Clientes

Usuario redefine el método service()

Raúl Monge Tecnología J2EE 47

EX UMBRA SOLEMIN

Request

Response

HttpServletServidor WebClientes

service()

doDelete()

doGet()

doOptions()

doPost()

doPut()

doTrace()

Usuario redefine los métodos asociados al protocolo HTTP

Clase HttpServlet

Raúl Monge Tecnología J2EE 48

EX UMBRA SOLEMIN

Ejemplo de HttpServletpublic class bienvenidoServlet extends HttpServlet {

public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

resp.setContentType("text/html");PrintWriter out = resp.getWriter();out.println("<HTML>"); out.println("<HEAD>");out.println("<TITLE>Bienvenido</TITLE>");out.println("</HEAD>");out.println("<BODY>");out.println("<H1>Bienvenido al Sistema</H1>");out.println("<P>Ha tenido exito en pasar control de acceso!!</P>");out.println("</BODY>"); out.println("</HTML>");

}

public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

doGet(req, resp);}

}

9

Raúl Monge Tecnología J2EE 49

EX UMBRA SOLEMIN

Necesidad de Sesión

Protocolo HTTP considera que servidor cierra conexión después de cada petición

HTTP es considerado protocolo sin estado

Problema:¿Qué pasa cuando un cliente interactúa varias veces con el servidor, conducido por un estado anterior?

Raúl Monge Tecnología J2EE 50

EX UMBRA SOLEMIN

Técnicas de Gestión de SesionesReescritura de URL

Agregando a URL parámetros (nombre/valor)Información aparece visible en el Browser

Campos OcultosSe pasa parámetro en un campo oculto de un data formAun se puede ver en el código fuente de la página HTML

CookiesPequeña pieza de información que se pasa de ida y vuelta entre el servidor y el cliente

Objetos de sesiónSe usan objetos almacenados en el servidor que a través de una clave se relacionan en forma única con un cliente

Raúl Monge Tecnología J2EE 51

EX UMBRA SOLEMIN

Ejemplo de Cookies

Cookie[] galletas = peticion.getCookies();int largo = galletas.length;for (int i=0; i<largo; i++) {

Cookie galleta = galletas[i];out.println("<B>Nombre del Cookie:</B> " + galleta.getName() + "<BR>");out.println("<B>Valor del Cookie:</B> " + galleta.getValue() + "<BR>");

}

Cookie c1 = new Cookie("usuario", usuario);Cookie c2 = new Cookie("password", password);respuesta.addCookie(c1);respuesta.addCookie(c2);

Agregando una cookie en la respuesta

Obteniendo información de una cookie en la petición

Raúl Monge Tecnología J2EE 52

EX UMBRA SOLEMIN

Ejemplo de Objeto de Sesiónpublic void doGet(HttpServletRequest peticion, HttpServletResponse respuesta)

throws ServletException, IOException {HttpSession sesion = petición.getSession(true);

Integer contador = (Integer) sesion.getAttribute("contador");

if (contador == null) {// primera visitacontador = new Integer(0);

} else {// otra visitacontador = new Integer(contador.intValue() + 1);

}sesion.setAttribute("contador", contador);

// etc.....

Raúl Monge Tecnología J2EE 53

EX UMBRA SOLEMIN

Páginas JSP: MotivaciónFacilitar programación de páginas HTML dinámicas respecto a Servlets

Reduce esfuerzo de programación de escribir en stream de respuesta código HTMLEvita intervenir código de servlets por cada cambio

JSP es una extensión a Servlets, no un reemplazo

Comprensión de servlets es fundamental para programar bien páginas JSP

Raúl Monge Tecnología J2EE 54

EX UMBRA SOLEMIN

Estructura del Lenguaje JSP

Página JSP se compone de:Elementos o etiquetas JSP (JSP tags)

Corresponde a código JavaDatos de Plantilla (template data)

Corresponde a código HTML

Tipos de elementos sintácticos:DirectivasScriptingAcciones

10

Raúl Monge Tecnología J2EE 55

EX UMBRA SOLEMIN

Ejemplo de Scriptlet (1/2)

<%@ include file="includes/cabecera.html" %>

// faltan algunas líneas

<CENTER><H2>Listando Todos los Usuarios</H2><TABLE><TR><TH>Nombre</TH><TH>Apellido</TH><TH>Usuario</TH><TH>Password</TH></TR><%String sql = "SELECT Nombre, Apellido, Usuario, Password FROM Usuarios";try {Connection con = DriverManager.getConnection(

"jdbc:db2j:/BASE_DATOS/BD_PRUEBA;create=true", "", "");Statement s = con.createStatement();ResultSet rs = s.executeQuery(sql);

// sigue en la próxima página

Raúl Monge Tecnología J2EE 56

EX UMBRA SOLEMIN

Ejemplo de Scriptlet (2/2)while (rs.next()) {%>

<TR><TD> <% out.print(rs.getString(1)); %> </TD><TD> <% out.print(rs.getString(2)); %> </TD><TD> <% out.print(rs.getString(3)); %> </TD><TD> <% out.print(rs.getString(4)); %> </TD>

</TR><%

}rs.close(); s.close(); con.close();

} catch (SQLException e) { System.out.println(e.toString()); } catch (Exception e) { System.out.println(e.toString()); }

%></TABLE></CENTER><%@ include file="includes/cola.html" %>

// se omite el final

Raúl Monge Tecnología J2EE 57

EX UMBRA SOLEMIN

Uso del JavaBean en JSP

<jsp:useBean id="miBean" class="beans.CalculadoraBean"/><%@ include file="includes/cabecera.html" %>

<jsp:setProperty name="miBean" property="memoria" param="memoria"/>

El valor de la memoria es <jsp:getProperty name="miBean" property="memoria"/>

<%@ include file="includes/cola.html" %>

Raúl Monge Tecnología J2EE 58

EX UMBRA SOLEMINEjemplo de Etiquetas Personalizadas(Custom Tags)

<%@ taglib uri="/misEtiquetas" prefix="tit"%><HTML><HEAD></HEAD><BODY BGCOLOR="#FDF5E6">

<tit:titulo bgColor="#990000" rowColor="#cc0000"fontList="Times" fontColor="#ffffff" fontSize="32">

<B>Curso de Servlet y JSP</B></tit:titulo><BR>Esta es una prueba de etiqueta con cuerpo!<BR><%@ include file="includes/cola.html" %>

Cuerpo

Departamento del InformáticaUniversidad Técnica Federico Santa María

EX UMBRA SOLEMIN

Raúl Monge Tecnología J2EE 59

5. Beans Empresariales

Introducción a Enterprise Java Beans (EJB)

Raúl Monge Tecnología J2EE 60

EX UMBRA SOLEMINObjeto Remotos vs. Middleware

Protocolo RMI Protocolo RMI

Sockets Sockets

Otros Servicios

11

Raúl Monge Tecnología J2EE 61

EX UMBRA SOLEMIN

Objetos Remotos

Cliente

Stub

ObjetoDistribuido

Skeleton

Red

Interfaz Remota

Interfaz Remota

Raúl Monge Tecnología J2EE 62

EX UMBRA SOLEMIN

Middleware Explícito

Cliente

Stub

ObjetoDistribuido

Skeleton

Red

ServicioTransaccional

Driver deBD

ServicioSeguridad

Interfaz Remota

Interfaz Remota

APITransacción

APISeguridad

APIde BD

Raúl Monge Tecnología J2EE 63

EX UMBRA SOLEMIN

Middleware Implícito

Cliente

Stub Skeleton

ObjetoDistribuido

Red

ServicioTransaccional

Driver deBD

ServicioSeguridad

Interfaz Remota

Interfaz Remota

APITransacción

APISeguridad

APIde BD

Interceptorde Peticiones

Interfaz Remota

Interceptor de Peticioneshace lo que ordenaarchivo descriptor

Raúl Monge Tecnología J2EE 64

EX UMBRA SOLEMINVentajas de Middleware Implícito

Más fácil de escribirNo se requiere codificar a APIs del middleware (sólo se declara lo requerido)

Más fácil de mantenerSeparación de lógica de negocios de la lógica del middleware

Más fácil de soportarSi se cambia middleware sólo se modifica un archivo descriptor

Raúl Monge Tecnología J2EE 65

EX UMBRA SOLEMIN¿Qué es un Enterprise Java Bean (EJB)?Es un componente (de software) del lado del servidor que encapsula lógica del negocio

Separa aspectos de la presentaciónSe deben diseñar de acuerdo con las especificaciones técnicas definidas para EJBsSólo pueden ser desplegados y ejecutados en un contenedor EJB (servidor de aplicación)

Raúl Monge Tecnología J2EE 66

EX UMBRA SOLEMIN

¿Qué es un Contenedor EJB?

Son responsable de administrar los EJB, proveyéndole un ambiente de ejecución

Habilita a clientes remotos

Provee servicios a nivel de sistema para aplicaciones EJB tales como:

Gestión de sesionesTransacciones y compartición de conexionesSeguridad

12

Raúl Monge Tecnología J2EE 67

EX UMBRA SOLEMIN

Los Tipos de Beans (EJB)Bean de Sesión (SB)

Modelan procesos de negocioEjemplo: Motor de precios, autorizador de tarjeta de crédito

Bean de Entidad (EB)Modelan datos de negocioEjemplo: producto, orden de compra, empleado

Bean Conducido por Mensaje (MDB)Similar a bean de sesión, pero permite el procesamiento asíncrono de mensajes tipo JMSEjemplo: ordenar una compra

Raúl Monge Tecnología J2EE 68

EX UMBRA SOLEMIN

Sistema de Componentes EJB

Raúl Monge Tecnología J2EE 69

EX UMBRA SOLEMIN

Modelo de Invocación EJB

Home Object

EJB Object EnterpriseBean

HomeInterface

RemoteInterface

Contenedor EJB

Servicios

Cliente

Servicio deNombres

JNDIAPI

Invocarmétodo de negocio

Obtenerreferencia aHome Object

Crear referenciaa EJB Object Crear

EJB Object

Raúl Monge Tecnología J2EE 70

EX UMBRA SOLEMIN

Archivos de Despliegue

HomeInterfaces

LocalInterfaces

Enterprise BeanClasses

RemoteInterfaces

DeploymentDescriptor

Vendor-specificfile

Creador Archivo JARArchivo JAR

EJB

Departamento del InformáticaUniversidad Técnica Federico Santa María

EX UMBRA SOLEMIN

Raúl Monge Tecnología J2EE 71

5.1 Beans de Sesión (SB)

Raúl Monge Tecnología J2EE 72

EX UMBRA SOLEMIN

Beans de Sesión (SB)SB sin Estado (Stateless: SLSB)

Implementa procesos de negocios que requieren de una sola interacciónNo mantiene estado conversacionalEjemplo: Motor de cálculo y verificador de tarjeta de crédito

SB con Estado (Stateful. SFSB)Implementa procesos de negocios que requieren de varias peticiones o transaccionesMantiene estado conversacionalEjemplo: Carro de compras

13

Raúl Monge Tecnología J2EE 73

EX UMBRA SOLEMINPasivación y Activación de Objeto de Sesión

Contenedor Instancia de EB

1: ejbPassivate()

2: escribir estado

1: leer estado

2: ejbActivate()

Pasivación deObjeto deSesión

MemoriaSecundaria

Activación deObjeto deSesión

Departamento del InformáticaUniversidad Técnica Federico Santa María

EX UMBRA SOLEMIN

Raúl Monge Tecnología J2EE 74

5.2 Beans de Entidad

Persistencia, lenguaje de consultas y relaciones

Raúl Monge Tecnología J2EE 75

EX UMBRA SOLEMIN

Persistencia: O-R Mapping

Cuenta

String cuentaIDString nombreTitulardouble saldo

API JDBC

Tabla de Cuentas

Raúl Monge Tecnología J2EE 76

EX UMBRA SOLEMINSincronización con laBase de Datos

Contenedor EJB / Servidor

Instanciade EB

se puede repetir muchas veces el ciclo:ejbLoad - método negocio - ejbStore

1: ejbLoad()

4: ejbStore()

3: Métodos denegocio

5: Escribir a BD2: Leer desde BD

Tabla

Raúl Monge Tecnología J2EE 77

EX UMBRA SOLEMIN

Pooling de EB

Contenedor EJB / Servidor

Cliente 1EJB Object

1

RemoteInterface

El contenedor EJB puededinámicamente asignaruna instancia de EB pararepresentar diferentes datos

Cliente 2EJB Object

1

RemoteInterface

Cliente 2EJB Object

1

RemoteInterface

Instanciasde EB

Pool de Beans

Raúl Monge Tecnología J2EE 78

EX UMBRA SOLEMINTipos de Persistencia mediante Beans de Entidad (EB)

Persistencia gestionada por el Bean(BMP)

Persistencia se debe programare.g. Usando INSERT o DELETE con JDBC

Persistencia gestionada por el Contenedor (CMP)

Contenedor realiza persistenciaHerramienta del contenedor genera código de acceso al repositorio de datosPermite ahorrar código

14

Raúl Monge Tecnología J2EE 79

EX UMBRA SOLEMINClase Bean de Entidad BMP: método ejbCreate()

public CuentaPK ejbCreate(String cuentaID, String nombreTitular) throws CreateException {this.cuentaID = cuentaID;this. nombreTitular = nombreTitular;this.saldo = 0;try { /* borrado : crear conexión........ */

pstmt = conn.prepareStatement(“ insert into accounts (id, nombreTitular, balance) values (?, ?, ?)");

pstmt.setString(1, cuentaID);pstmt.setString(2, nombreTitular);pstmt.setDouble(3, saldo);pstmt.executeUpdate();/* Generar objeto de clave primaria y retornarlo */return new CuentaPK(cuentaID);

} catch (Exception e) {throw new CreateException(e.toString());

} finally {/* borrado ... liberar conexión ...... */ }}

Raúl Monge Tecnología J2EE 80

EX UMBRA SOLEMIN

Beans de Entidad tipo CMPSepara lógica de los datos de la representación de los datos (lógica de persistencia)

Hace posible cambiar de BD (tipo) sin afectar al componente

Un Bean corresponde a una subclase de la desarrollada por el proveedor

Desarrollador sólo escribe lógica de los datos (clase base)El contenedor la extiende agregando la lógica de persistencia (subclase), en el tiempo de despliegue

Raúl Monge Tecnología J2EE 81

EX UMBRA SOLEMINEjemplo de Implementación de EB / CMP

public abstract class CuentaBean implements EntityBean {public abstract String getCuentaID();public abstract void setCuentaID(String cuentaID);

public abstract String getNombreTitular();public abstract void setNombreTitular(String nombre);

public abstract double getSaldo();public abstract void setSaldo(double saldo);

public String ejbCreate(String cuentaID, String titular) throws CreateException {setCuentaID(cuentaID);setNombreTitular(titular);setSaldo(0);return null;

}}

Raúl Monge Tecnología J2EE 82

EX UMBRA SOLEMINEsquema Abstracto de Persistencia de los EB/CMP

...<cmp-version>2.x</cmp-version>

<abstract-schema-name>CuentaBean</abstract-schema-name>

<cmp-field><field-name>cuentaID</field-name>

</cmp-field><cmp-field>

<field-name>nombreTitular</field-name></cmp-field><cmp-field>

<field-name>saldo</field-name></cmp-field>

<primkey-field>cuentaID</primkey-field>...

ejb-jar.xml

Deben calzarnombres demétodos accesores

Clave primaria

Nombredel esquema

>= CMP 2.0

Raúl Monge Tecnología J2EE 83

EX UMBRA SOLEMINEJB-QL en Descriptor de Despliegue

<query><query-method>

<method-name>findByNombreTitular</method-name><method-params><method-param>java.lang.String</method-param> </method-params>

</query-method><ejb-ql>

<![CDATA[SELECT OBJECT(a) FROM cuen taBean a WHERE a.nombreTitular = ?1]]></ejb-ql>

</query>

<query><query-method><method-name>findTodasCuentas</method-name><method-params></method-params></query-method><ejb-ql>

<![CDATA[SELECT OBJECT(a) FROM CuentaBean a WHERE a.cuentaID IS NOT NULL]]></ejb-ql></query>

ejb-jar.xml

Raúl Monge Tecnología J2EE 84

EX UMBRA SOLEMIN

Relaciones

Contratista

roltelefono

Contrato

idfechaComienzo

* 1

id fechaComienzo

203

496

25-03-2003

14-04-2003

rol telefono

4456-7

4572-3

654429

972345

rolCK

4456-7

4456-7

Contrato

Contratista

15

Raúl Monge Tecnología J2EE 85

EX UMBRA SOLEMINDefinición de Relación en Descriptor de Despliegue (1/2)

relationships><ejb-relation>

<ejb-relation-name>contrato-contratista</ejb-relation-name><ejb-relationship-role>

<description>contrato</description><ejb-relationship-role-name>Contrato-Pertenece-a-Contratista</ejb-relationship-role-name><multiplicity>Many</multiplicity><relationship-role-source>

<description>contrato</description><ejb-name>Contrato</ejb-name>

</relationship-role-source><cmr-field>

<description>contratista</description><cmr-field-name>contratistaLocal</cmr-field-name>

</cmr-field></ejb-relationship-role>

...

Raúl Monge Tecnología J2EE 86

EX UMBRA SOLEMINDefinición de Relación en Descriptor de Despliegue (2/2)

...<ejb-relationship-role><description>contratista</description><ejb-relationship-role-name>Contratista-Tiene-Contratos</ejb-relationship-role-name><multiplicity>One</multiplicity><relationship-role-source>

<description>contratista</description><ejb-name>Contratista</ejb-name>

</relationship-role-source><cmr-field>

<description>contratos del contratista</description><cmr-field-name>contratosLocal</cmr-field-name><cmr-field-type>java.util.Set</cmr-field-type>

</cmr-field></ejb-relationship-role>

</ejb-relation></relationships>

Departamento del InformáticaUniversidad Técnica Federico Santa María

EX UMBRA SOLEMIN

Raúl Monge Tecnología J2EE 87

5.3. Mensajería en EJB

Raúl Monge Tecnología J2EE 88

EX UMBRA SOLEMIN

Servicio de Mensajería

Permite comunicar a través de un mensaje unidireccionalUn cliente es un productor o consumidorDesacopla a los clientes de los mensajes: emisor y receptor no requieren conocerse

Middlewarede Mensajes

(MOM)Aplicación Aplicación

Raúl Monge Tecnología J2EE 89

EX UMBRA SOLEMIN

Modelo PTP

Cliente 1 Cliente 2Cola

mensaje mensaje

consumir

consumir

ACK

enviar

Raúl Monge Tecnología J2EE 90

EX UMBRA SOLEMIN

Modelo PUB/SUB

Cliente 1

Cliente 2

mensaje

suscribir

entregar

publicarTópico

mensaje

Cliente 3

mensaje

suscribir

entregar

16

Raúl Monge Tecnología J2EE 91

EX UMBRA SOLEMIN

Qué es un MDB?Es un EJB sin estado, al lado del servidorEs sólo invocado por el contenedor cuando llega un mensaje

Es un escuchador de mensajes (listener)Sólo realiza recepción asincrónica JMS

El cliente que envía el mensaje no requiere conocer al MDB (sólo el destino)Permite hacer a los MDB parte de una transacción

Raúl Monge Tecnología J2EE 92

EX UMBRA SOLEMINModelo de Interacción con MDB

DestinoJMS Instancia

MDB

Pool de MDB

Servidor EJB

Cliente

Contenedor EJB es consumidorde mensajes de destinos JMSsegún lo especificado endescriptor de despliegue

Send/Publish

Raúl Monge Tecnología J2EE 93

EX UMBRA SOLEMIN

Ejemplo de MDBpublic class LogBean implements MessageDrivenBean, MessageListener {

protected MessageDrivenContext ctx;

public void setMessageDrivenContext(MessageDrivenContext ctx) {this.ctx = ctx; }public void ejbCreate() { }public void ejbRemove() { }

}/* El método de negocio del bean */public void onMessage(Message msg) {

System.out.println("LogBean: onMessage()");TextMessage tm = (TextMessage) msg;try { String text = tm.getText();

System.out.println(".... Nuevo mensaje recibido : " + text);} catch (JMSException e) { e.printStackTrace(); }

}}

Raúl Monge Tecnología J2EE 94

EX UMBRA SOLEMIN

Cliente (1/2)import javax.naming.*;import javax.jms.*;import java.util.*;

public class Client {

public static void main (String[] args) throws Exception {

// preparar propiedades para InitialContext ... (borrado) .... Context ctx = new InitialContext(properties);

// 1: Buscar en ConnectionFactory via JNDITopicConnectionFactory factory = (TopicConnectionFactory) ctx.lookup("ConnectionFactory");

// 2: Usar ConnectionFactory para crear conexión JMSTopicConnection connection = factory.createTopicConnection();connection.start();

Raúl Monge Tecnología J2EE 95

EX UMBRA SOLEMIN

Cliente (2/2)// 3: Usar conexión para crear sesiónTopicSession session = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE)

; // 4: Buscar destinatario (topic) via JNDI Topic topic = (Topic) ctx.lookup("topic/testTopic");

// 5: Crear productor de mensajes TopicPublisher publisher = session.createPublisher(topic);

// 6: Crear un mensaje de texto y publicarloTextMessage msg = session.createTextMessage();msg.setText("Este es un mensaje de prueba."); publisher.publish(msg);

// Cerrar la conexiónpublisher.close(); session.close(); connection.close();

}}

Raúl Monge Tecnología J2EE 96

EX UMBRA SOLEMIN

Resumen

MDB permite recepción asincrónico de mensajesSon el tipo más simple de Beans

sin estadosin interfaces remotasúnico método de negocios (onMessage)

Un MDB deriva el procesamiento de un mensaje a otro bean (es intermediario)

17

Raúl Monge Tecnología J2EE 97

EX UMBRA SOLEMIN

ReferenciasEd Roman, Scott W. Ambler, Tyler Jewell, FloydMarinescu, “Mastering Enterprise JavaBeans” (2nd Edition), John Wiley & Sons, (December 14, 2001)Budi Kurniawa, “Java for the Web with Servlets, JSP, and EJB: A Developer's Guide to J2EE Solutions”, NewRiders Publishing, (April 12, 2002)Deepak Alur, John Crupi, Dan Malks, “Core J2EE Patterns: Best Practices and Design Strategies”, Sun Microsystems Press, Prentice Hall, 2001http://java.sun.com/j2ee“Tutorial de J2EE”http://java.sun.com/j2ee/tutorial/index.html