Desarrollo de Aplicaciones Distribuidas Con J2EE
-
Upload
galo-salinas -
Category
Documents
-
view
31 -
download
3
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