Desarrollo de aplicaciones JEE ene-09 [email protected] 1 Contenidos ene-09 [email protected] 2 Requisitos de las aplicaciones de empresa Plataformas de la tecnología Java y Java EE ene-09 [email protected] 3 Requisitos de las aplicaciones de empresa Tecnologías de infraestructura en aplicaciones de empresa ene-09 [email protected] 4 Requisitos de las aplicaciones de empresa Elementos de la tecnología Java EE ene-09 [email protected] 5 Requisitos de las aplicaciones de empresa Función de las API de Java EE ene-09 [email protected] 6 Requisitos de las aplicaciones de empresa Contenedores Java EE ene-09 [email protected] 7 Requisitos de las aplicaciones de empresa Separación de lógica de negocio y servicios ene-09 [email protected] 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 [email protected] Capacidad de ampliación Fail over Balanceo de carga 9 API y servicios de la plataforma Java EE Servicios Java EE ene-09 [email protected] 10 Capas y arquitecturas de la plataforma Java EE Arquitectura de N capas ene-09 [email protected] 11 Capas y arquitecturas de la plataforma Java EE JEE y las N capas ene-09 [email protected] 12 Capas y arquitecturas de la plataforma Java EE Arquitectura de N capas ene-09 [email protected] 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 [email protected] 14 Capas y arquitecturas de la plataforma Java EE Arq. centrada en la web ene-09 [email protected] 15 Capas y arquitecturas de la plataforma Java EE Arq. centrada en EJB ene-09 [email protected] 16 Capas y arquitecturas de la plataforma Java EE Arquitectura B2B ene-09 [email protected] 17 Capas y arquitecturas de la plataforma Java EE Arq. de servicios Web ene-09 [email protected] 18 Patrones Java EE Catálogo de patrones Java EE ene-09 [email protected] 19 Patrones Java EE Algunos patrones en Java EE ene-09 [email protected] 20 Contenidos ene-09 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 25 Principios de desarrollo basado en componentes Interfaces como contratos ene-09 [email protected] 26 Principios de desarrollo basado en componentes Conexiones remotas (diversas tecnologías) Conexiones remotas y locales ene-09 Conexiones locales [email protected] 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 [email protected] 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 [email protected] 29 Principios de desarrollo basado en componentes Servicios de nombres en el modelo de componentes ene-09 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 33 Principios de desarrollo basado en componentes EJBContext para localizar componentes EJBContext: contexto JNDI especializado para localizar ejb en java:comp/env ene-09 [email protected] 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 [email protected] 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 [email protected] 36 Modelo de comunicación asíncrona Interacción asíncrona de componentes ene-09 [email protected] 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 ¿? [email protected] 38 Desarrollo de aplicaciones Java EE Roles en JEE ene-09 [email protected] 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 [email protected] 40 Desarrollo de aplicaciones Java EE Ensamblado de EAR ene-09 [email protected] 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 [email protected] 42 Comparación entre opciones de desarrollo Sistemas de control de código fuente ene-09 [email protected] 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 [email protected] 44 Configuración y empaquetado de aplicaciones JEE Archivos WEB ene-09 [email protected] 45 Configuración y empaquetado de aplicaciones JEE Creación manual de .WAR ene-09 2008-2009 [email protected] 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 [email protected] 47 Configuración y empaquetado de aplicaciones JEE Ejemplo estructura EJB-JAR ene-09 2008-2009 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 51 Configuración y empaquetado de aplicaciones JEE Ejemplo ejb-jar.xml ene-09 [email protected] 52 Configuración y empaquetado de aplicaciones JEE Estructura application.xml ene-09 [email protected] 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 [email protected] 54 Configuración y empaquetado de aplicaciones JEE Ejemplo servidor Sun Java System ene-09 [email protected] 55 Contenidos ene-09 [email protected] 56 Función de los componentes web en una aplicación Java EE Arquitectura de aplicaciones Java EE centrada en la web ene-09 [email protected] 57 Función de los componentes web en una aplicación Java EE Arquitectura de aplicaciones Java EE centrada en EJB ene-09 [email protected] 58 Modelo de petición-respuesta de HTTP Protocolo HTTP ene-09 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 62 Comparación entre servlets y componentes JSP HolaMundo Servlet ene-09 [email protected] 63 Comparación entre servlets y componentes JSP Ejemplo de página JSP ene-09 [email protected] 64 Comparación entre servlets y componentes JSP JSP: Proceso de compilación ene-09 [email protected] 65 Comparación entre servlets y componentes JSP Ejemplo: de JSP a Servlet (Tomcat) ene-09 [email protected] 66 JSP a Servlet.service() Comparación entre servlets y componentes JSP ene-09 [email protected] 67 Servlet API ene-09 [email protected] 68 Servlets: Jerarquía No es habitual implementar Servlet directamente Heredamos de HttpServlet ene-09 [email protected] 69 Comparación entre servlets y componentes JSP Administración y ciclo de vida ene-09 [email protected] 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 [email protected] 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 [email protected] 72 Control de la concurrencia en componentes Web Concurrencia basada en hilos ene-09 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 77 Complejidad de la capa Web Arquitectura Model 1 ene-09 Secundino González Pérez [email protected] 78 Complejidad de la capa Web Arquitectura Model 2 ene-09 Secundino González Pérez [email protected] 79 Patrones de diseño en la capa Web Paradigma modelo-vista-controlador ene-09 [email protected] 80 Patrones de diseño en la capa Web Arquitectura 2 y MVC ene-09 [email protected] 81 Patrones de diseño en la capa Web Patrón Business-Delegate ene-09 [email protected] 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 [email protected] 83 Contenidos ene-09 [email protected] 84 Conceptos básicos sobre el API de los servlets API genéricas y específicas de los protocolos ene-09 [email protected] 85 Conceptos básicos sobre el API de los servlets Método service() ene-09 [email protected] 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 [email protected] 87 Conceptos básicos sobre el API de los servlets Métodos de manejo de peticiones ene-09 [email protected] 88 Conceptos básicos sobre el API de los servlets Métodos de manejo de peticiones, código ene-09 [email protected] 89 Conceptos básicos sobre el API de los servlets HolaMundo Servlet ene-09 [email protected] 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 [email protected] 91 Conceptos básicos sobre el API de los servlets Ejemplo fichero web.xml ene-09 [email protected] 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 [email protected] 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 () [email protected] 94 Utilización de las API de petición y respuesta <form> y request.getParameter() ene-09 [email protected] 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 [email protected] 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) [email protected] 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 [email protected] 98 Administración de sesiones Gestión de la sesión por el contenedor ene-09 [email protected] 99 Administración de sesiones Interfaz HttpSession Deprecated methods ene-09 [email protected] 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 [email protected] 101 Administración de sesiones Cierre de sesión, timeout, nueva ene-09 [email protected] 102 Contenidos ene-09 [email protected] 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) [email protected] 104 Tecnología JSP como mecanismo de presentación Proceso de compilación ene-09 [email protected] 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 [email protected] 106 Creación de páginas JSP Elementos en las páginas JSP ene-09 [email protected] 107 Creación de páginas JSP Formas sintácticas de las etiquetas JSP ene-09 [email protected] 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 [email protected] 109 Creación de páginas JSP Directiva page ene-09 [email protected] 110 Creación de páginas JSP Directiva import Inserta el texto de otro recurso en tiempo de compilación ene-09 [email protected] 111 Creación de páginas JSP Ejemplo: directiva include ene-09 [email protected] 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 [email protected] 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 “<\%” [email protected] 114 Creación de páginas JSP Ejemplo: scriptlet, saludo.jsp <% ene-09 [email protected] 115 Creación de páginas JSP Ejemplo: declaración, saludo.jsp <%! ene-09 [email protected] 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” [email protected] 117 Procesamiento de datos de servlets Acciones JSP Etiquetas XML que tienen procesamiento asociado ene-09 [email protected] 118 Procesamiento de datos de servlets <jsp:useBean ene-09 [email protected] 119 Procesamiento de datos de servlets <jsp:useBean id=“” ene-09 [email protected] 120 Procesamiento de datos de servlets Ambitos JSP ene-09 [email protected] 121 Procesamiento de datos de servlets Recuperando beans de la request ene-09 [email protected] 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 [email protected] 123 <%@ taglib ( uri=”tagLibraryURI” | tagdir=”tagDir” ) prefix=”tagPrefix” %> Bibliotecas de etiquetas personalizadas Ejemplo de uso de JSTL y EL ene-09 [email protected] 124 Contenidos ene-09 [email protected] 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 [email protected] 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 [email protected] Persistencia 127127 Función de los componentes EJB Capas de EJBs ene-09 [email protected] 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 [email protected] 129 Análisis del modelo de componentes EJB Función del contenedor EJB ene-09 [email protected] 130 Objetos EJB y proxies Intercepta las llamadas y toma el control ene-09 ene-09 Clase que se programa EJBObject [email protected] 131131 Conexión local Interfaz local EJB Container Vistas de cliente locales y distribuidas ene-09 ene-09 [email protected] [email protected] 132132 Conexión remota Interfaz remota EJB Container Vistas de cliente locales y distribuidas ene-09 ene-09 [email protected] [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 136 Contenidos ene-09 [email protected] 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 [email protected] 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. [email protected] 139 Características de los beans sin estado Beans sin estado Cuidado con los atributos de instancia ene-09 [email protected] 140 Características de los beans con estado Beans con estado ene-09 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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, [email protected] (Sólo statefull) @PostActivate, @PrePassivate 146 Creación de beans de sesión Ciclo de vida de session beans sin estado ene-09 [email protected] 147 Creación de beans de sesión Ciclo de vida de session beans con estado ene-09 [email protected] 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 [email protected] 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 [email protected] 150 Empaquetado y despliegue de beans de sesión Ejemplo de ejb-jar.xml ene-09 [email protected] 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 [email protected] 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) [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 156 Contenidos ene-09 [email protected] 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 [email protected] 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) [email protected] 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 [email protected] 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) [email protected] 161 ene-09 [email protected] 162 Requisitos de una clase Entidad Modelo de dominio en código ene-09 [email protected] 163 Requisitos de una clase Entidad De clase a tabla ene-09 [email protected] 164 Requisitos de una clase Entidad Campos persistentes o propiedades Acceso field: se anotan los atributos Acceso properties: se anotan los getters ene-09 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 168 Ciclo de vida de las entidades Ejemplo de uso de EntityManager ene-09 [email protected] 169 Ciclo de vida de las entidades Estados de un objeto persistente ene-09 [email protected] 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 [email protected] 171 Ciclo de vida de las entidades Estructura típica de archivo ejb-jar ene-09 [email protected] 172 Ciclo de vida de las entidades API JPA ene-09 [email protected] 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 [email protected] 174 Ciclo de vida de las entidades Ejemplo de Queries ene-09 [email protected] 175 Contenidos ene-09 [email protected] 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) [email protected] 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 [email protected] 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 [email protected] 179 Controlar transacciones programáticas JTA Control usando JTA Acceso JNDI o anotacion ene-09 [email protected] 180 Controlar transacciones programáticas JTA Ejemplo de control de transacción ene-09 [email protected] 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 [email protected] 182 Transacciones administradas por el contenedor Coordinador de transacciones ene-09 [email protected] 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 [email protected] M.F.A. [email protected] 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 [email protected] M.F.A. [email protected] 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 [email protected] M.F.A. [email protected] 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 [email protected] M.F.A. [email protected] 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 [email protected] M.F.A. [email protected] 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 [email protected] 189 Contenidos ene-09 [email protected] 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 [email protected] 191 Tecnología del API JMS MOM como integrador Distribución de mensajes Clientes de mensajería ene-09 [email protected] 192 Tecnología del API JMS Tipos de clientes de mensajería Se bloquea esperando la llegada de un mensaje ene-09 [email protected] 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 [email protected] 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 [email protected] 195 Tecnología del API JMS Elementos del API JMS ene-09 [email protected] 196 Tecnología del API JMS Estructura de los mensajes ene-09 [email protected] 197 Creación de un productor de mensajes de cola Diagrama de colaboración ene-09 [email protected] 198 Ejemplo Creación de un productor de mensajes de cola ene-09 [email protected] 199 Creación de un consumidor de mensajes síncrono Diagrama de colaboración ene-09 [email protected] 200 Ejemplo Creación de un consumidor de mensajes síncrono ene-09 [email protected] 201 Creación de un consumidor de mensajes asíncrono Método gestor del evento ene-09 [email protected] 202 Creación de un consumidor de mensajes asíncrono ene-09 [email protected] 203 EJB como clientes de mensajería EJB como clientes de mensajería ene-09 [email protected] 204 Contenidos ene-09 [email protected] 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 [email protected] 206 Introducción a los beans controlados por mensajes Ciclo de vida Posible interceptar los cambios de estado @PostConstruct @PreDestroy ene-09 [email protected] 207 Creación de un bean controlado por mensajes Código ejemplo ene-09 [email protected] 208 Creación de un bean controlado por mensajes Filtra los mensajes que llegan ene-09 [email protected] 209 Contenidos ene-09 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 214 Especificaciones de los servicios web Arquitectura de WS ene-09 [email protected] 215 Especificaciones de los servicios web Ejemplo mensajes SOAP Petición Respuesta ene-09 [email protected] 216 Especificaciones de los servicios web Ejemplo WSDL “hola mundo” Estructura general de documento WSDL ene-09 [email protected] 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 [email protected] 218 Contenidos ene-09 [email protected] 219 Puntos finales servlet JAX-WS Punto final un Servlet web.xml ene-09 [email protected] 220 Puntos finales EJB JAX-WS Punto final un EJB ene-09 [email protected] 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 [email protected] 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 [email protected] 223 Clientes de servicios Web Ejemplo Cliente con proxy dinámico Cliente con proxy estático ene-09 [email protected] 224 Contenidos ene-09 [email protected] 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 [email protected] 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) [email protected] 227 Seguridad administrada por el contenedor Propagación del contexto de seguridad ene-09 [email protected] 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 [email protected] 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 [email protected] 230 Seguridad administrada por el contenedor Autenticación administrada por contenedor web ene-09 [email protected] 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 [email protected] 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 [email protected] 233 Seguridad administrada por el contenedor web.xml Roles Técnicas ene-09 [email protected] 234 Seguridad administrada por el contenedor Tipos de autenticación soportados BASIC DIGEST FORM CLIENT-CERT ene-09 [email protected] 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 [email protected] 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 [email protected] contenedor 237 Roles y responsabilidades del usuario Usuarios y roles ene-09 [email protected] 238 Roles y responsabilidades del usuario Autorización basada en funciones en la capa EJB ene-09 [email protected] 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 [email protected] 240 Utilización del API de seguridad API de seguridad de la capa web ene-09 [email protected] 241 Utilización del API de seguridad API de seguridad de la capa EJB ene-09 [email protected] 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 [email protected] 243