Desarrollo de aplicaciones JEE ene-09 alb@uniovi.es 1 Contenidos ene-09 alb@uniovi.es 2 Requisitos de las aplicaciones de empresa Plataformas de la tecnología Java y Java EE ene-09 alb@uniovi.es 3 Requisitos de las aplicaciones de empresa Tecnologías de infraestructura en aplicaciones de empresa ene-09 alb@uniovi.es 4 Requisitos de las aplicaciones de empresa Elementos de la tecnología Java EE ene-09 alb@uniovi.es 5 Requisitos de las aplicaciones de empresa Función de las API de Java EE ene-09 alb@uniovi.es 6 Requisitos de las aplicaciones de empresa Contenedores Java EE ene-09 alb@uniovi.es 7 Requisitos de las aplicaciones de empresa Separación de lógica de negocio y servicios ene-09 alb@uniovi.es 8 API y servicios de la plataforma Java EE Servicios Java EE: categorías De implementación: Inherentes: Persistencia Transacciones Seguridad API: Asignación de nombres Mensajería Conectores Del fabricante: Configurados en XML o con annotations ene-09 Ciclo de vida Subprocesos (threading) Comunicación con objetos remotos, como RMI y CORBA Usados desde código alb@uniovi.es Capacidad de ampliación Fail over Balanceo de carga 9 API y servicios de la plataforma Java EE Servicios Java EE ene-09 alb@uniovi.es 10 Capas y arquitecturas de la plataforma Java EE Arquitectura de N capas ene-09 alb@uniovi.es 11 Capas y arquitecturas de la plataforma Java EE JEE y las N capas ene-09 alb@uniovi.es 12 Capas y arquitecturas de la plataforma Java EE Arquitectura de N capas ene-09 alb@uniovi.es 13 Capas y arquitecturas de la plataforma Java EE Variantes en la arquitectura de N capas en JEE Centrada en la web Combinada basada en la web y en componentes EJB arquitectura centrada en componentes EJB Aplicaciones interempresariales (B2B) Aplicaciones de servicios web ene-09 alb@uniovi.es 14 Capas y arquitecturas de la plataforma Java EE Arq. centrada en la web ene-09 alb@uniovi.es 15 Capas y arquitecturas de la plataforma Java EE Arq. centrada en EJB ene-09 alb@uniovi.es 16 Capas y arquitecturas de la plataforma Java EE Arquitectura B2B ene-09 alb@uniovi.es 17 Capas y arquitecturas de la plataforma Java EE Arq. de servicios Web ene-09 alb@uniovi.es 18 Patrones Java EE Catálogo de patrones Java EE ene-09 alb@uniovi.es 19 Patrones Java EE Algunos patrones en Java EE ene-09 alb@uniovi.es 20 Contenidos ene-09 alb@uniovi.es 21 Principios de desarrollo basado en componentes Componentes Java EE Componente: A menudo una agrupación de clases e interfaces que implementan una unidad autónoma de funciones. Tipos de componentes JEE: ene-09 Servlets JSP (java servlet pages) Beans de sesion Clases entidad Beans de mensajes alb@uniovi.es 22 Principios de desarrollo basado en componentes Características de los componentes Java EE Estado y propiedades Encapsulación en un contenedor Capacidad para interacciones de componentes locales y distribuibles Transparencia de ubicación Obtención de referencias a componentes a través de un sistema de nombres ene-09 alb@uniovi.es 23 Principios de desarrollo basado en componentes Estado y propiedades de componentes Estado: Capacidad del componente para almacenar información entre invocaciones del mismo cliente: Con estado Sin estado Ventaja técnica para mayor clusterización Propiedades: Característica visible de un componente: ene-09 En Java pares getters y setters alb@uniovi.es 24 Principios de desarrollo basado en componentes Interfaces como contratos Encapsulación: ejecución dentro de un contenedor. Independencia del entorno Interfaces como contratos: Los componentes interactúan solo través de sus interfaces ene-09 Interface java alb@uniovi.es 25 Principios de desarrollo basado en componentes Interfaces como contratos ene-09 alb@uniovi.es 26 Principios de desarrollo basado en componentes Conexiones remotas (diversas tecnologías) Conexiones remotas y locales ene-09 Conexiones locales alb@uniovi.es 27 Principios de desarrollo basado en componentes RMI, remote method invocation Marshalling y unmarshalling Transmisión de excepciones Transmisión del contexto de seguridad Transmisión del contexto de transacción ene-09 alb@uniovi.es 28 Principios de desarrollo basado en componentes Implicaciones de invocación remota Cambio de semántica: Marshalling y unmarshalling Paso por valor (remotas) Paso por referencia (locales) Sobrecarga grande (10/1) Acceso remoto proporciona transparencia de ubicación ene-09 alb@uniovi.es 29 Principios de desarrollo basado en componentes Servicios de nombres en el modelo de componentes ene-09 alb@uniovi.es 30 Principios de desarrollo basado en componentes Uso del API JNDI en JEE Código a ejecutar en la parte cliente Configuración en cliente externo para localizar el servidor JNDI ene-09 alb@uniovi.es 31 Principios de desarrollo basado en componentes Uso del API JNDI en JEE El registro JNDI mantiene referencias a los beans que sirve el contenedor ene-09 alb@uniovi.es 32 Tipos de objetos retornados por JNDI Conexiones a bases de datos relacionales Conexiones a servicios de mensajería Destinos de mensajes Variables de entorno de componentes Conexiones a sistemas heredados compatibles con adaptadores de recursos Necesario hacer un cast ene-09 alb@uniovi.es 33 Principios de desarrollo basado en componentes EJBContext para localizar componentes EJBContext: contexto JNDI especializado para localizar ejb en java:comp/env ene-09 alb@uniovi.es 34 Principios de desarrollo basado en componentes Inyección de dependencias en vez de JNDI El contenedor por medio de reflectividad interviene el código en el arranque del contenedor ene-09 alb@uniovi.es 35 Modelo de comunicación asíncrona Comparación entre comunicación síncrona y asíncrona Síncrona: Semántica petición-respuesta El llamador bloquea en espera mientras el llamado resuelve Asíncrona: ene-09 Semántica petición-notificación El llamador no bloquea en espera Reduce el acoplamiento alb@uniovi.es 36 Modelo de comunicación asíncrona Interacción asíncrona de componentes ene-09 alb@uniovi.es 37 Modelo de comunicación asíncrona Ventajas e inconvenientes de las interacciones asíncronas Ventajas: Reducen acoplamiento entre componentes Mejor rendimiento de máquinas en operaciones largas Inconvenientes: Infraestructura más compleja ene-09 Servidores, buffers, notificaciones Generan más tráfico de red ¿? alb@uniovi.es 38 Desarrollo de aplicaciones Java EE Roles en JEE ene-09 alb@uniovi.es 39 Desarrollo de aplicaciones Java EE Fases de desarrollo Diseño Codificación Creación de descriptores de implementación Empaquetado Ensamblaje Despliegue ene-09 alb@uniovi.es 40 Desarrollo de aplicaciones Java EE Ensamblado de EAR ene-09 alb@uniovi.es 41 Comparación entre opciones de desarrollo Opciones para automatizar el empaquetado y el despliege Herramientas específicas Makefile Apache ANT muy usada en Java Fichero build.xml con instrucciones Solución universal Ver ejemplo IDE: ene-09 Eclipse, Netbeans alb@uniovi.es 42 Comparación entre opciones de desarrollo Sistemas de control de código fuente ene-09 alb@uniovi.es 43 Configuración y empaquetado de aplicaciones JEE Configuración y empaquetado Archivos de almacenamiento web (WAR) Archivos de almacenamiento Java (JAR) Archivos de almacenamiento de recursos (RAR) Archivos de almacenamiento empresariales (EAR) ene-09 alb@uniovi.es 44 Configuración y empaquetado de aplicaciones JEE Archivos WEB ene-09 alb@uniovi.es 45 Configuración y empaquetado de aplicaciones JEE Creación manual de .WAR ene-09 2008-2009 alb@uniovi.es DASDI 46 46 Configuración y empaquetado de aplicaciones JEE Archivos JAR Contienen módulos EJB ene-09 Clases Interfaces Descriptores de despliege Otros recursos alb@uniovi.es 47 Configuración y empaquetado de aplicaciones JEE Ejemplo estructura EJB-JAR ene-09 2008-2009 alb@uniovi.es DASDI 48 48 Configuración y empaquetado de aplicaciones JEE Archivos de recursos (RAR) Componente de más bajo nivel integrado en el framework JEE ene-09 Manipulación de Transacciones, Seguridad Llamadas nativas, manipulación de hilos, etc Adaptadores a otros sistemas, etc alb@uniovi.es 49 Configuración y empaquetado de aplicaciones JEE Archivos EAR Archivo que contiene todas las capas de la aplicación y todos los subcomponentes ene-09 alb@uniovi.es 50 Configuración y empaquetado de aplicaciones JEE Descriptores de despliege Modo declarativo de describir las interacciones entre componentes y entre componentes y sus contenedores mediante el uso de archivos XML En Java EE 5, los descriptores de implementación son optativos. Se pueden utilizar anotaciones en el código. Los descriptores de implementación, de haberlos, anulan las anotaciones en el código. ene-09 alb@uniovi.es 51 Configuración y empaquetado de aplicaciones JEE Ejemplo ejb-jar.xml ene-09 alb@uniovi.es 52 Configuración y empaquetado de aplicaciones JEE Estructura application.xml ene-09 alb@uniovi.es 53 Configuración y empaquetado de aplicaciones JEE Descriptores específicos Para cada contenedor concreto ene-09 Se especifican las características propias de ese contendor Cada contendor es distinto En un empaquetado se pueden añadir muchos descriptores distintos alb@uniovi.es 54 Configuración y empaquetado de aplicaciones JEE Ejemplo servidor Sun Java System ene-09 alb@uniovi.es 55 Contenidos ene-09 alb@uniovi.es 56 Función de los componentes web en una aplicación Java EE Arquitectura de aplicaciones Java EE centrada en la web ene-09 alb@uniovi.es 57 Función de los componentes web en una aplicación Java EE Arquitectura de aplicaciones Java EE centrada en EJB ene-09 alb@uniovi.es 58 Modelo de petición-respuesta de HTTP Protocolo HTTP ene-09 alb@uniovi.es 59 Modelo de petición-respuesta de HTTP Tipos de peticiones HTTP Un navegador puede enviar la información al servidor de varias formas: GET: Paso de parámetros en la propia URL de acceso al servicio o recurso del servidor. Método “doGet” del servlet POST: Lo mismo que GET pero los parámetros no van en la línea de URL sino en otra línea a parte. El manejo es idéntico. Método “doPost” del servlet. PUT, … ene-09 alb@uniovi.es 60 Modelo de petición-respuesta de HTTP Peticiones GET y POST Get: datos en query string Post: datos en cuerpo de la petición ene-09 Contenido del paquete HTTP alb@uniovi.es 61 Modelo de petición-respuesta de HTTP Respuesta devuelta por el servidor Entre las cabeceras de respuesta: Resultado de la petición (status-code) MIME type de los datos ene-09 200 400 401 403 404 ... – – – – – OK Bad Request Unauthorized Forbidden Not Found Codificación estándar de los tipos de datos Página HTML: text/html Documento XML: text/xml Imagen en formato JPEG: image/jpeg alb@uniovi.es 62 Comparación entre servlets y componentes JSP HolaMundo Servlet ene-09 alb@uniovi.es 63 Comparación entre servlets y componentes JSP Ejemplo de página JSP ene-09 alb@uniovi.es 64 Comparación entre servlets y componentes JSP JSP: Proceso de compilación ene-09 alb@uniovi.es 65 Comparación entre servlets y componentes JSP Ejemplo: de JSP a Servlet (Tomcat) ene-09 alb@uniovi.es 66 JSP a Servlet.service() Comparación entre servlets y componentes JSP ene-09 alb@uniovi.es 67 Servlet API ene-09 alb@uniovi.es 68 Servlets: Jerarquía No es habitual implementar Servlet directamente Heredamos de HttpServlet ene-09 alb@uniovi.es 69 Comparación entre servlets y componentes JSP Administración y ciclo de vida ene-09 alb@uniovi.es 70 Comparación entre servlets y componentes JSP Método service() Validar los datos de formulario. Actualizar el modelo de datos de la aplicación. Reunir datos del modelo que va a representarse. Representar los datos en HTML o pasar la petición y los datos a otro componente para que los represente. ene-09 alb@uniovi.es 71 Comparación entre servlets y componentes JSP Combinación de servlets y componentes JSP Lo más habitual es usar combinaciones de servlets y JSP ene-09 JSP para generar la vista Servlets para ejecutar la lógica del negocio alb@uniovi.es 72 Control de la concurrencia en componentes Web Concurrencia basada en hilos ene-09 alb@uniovi.es 73 Control de la concurrencia en componentes Web Consecuencias para el desarrollador Un único Servlet puede estar atendiendo múltiples peticiones simultáneas Precauciones al: Varios hilos ejecutándo service() posibles problemas de concurrencia Usar variables de instancia Usar variables de clase (static) Acceder a recursos externos si ellos no soportan concurrencia Posible recurso: ene-09 alb@uniovi.es 74 Control de la concurrencia en componentes Web Asignación de alias y raíz de contexto web Formato general de URI Nombre del fichero o alias de servlet que forma parte de la aplicación Nombre de la aplicación (el del paquete WAR o EAR) bank.war ene-09 alb@uniovi.es 75 Administración de sesiones Control de sesión de usuario HTTP no tiene sesión, la aplicación web debe hacerse cargo de ella Varias posibilidades tecnológicas Enviar datos de sesión al navegador Mantener datos en el servidor Cookies, URL rewriting, etc Útil si hay pocos datos El servidor necesitará más memoria Al navagador solo se envia token de sesión En JEE el contenedor se hace cargo de la gestión de la sesión y ofrece un API de gestión ene-09 alb@uniovi.es 76 Complejidad de la capa Web Problemas de desarrollo de capas web HTTP es petición-respuesta El servidor no se puede comunicar con el cliente La respuesta debe incluir una actualización de la vista Aplicaciones con muchas “pantallas” tendrán muchos servlets y muchas URLs difícil de gestionar JSP útil para presentar pero incómodo para lógica, servlets lo contrario ene-09 alb@uniovi.es 77 Complejidad de la capa Web Arquitectura Model 1 ene-09 Secundino González Pérez alb@uniovi.es 78 Complejidad de la capa Web Arquitectura Model 2 ene-09 Secundino González Pérez alb@uniovi.es 79 Patrones de diseño en la capa Web Paradigma modelo-vista-controlador ene-09 alb@uniovi.es 80 Patrones de diseño en la capa Web Arquitectura 2 y MVC ene-09 alb@uniovi.es 81 Patrones de diseño en la capa Web Patrón Business-Delegate ene-09 alb@uniovi.es 82 Patrones de diseño en la capa Web Frameworks disponibles Generalizaciones del patrón MVC Configuración XML del mapa de pantallas Acciones, Vistas, etc Struts (1 y 2) Tapestry Spring MVC WebWork Java Server faces ene-09 alb@uniovi.es 83 Contenidos ene-09 alb@uniovi.es 84 Conceptos básicos sobre el API de los servlets API genéricas y específicas de los protocolos ene-09 alb@uniovi.es 85 Conceptos básicos sobre el API de los servlets Método service() ene-09 alb@uniovi.es 86 Conceptos básicos sobre el API de los servlets Método service() en HTTPServlet Separa la petición en función del método HTTP ene-09 alb@uniovi.es 87 Conceptos básicos sobre el API de los servlets Métodos de manejo de peticiones ene-09 alb@uniovi.es 88 Conceptos básicos sobre el API de los servlets Métodos de manejo de peticiones, código ene-09 alb@uniovi.es 89 Conceptos básicos sobre el API de los servlets HolaMundo Servlet ene-09 alb@uniovi.es 90 Conceptos básicos sobre el API de los servlets Configuración de servlets En fichero web.xml Suministra información acerca del despliege de componentes en el contenedor ene-09 Página de inicio, mapes de Servlets y URLs, parámetros de configuración para servlets, recursos referenciados, etc alb@uniovi.es 91 Conceptos básicos sobre el API de los servlets Ejemplo fichero web.xml ene-09 alb@uniovi.es 92 Utilización de las API de petición y respuesta Utilización de las API de petición y respuesta Service (doGet y doPost) reciben interfaces instanciadas: “HttpServletRequest” canal de entrada con información enviada por el usuario “HttpServletResponse” canal de salida (página web) protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException { . . . } protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException { . . . ene-09 alb@uniovi.es 93 } Utilización de las API de petición y respuesta Utilización de las API de petición y respuesta WebContainer ContentType[W] Attributes[R/W/D] Writer[W] Parameters[R] OutputStream[W] Session[R/W/D] Cookies[W] Cookies [R] Redirect[W] HttpServeltRequest ene-09 HttpServletResponse service () alb@uniovi.es 94 Utilización de las API de petición y respuesta <form> y request.getParameter() ene-09 alb@uniovi.es 95 Reenvío de control y transferencia de datos Interfaz RequestDispatcher Deriva la petición a otro servlet o JSP para que complete el procesamiento ene-09 Es lo que permite que el JSP genera la vista y el servlet procese la lógica alb@uniovi.es 96 Reenvío de control y transferencia de datos Métodos forward e include forward(): La salida del componente al que se transfiere el control se convierte en la salida del componente que lo ha llamado. El componente llamante no puede generar ninguna salida por sí solo. Suelen utilizarlo los controladores (servlets) include(): ene-09 La salida del componente al que se transfiere el control se inserta en la salida que genere el componente llamante. Suelen utilizarlo las vistas (JSP) alb@uniovi.es 97 Reenvío de control y transferencia de datos Transferencia de datos en la request Permite pasar datos desde un componente a otro de la cadena de procesamiento usando la request como almacén En el JSP ene-09 alb@uniovi.es 98 Administración de sesiones Gestión de la sesión por el contenedor ene-09 alb@uniovi.es 99 Administración de sesiones Interfaz HttpSession Deprecated methods ene-09 alb@uniovi.es 100 Administración de sesiones Enlace de sesion y navegador Cookies En servidor las inserta en cada respuesta al navegador Reescribiendo todas las URL generadas por el contenedor Rewrited as ene-09 alb@uniovi.es 101 Administración de sesiones Cierre de sesión, timeout, nueva ene-09 alb@uniovi.es 102 Contenidos ene-09 alb@uniovi.es 103 Tecnología JSP como mecanismo de presentación Presentación con JSP Ventajas: ene-09 Páginas hechas por diseñadores Mejor interacción con herramientas de diseño Herramientas sencillas, editor de texto Funcionan como servlets una vez compilados Posibilidad de ejecutar lógica (aunque es mejor que solo se dediquen a presentación) alb@uniovi.es 104 Tecnología JSP como mecanismo de presentación Proceso de compilación ene-09 alb@uniovi.es 105 Tecnología JSP como mecanismo de presentación Elementos en las páginas JSP Directivas Permiten condicionar la generación del código del servlet generado Acciones Etiquetas XML que invocan a clases que generan código de salida para la petición Requisitos de buffering Página de error para redirección, etc. Acciones estándar Acciones propietarias (Tag libs) Scriptlets ene-09 Permite insertar código java que será ejecutado en el momento de la petición alb@uniovi.es 106 Creación de páginas JSP Elementos en las páginas JSP ene-09 alb@uniovi.es 107 Creación de páginas JSP Formas sintácticas de las etiquetas JSP ene-09 alb@uniovi.es 108 Creación de páginas JSP Directivas JSP Las directivas son mensajes al contenedor de JSP Ejemplos: Elemento <%@ page ... %> <%@ include ... %> <%@ taglib ... %> Descripción Permite importar clases Java, especificar el tipo de la respuesta (“text/html” por omisión), etcétera Permite incluir otros ficheros antes de que la página sea traducida a un servlet Declara una biblioteca de etiquetas con acciones personalizadas para ser utilizadas en la página Forma general: <%@ directive { attr=”value” }* %> ene-09 alb@uniovi.es 109 Creación de páginas JSP Directiva page ene-09 alb@uniovi.es 110 Creación de páginas JSP Directiva import Inserta el texto de otro recurso en tiempo de compilación ene-09 alb@uniovi.es 111 Creación de páginas JSP Ejemplo: directiva include ene-09 alb@uniovi.es 112 Creación de páginas JSP Elementos de “scripting” Elemento Descripción <% ... %> Scriptlet. se usa para meter código Java dentro <%= ... %> Expresión. Permite acceder al valor devuelto por una expresión en Java e imprimirlo en OUT <%! ... %> Declaración. Usada para declarar variables y métodos en la clase correspondiente a la página Comentario. Comentario ignorado cuando se <%-- … --%> traduce la página JSP en un servlet. (comentario en el HTML <!-- comment ) ene-09 alb@uniovi.es 113 Creación de páginas JSP Ejemplo: expresión, saludo.jsp <%= expresión ene-09 Nota: Si se necesita usar los caracteres "%>" dentro de un scriptlet, hay que usar "%\>" y “<\%” alb@uniovi.es 114 Creación de páginas JSP Ejemplo: scriptlet, saludo.jsp <% ene-09 alb@uniovi.es 115 Creación de páginas JSP Ejemplo: declaración, saludo.jsp <%! ene-09 alb@uniovi.es 116 Creación de páginas JSP JSP: Objetos predefinidos El código java incrustado en JSP tiene acceso a los mismos objetos predefinidos que tenían los servlets Aquí se llaman como sigue: ene-09 request response pageContext session application out config Se puede acceder a ellos directamente desde los “scriptlets” alb@uniovi.es 117 Procesamiento de datos de servlets Acciones JSP Etiquetas XML que tienen procesamiento asociado ene-09 alb@uniovi.es 118 Procesamiento de datos de servlets <jsp:useBean ene-09 alb@uniovi.es 119 Procesamiento de datos de servlets <jsp:useBean id=“” ene-09 alb@uniovi.es 120 Procesamiento de datos de servlets Ambitos JSP ene-09 alb@uniovi.es 121 Procesamiento de datos de servlets Recuperando beans de la request ene-09 alb@uniovi.es 122 Bibliotecas de etiquetas personalizadas Directiva taglib Declara que la página usa una librería de tags (acciones) <%@ taglib uri=”http://www.mycorp/supertags” prefix=”super” %> ... Alias definido en web.xml <super:doMagic> ... </super:doMagic> Identifica la librería por su URI Syntax ene-09 Le asocia un prefijo para usar en el código de la JSP alb@uniovi.es 123 <%@ taglib ( uri=”tagLibraryURI” | tagdir=”tagDir” ) prefix=”tagPrefix” %> Bibliotecas de etiquetas personalizadas Ejemplo de uso de JSTL y EL ene-09 alb@uniovi.es 124 Contenidos ene-09 alb@uniovi.es 125 Función de los componentes EJB Tipos de EJB Además de los componentes EJB, el contenedor EJB también pueden contener clases entidad JPA y otras clases auxiliares y de utilidad general. ene-09 alb@uniovi.es 126 Función de los componentes EJB Solución en capas Service Interface Control Action Action Action Action Session Beans implementan el patrón Fachada Clases Java implementan el modelo del dominio Persistence Interface Fa ca de Fa ca de Hibernate DAO Procs Procs Procs Model Model Model JDBC JDBC DAO JPA DAO Spring DAO Procs DAO Factory Presentac. ene-09 ene-09 Lógica alb@uniovi.es Persistencia 127127 Función de los componentes EJB Capas de EJBs ene-09 alb@uniovi.es 128 Función de los componentes EJB Interfaces Context EJBContext SessionContext MessageContext Permiten al componente EJB interaccionar con el contenedor ene-09 Seguridad Transacciones Búsquedas JNDI alb@uniovi.es 129 Análisis del modelo de componentes EJB Función del contenedor EJB ene-09 alb@uniovi.es 130 Objetos EJB y proxies Intercepta las llamadas y toma el control ene-09 ene-09 Clase que se programa EJBObject alb@uniovi.es 131131 Conexión local Interfaz local EJB Container Vistas de cliente locales y distribuidas ene-09 ene-09 alb@uniovi.es alb@uniovi.es 132132 Conexión remota Interfaz remota EJB Container Vistas de cliente locales y distribuidas ene-09 ene-09 alb@uniovi.es alb@uniovi.es 133133 Invocación de stateless: cliente Este código se ejecuta en ene-09 ene-09 otra máquina (JVM) El cliente necesita acceso a la implementación del stub El stub se obtiene de un registro JNDI alb@uniovi.es 134134 Llamada a EJB desde servlets Servlet con referencia un bean de sesión remoto sin estado La referencia se guarda en atributo de instancia El bean staless es concurrente (thread safe) Se inicializa en el init() ene-09 alb@uniovi.es 135 Llamada a EJB desde servlets Servlet con referencia a través de anotaciones Inyección de referencias Solo es posible en componentes gestionados por el contenedor No hace falta contexto ni búsqueda JNDI. El contenedor asigna un valor a la variable de la referencia bankMgr cuando se instancia el servlet. La inicialización no genera excepciones. ene-09 alb@uniovi.es 136 Contenidos ene-09 alb@uniovi.es 137 Comparación de comportamientos con y sin estado Mantenimiento del estado Capa de usuario (programa cliente) Capa Web En HttpSession Carrito de la compra Datos en varias páginas Capa de negocio (EJB) Trasiego de datos En EJBs con estado Capa de base de datos ene-09 alb@uniovi.es 138 Características de los beans sin estado Beans sin estado El bean no retiene información del cliente. Entre invocaciones es posible que un cliente no obtenga la misma instancia de bean de sesión. Una misma instancia de bean de sesión puede manejar cualquier número de solicitudes de cliente. ene-09 Mejora de rendimiento. alb@uniovi.es 139 Características de los beans sin estado Beans sin estado Cuidado con los atributos de instancia ene-09 alb@uniovi.es 140 Características de los beans con estado Beans con estado ene-09 alb@uniovi.es 141 Creación de beans de sesión Adaptación de una clase Java a EJB sin sesión Declarar interfaz de negocio anotaciones Definir clase de implementación ene-09 alb@uniovi.es 142 Creación de beans de sesión Interfaces locales y remotas La implementación se puede anotar con @Remote pero no con @Local y @Remote a la vez ene-09 Un implementación puede ser remota y local pero las anotaciones van en cada interfaz alb@uniovi.es 143 Creación de beans de sesión Interfaces locales y remotas La implementación se puede anotar con @Remote pero no con @Local y @Remote a la vez Un implementación puede ser remota y local pero las anotaciones van en cada interfaz ene-09 alb@uniovi.es 144 Creación de beans de sesión Requisitos de la clase de implementación pública, no debe ser final ni abstracta Constructor público que no acepte parámetros. El contenedor utiliza este constructor para crear instancias de la clase de bean de sesión. No debe definir el método finalize. ene-09 alb@uniovi.es 145 Creación de beans de sesión Todas las anotaciones Tipo de bean Tipo de acceso @Remove Acceso a recursos desde el EJB @Remote, @Local Cierre de sesión (en Statefull) @Stateless, @Statefull @EJB, @Resource Ciclo de vida ene-09 @PostConstruct, @PreDestroy, alb@uniovi.es (Sólo statefull) @PostActivate, @PrePassivate 146 Creación de beans de sesión Ciclo de vida de session beans sin estado ene-09 alb@uniovi.es 147 Creación de beans de sesión Ciclo de vida de session beans con estado ene-09 alb@uniovi.es 148 Creación de beans de sesión Objeto SessionContext Proporciona acceso al EJBObject (al contenedor) ene-09 Entorno de seguridad Información sobre el control de la transacción Acceso a JNDI alb@uniovi.es 149 Empaquetado y despliegue de beans de sesión Metadatos de despliegue En EJB 3.0: anotaciones y/o xml Con anotaciones no es necesario el xml Si están presentes los dos, el xml revoca las configuraciones de anotaciones Descriptores JEE: ene-09 Web: web.xml EJB: ejb-jar.xml Aplicaciones completas: application.xml alb@uniovi.es 150 Empaquetado y despliegue de beans de sesión Ejemplo de ejb-jar.xml ene-09 alb@uniovi.es 151 Empaquetado y despliegue de beans de sesión Empaquetado Web: <nombre>.war EJB: <nombre>.jar Aplicaciones: <nombre>.ear ene-09 Archivo JAR nomal Descriptor ejb-jar.xml en /META-INF Contiene WAR + JAR Descriptor application.xml en /META-INF alb@uniovi.es 152 Creación de un cliente bean de sesión Posibles clientes Otro EJB de sesion Un servlet (o JSP compilado) Clase Java normal ¿Cómo obtener una referencia al EJB? ene-09 Depende de si el cliente se ejecuta en un contenedor o no (si es EJB/servlet o clase normal) alb@uniovi.es 153 Creación de un cliente bean de sesión Con servicios de contenedor Servlet o EJB local El contenedor inyecta la referencia ene-09 alb@uniovi.es 154 Creación de un cliente bean de sesión Con servicios de contenedor Servlet o EJB remoto (en otro contenedor) Búsqueda JNDI En ejb-jar.xml o web.xml ene-09 alb@uniovi.es 155 Creación de un cliente bean de sesión Sin servicios de contenedor Clase Java (local o remota) Se deben usar los servicios JNDI ene-09 alb@uniovi.es 156 Contenidos ene-09 alb@uniovi.es 157 API de persistencia de Java Persistencia Necesidad de que los datos manejados sobrevivan tras la ejecución a del programa Muchas técnicas y tecnologías (ficheros, serialización, bases de datos, etc) JPA: especificación de un mapeador objeto/relacional ene-09 alb@uniovi.es 158 Mapeadores objeto/relacional Mapeador ORM Diseño e implementación con OO pero persistencia en BDD relacional Diferentes paradigmas (diferencias estructurales, dinámicas, etc) Se busca tener persistencia automática y (casi) transparente ene-09 Los objetos son persistentes (en BDDR) sin apenas programación (mucho ahorro de código tedioso) alb@uniovi.es 159 Requisitos de una clase Entidad Clases Entidad Representan conceptos del modelo de dominio Relacionadas con otros son el modelo del dominio Conjunto de clases que representan los conceptos principales del problema (núcleo de la funcionalidad del programa) Otras clases de proceso (p.e: EJBs de sesión) las manipulan ene-09 alb@uniovi.es 160 Requisitos de una clase Entidad Clase Java como Entidad Deben seguir convenio Java Beans: Setters y getters Constructor sin parámetros Recomendable Serializable hashCode() y equals() redefinido Campo Identificador (clave) Colecciones para asociaciones many ene-09 Puede ser Set<T>, List<T>, Map<T> o Collection<T> (interfaces) alb@uniovi.es 161 ene-09 alb@uniovi.es 162 Requisitos de una clase Entidad Modelo de dominio en código ene-09 alb@uniovi.es 163 Requisitos de una clase Entidad De clase a tabla ene-09 alb@uniovi.es 164 Requisitos de una clase Entidad Campos persistentes o propiedades Acceso field: se anotan los atributos Acceso properties: se anotan los getters ene-09 alb@uniovi.es 165 Requisitos de una clase Entidad Tipos Java persistentes Tipos primitivos Java Envoltorios Java, como java.lang.Integer java.lang.String byte[] y Byte[] char[] y Character[] Los tipos serializables, incluidos, entre otros: ene-09 java.util.Date, java.sql.TimeStamp Cualquier otra clase del programa alb@uniovi.es 166 Ciclo de vida de las entidades Conceptos básicos Unidad de persistencia Administrador de entidades Controla el ciclo de vida de la entidades: salvar, borrar, recuperar, buscar (CRUD) Contexto de persistencia Conjunto de clases administradas por el ORM Descriptor persistence.xml Estado de la entidad con respecto al administrador de entidades Identidad persistence ene-09 Vínculo del objeto java con el registro en la tabla Dentro de un contexto de persistencia un objeto java es único No confundir con la identidad java alb@uniovi.es 167 Ciclo de vida de las entidades Archivo persistence.xml Define las clases que forman parte de la persistence-unit (por su presencia) Especifica el DataSource ene-09 alb@uniovi.es 168 Ciclo de vida de las entidades Ejemplo de uso de EntityManager ene-09 alb@uniovi.es 169 Ciclo de vida de las entidades Estados de un objeto persistente ene-09 alb@uniovi.es JVM 170 Ciclo de vida de las entidades Notificación de cambios de estado Especificación de métodos callback con anotaciones ene-09 @PrePersist @PostPersist @PreRemove @PostRemove @PreUpdate @PostUpdate @PostLoad alb@uniovi.es 171 Ciclo de vida de las entidades Estructura típica de archivo ejb-jar ene-09 alb@uniovi.es 172 Ciclo de vida de las entidades API JPA ene-09 alb@uniovi.es 173 Ciclo de vida de las entidades Consultas, lenguaje de consulta El EntityManager permite la creación de objetos Query NativeQuery NamedQuery Consulta externalizada a fichero xml (orm.xml) Query ene-09 SQL nativo de la BDD Expresadas en JPA-QL Lenguaje de consultas OO independiente de la BDD alb@uniovi.es 174 Ciclo de vida de las entidades Ejemplo de Queries ene-09 alb@uniovi.es 175 Contenidos ene-09 alb@uniovi.es 176 Semántica transaccional Transacciones ACID Es la demarcación de una unidad de trabajo JPA permite trabajar con varios API de transacciones ene-09 JSE JDBC JTA Declarativas (EJB) alb@uniovi.es 177 Semántica transaccional Control de concurrencia Las trx ACID crean la ilusión de que cada usuario es único en la base de datos aíslan a unos de otros El aislamiento tradicionalmente se consigue con bloqueos a nivel de fila, de rangos o de tabla: De lectura (compartido) todos podemos leer pero nadie escribir De escritura (exclusivo) nadie puede leer porque voy a escribir y nadie más puede escribir Las transacciones JEE en contendor pueden ser distribuidas ene-09 alb@uniovi.es 178 Transacciones programáticas y declarativas Control de la trx Programáticas: el programador se hace cargo de la gestión usando el JTA Acceso a la trx en curso por JNDI Declarativas: se especifica para cada operación su comportamiento transaccional ene-09 El contendor se encarga de la gestión Anotaciones o xml alb@uniovi.es 179 Controlar transacciones programáticas JTA Control usando JTA Acceso JNDI o anotacion ene-09 alb@uniovi.es 180 Controlar transacciones programáticas JTA Ejemplo de control de transacción ene-09 alb@uniovi.es 181 Transacciones administradas por el contenedor Control por el contenedor El atributo de la trx controla el ciclo de vida de la transacción en curso ene-09 Required RequiresNew NotSupported Supports Mandatory Never alb@uniovi.es 182 Transacciones administradas por el contenedor Coordinador de transacciones ene-09 alb@uniovi.es 183 Bloqueo optimista y control de versiones Control pesimista y optimista ROLLBACK Lock Lock v1.0 Lock ROLLBACK PESIMISTA ene-09 v1.0 v2.0 En BDD ya no es v1.0 OPTIMISTA Alberto alb@uniovi.es M.F.A. alb@uniovi.es 184 Bloqueo optimista y control de versiones Control optimista Diferencia entre trx de sistema y trx de aplicación El control optimista además permite detectar cambios en actualizaciones entre trx de sistema La solución optimista es añadir versión a los objetos ene-09 Alberto alb@uniovi.es M.F.A. alb@uniovi.es 185 Bloqueo optimista y control de versiones Versionado de objetos con campo versión Añadir información al objeto para poder detectar cambios entre el estado detached y persistent ene-09 Campo versión (un entero) Timestamp (de la última modificación) Alberto alb@uniovi.es M.F.A. alb@uniovi.es 186 Bloqueo optimista y control de versiones Tipos válidos para versionado Mapeado de campos ! Sin get/set JPA gestiona los campos versión de forma automática ene-09 Alberto alb@uniovi.es M.F.A. alb@uniovi.es 187 Excepciones durante una transacción Excepciones JPA Todas las excepciones JPA son fatales y dejan el contexto de persistencia inutilizado Todas las excepciones lanzadas por EntityManager provocan rollback() Todas las de Query tb, excepto NoResultException y NonUniqueResultException. Todas NO chequeadas ene-09 Alberto alb@uniovi.es M.F.A. alb@uniovi.es 188 Excepciones durante una transacción Chequeadas y no chequeadas No chequeadas provocan rollback Las chequedas por sí solas no Trx distribuidas: Otro agente puede provocar rollback y ya lo notificó comprobar si la trx está marcada para rollback Uso de EJBContext ene-09 getRollbackOnly setRollbackOnly alb@uniovi.es 189 Contenidos ene-09 alb@uniovi.es 190 Tecnología del API JMS Middleware orientado a mensajes (MOM) Permite conexiones desacopladas entre sistemas Facilita la integración entre sistemas de tecnologías dispares Añaden una capa intermedia La interacción entre sistemas se basa en intercambio de mensajes (o eventos) ene-09 alb@uniovi.es 191 Tecnología del API JMS MOM como integrador Distribución de mensajes Clientes de mensajería ene-09 alb@uniovi.es 192 Tecnología del API JMS Tipos de clientes de mensajería Se bloquea esperando la llegada de un mensaje ene-09 alb@uniovi.es 193 Tecnología del API JMS Arquitectura de mensajería punto a punto Cuando el consumidor recoge el mensaje se borra de la cola Puede haber múltiples consumidores, pero “el primero que llega se lo lleva” También pude haber múltiples productores enviando a la misma cola ene-09 alb@uniovi.es 194 Tecnología del API JMS Arquitectura de mensajería de publicación/suscripción El tema es como una lista de distribución El mensaje se conserva hasta que todos los suscritos lo consumen ene-09 alb@uniovi.es 195 Tecnología del API JMS Elementos del API JMS ene-09 alb@uniovi.es 196 Tecnología del API JMS Estructura de los mensajes ene-09 alb@uniovi.es 197 Creación de un productor de mensajes de cola Diagrama de colaboración ene-09 alb@uniovi.es 198 Ejemplo Creación de un productor de mensajes de cola ene-09 alb@uniovi.es 199 Creación de un consumidor de mensajes síncrono Diagrama de colaboración ene-09 alb@uniovi.es 200 Ejemplo Creación de un consumidor de mensajes síncrono ene-09 alb@uniovi.es 201 Creación de un consumidor de mensajes asíncrono Método gestor del evento ene-09 alb@uniovi.es 202 Creación de un consumidor de mensajes asíncrono ene-09 alb@uniovi.es 203 EJB como clientes de mensajería EJB como clientes de mensajería ene-09 alb@uniovi.es 204 Contenidos ene-09 alb@uniovi.es 205 Introducción a los beans controlados por mensajes MessageDriven Beans Son clientes asíncronos de mensajes Implementan el interfaz MessageListener Desconectados de cliente ene-09 alb@uniovi.es 206 Introducción a los beans controlados por mensajes Ciclo de vida Posible interceptar los cambios de estado @PostConstruct @PreDestroy ene-09 alb@uniovi.es 207 Creación de un bean controlado por mensajes Código ejemplo ene-09 alb@uniovi.es 208 Creación de un bean controlado por mensajes Filtra los mensajes que llegan ene-09 alb@uniovi.es 209 Contenidos ene-09 alb@uniovi.es 210 Finalidad de los servicios web Servicios Web W3C: “sistema de software diseñado para permitir la interacción interoperable entre máquinas en una red” Características: Independencia de plataforma (Hw + SO) Uso de tecnologías Internet: XML, HTTP, etc Interoperabilidad de programas: clientes y servidores escritos en cualquier lenguaje Invocación a servicios ofrecidos como procedimientos ene-09 alb@uniovi.es 211 Finalidad de los servicios web Servicios web como componentes remotos Mismo paradigma que otras soluciones anteriores: CORBA RMI RPC DCOM Diferencia técnica: Se emplean tecnologías estándares abiertas Internet ene-09 XML, SOAP HTTP, SMTP alb@uniovi.es 212 Finalidad de los servicios web Comparación entre servicios web y EJB remotos La implementación del servicio web similar a un EJB de sesión El registro JNDI podría ser el registro UDDI de los WS El protocolo de transporte HTTP en vez de RMI-IIOP Los datos se transfieren en XML (SOAP) en ves de serializados ene-09 alb@uniovi.es 213 Especificaciones de los servicios web Requisitos de interoperabilidad Intercambio de mensajes HTTP y XML Se necesita cerrar más las posibilidades ene-09 SOAP especificación XML para intercambio de invocaciones y respuestas WSDL descripción “semántica” de los servicios ofrecidos (el interfaz) HTTP métodos y cabeceras estandarizados UDDI norma de publicación y búsqueda de servicios ofrecidos alb@uniovi.es 214 Especificaciones de los servicios web Arquitectura de WS ene-09 alb@uniovi.es 215 Especificaciones de los servicios web Ejemplo mensajes SOAP Petición Respuesta ene-09 alb@uniovi.es 216 Especificaciones de los servicios web Ejemplo WSDL “hola mundo” Estructura general de documento WSDL ene-09 alb@uniovi.es 217 APIs de Java relacionados con servicios web APIs java para WS - + Complejidad JDOM JAXP Java API for XML procesing JAXB Java API for XML binding JAX-RPC Java API for RPC JAXR Java API for UDDI registry SAAJ SOAP API with Attachements JAX-WS Java API for WebServices ene-09 API de más alto nivel Usa todas las demás por debajo Permite manejo de WS sin conocimientos de XML, SOAP, etc alb@uniovi.es 218 Contenidos ene-09 alb@uniovi.es 219 Puntos finales servlet JAX-WS Punto final un Servlet web.xml ene-09 alb@uniovi.es 220 Puntos finales EJB JAX-WS Punto final un EJB ene-09 alb@uniovi.es 221 Puntos finales EJB JAX-WS Tipos de datos admitidos en JAX-WS Se pueden transferir tipos básicos a WS Tipos complejos deben marcados ene-09 alb@uniovi.es 222 Clientes de servicios Web Desarrollo de clientes Es necesario disponer del WSDL A partir del archivo de especificación se pueden generar clases proxy Las usa el cliente Se encargan de localizar el servicio y realizar las conversiones Java SOAP También es posible generar el proxy dinámicamente ene-09 alb@uniovi.es 223 Clientes de servicios Web Ejemplo Cliente con proxy dinámico Cliente con proxy estático ene-09 alb@uniovi.es 224 Contenidos ene-09 alb@uniovi.es 225 Seguridad administrada por el contenedor Conceptos de seguridad Autenticación Autorización Verificar que tiene permiso para la operación que solicita Confidencialidad Asegurar la identidad del usuario Impedir el espionaje de datos en transporte Integridad ene-09 Detectar la corrupción de los mensajes en el transporte alb@uniovi.es 226 Seguridad administrada por el contenedor Conceptos Autenticación y autorización pueden ser gestionados por JEE No es aconsejable usar estrategias de seguridad programáticas poco portables, poco maduras Confidencialidad e integridad conseguidas con un protocolo de transporte seguro ene-09 SSL (TLS) alb@uniovi.es 227 Seguridad administrada por el contenedor Propagación del contexto de seguridad ene-09 alb@uniovi.es 228 Seguridad administrada por el contenedor Seguridad para WEB (HTTPS) HTTPS = HTTP Secure HTTP sobre un protocolo de transporte seguro ene-09 HTTP SSL TCP SSL también es conocido como TLS según IETF ene-09 Albertoalb@uniovi.es M.F.A. 229229 Seguridad administrada por el contenedor SSL (o TLS) El servidor tiene un certificado Permite intercambio seguro de datos (p.e. claves de sesión) Usa algoritmos de clave simétrica y Del servidor siempre, asimétrica del cliente si tiene certificado Ofrece: ene-09 opcionalmente el cliente tiene el suyo Autentificación Confidencialidad Integridad alb@uniovi.es 230 Seguridad administrada por el contenedor Autenticación administrada por contenedor web ene-09 alb@uniovi.es 231 Seguridad administrada por el contenedor Especificación ene-09 En web.xml Una colección de recursos (URLs) solo podrán ser accedidos por usuarios que actúen bajo determinado rol usando determinados métodos HTTP La autenticación para cada ámbito de seguridad (realm) se hará usando alguna de las técnicas establecidas por la especificación de servlets alb@uniovi.es 232 Seguridad administrada por el contenedor web.xml Colección de recursos, roles y métodos Si no hay método todos están protegidos ene-09 alb@uniovi.es 233 Seguridad administrada por el contenedor web.xml Roles Técnicas ene-09 alb@uniovi.es 234 Seguridad administrada por el contenedor Tipos de autenticación soportados BASIC DIGEST FORM CLIENT-CERT ene-09 alb@uniovi.es 235 Seguridad administrada por el contenedor Autentificación por Formulario No es segura por sí sola, es necesario combinarla con HTTPs (SSL – Secure Socket Layer) Permite controlar la apariencia de la pantalla de login La pantalla de login es HTML estándar, sigue un convenio de nombres ene-09 Action: j_security_check Login: j_username Pass: j_password alb@uniovi.es 236 Seguridad administrada por el contenedor Interacción con la infraestructura de seguridad BDD de usuarios y roles El contenedor consulta los datos de una fuente directamente Tipos de fuentes y configuración dependen de la implementación del contenedor ene-09 Base de datos (tablas: usuarios, roles) Ficheros XML Ficheros de propiedades ... Consultar documentación del alb@uniovi.es contenedor 237 Roles y responsabilidades del usuario Usuarios y roles ene-09 alb@uniovi.es 238 Roles y responsabilidades del usuario Autorización basada en funciones en la capa EJB ene-09 alb@uniovi.es 239 Utilización del API de seguridad Métodos de API Métodos en web: getUserPrincipal y isUserInRole Métodos en EJB: ene-09 getCallerPrincipal y isCallerInRole alb@uniovi.es 240 Utilización del API de seguridad API de seguridad de la capa web ene-09 alb@uniovi.es 241 Utilización del API de seguridad API de seguridad de la capa EJB ene-09 alb@uniovi.es 242 Seguridad HTTP y clientes JAX-WS Autenticar clientes de WS Mismo caso que el del navegador web En el paquete HTTP debe ir la autenticación de usuario (sobre SSL) Si el WSDL está protegido el cliente debe tener una copia local ene-09 alb@uniovi.es 243