Sesion 3. desarrollo de aplicaciones jee

243
ene-09 [email protected] 1 Desarrollo de aplicaciones JEE

description

J2EE

Transcript of Sesion 3. desarrollo de aplicaciones jee

Page 1: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 1

Desarrollo de aplicaciones JEE

Page 2: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 2

Contenidos

Page 3: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 3

Plataformas de la tecnología Java y Java EE

Requisitos de las aplicaciones de empresa

Page 4: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 4

Tecnologías de infraestructura en aplicaciones de empresa

Requisitos de las aplicaciones de empresa

Page 5: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 5

Elementos de la tecnología Java EE

Requisitos de las aplicaciones de empresa

Page 6: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 6

Función de las API de Java EE

Requisitos de las aplicaciones de empresa

Page 7: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 7

Contenedores Java EE

Requisitos de las aplicaciones de empresa

Page 8: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 8

Separación de lógica de negocio y servicios

Requisitos de las aplicaciones de empresa

Page 9: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 9

Servicios Java EE: categorías

� De implementación:� Persistencia� Transacciones� Seguridad

� API:� Asignación de nombres� Mensajería� Conectores

� Inherentes:� Ciclo de vida� Subprocesos (threading)� Comunicación con

objetos remotos, como RMI y CORBA

� Del fabricante:� Capacidad de ampliación� Fail over� Balanceo de carga

API y servicios de la plataforma Java EE

Configurados en XML o con annotations Usados desde código

Page 10: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 10

Servicios Java EE

API y servicios de la plataforma Java EE

Page 11: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 11

Arquitectura de N capas

Capas y arquitecturas de la plataforma Java EE

Page 12: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 12

JEE y las N capasCapas y arquitecturas de la plataforma Java EE

Page 13: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 13

Arquitectura de N capas

Capas y arquitecturas de la plataforma Java EE

Page 14: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 14

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

Capas y arquitecturas de la plataforma Java EE

Page 15: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 15

Arq. centrada en la web

Capas y arquitecturas de la plataforma Java EE

Page 16: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 16

Arq. centrada en EJB

Capas y arquitecturas de la plataforma Java EE

Page 17: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 17

Arquitectura B2B

Capas y arquitecturas de la plataforma Java EE

Page 18: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 18

Arq. de servicios Web

Capas y arquitecturas de la plataforma Java EE

Page 19: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 19

Catálogo de patrones Java EE

Patrones Java EE

Page 20: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 20

Algunos patrones en Java EEPatrones Java EE

Page 21: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 21

Contenidos

Page 22: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 22

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:� Servlets� JSP (java servlet pages)� Beans de sesion� Clases entidad� Beans de mensajes

Principios de desarrollo basado en componentes

Page 23: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 23

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

Principios de desarrollo basado en componentes

Page 24: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 24

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:

� En Java pares getters y setters

Principios de desarrollo basado en componentes

Page 25: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 25

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� Interface java

Principios de desarrollo basado en componentes

Page 26: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 26

Interfaces como contratos

Principios de desarrollo basado en componentes

Page 27: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 27

Conexiones remotas y locales

Principios de desarrollo basado en componentes

Conexiones remotas(diversas tecnologías)

Conexiones locales

Page 28: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 28

RMI, remote methodinvocation

� Marshalling y unmarshalling� Transmisión de excepciones� Transmisión del contexto de seguridad� Transmisión del contexto de transacción

Principios de desarrollo basado en componentes

Page 29: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 29

Implicaciones de invocación remota

� Cambio de semántica:� Paso por valor (remotas)� Paso por referencia (locales)

� Marshalling y unmarshalling� Sobrecarga grande (10/1)

� Acceso remoto proporciona transparencia de ubicación

Principios de desarrollo basado en componentes

Page 30: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 30

Servicios de nombres en el modelo de componentes

Principios de desarrollo basado en componentes

Page 31: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 31

Uso del API JNDI en JEE

Principios de desarrollo basado en componentes

Código a ejecutar en la parte cliente

Configuración en cliente externo para localizar el servidor JNDI

Page 32: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 32

Uso del API JNDI en JEE

El registro JNDI mantiene referencias a los beans que sirve el contenedor

Principios de desarrollo basado en componentes

Page 33: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 33

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

Page 34: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 34

EJBContext para localizar componentes

Principios de desarrollo basado en componentes

EJBContext: contexto JNDI especializado para localizar ejb en java:comp/env

Page 35: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 35

Inyección de dependencias en vez de JNDI

� El contenedor por medio de reflectividad interviene el código en el arranque del contenedor

Principios de desarrollo basado en componentes

Page 36: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 36

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:� Semántica petición-notificación� El llamador no bloquea en espera� Reduce el acoplamiento

Modelo de comunicación asíncrona

Page 37: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 37

Interacción asíncrona de componentes

Modelo de comunicación asíncrona

Page 38: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 38

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

� Servidores, buffers, notificaciones

� Generan más tráfico de red ¿?

Modelo de comunicación asíncrona

Page 39: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 39

Roles en JEE

Desarrollo de aplicaciones Java EE

Page 40: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 40

Fases de desarrollo

� Diseño� Codificación� Creación de descriptores de implementación

� Empaquetado� Ensamblaje� Despliegue

Desarrollo de aplicaciones Java EE

Page 41: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 41

Ensamblado de EAR

Desarrollo de aplicaciones Java EE

Page 42: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 42

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: � Eclipse, Netbeans

Comparación entre opciones de desarrollo

Page 43: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 43

Sistemas de control de código fuente

Comparación entre opciones de desarrollo

Page 44: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 44

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)

Configuración y empaquetado de aplicaciones JEE

Page 45: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 45

Archivos WEB

Configuración y empaquetado de aplicaciones JEE

Page 46: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 46

Creación manual de .WAR

2008-2009 46DASDI

Configuración y empaquetado de aplicaciones JEE

Page 47: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 47

Archivos JAR

� Contienen módulos EJB� Clases� Interfaces� Descriptores de despliege

� Otros recursos

Configuración y empaquetado de aplicaciones JEE

Page 48: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 48

Ejemplo estructura EJB-JAR

2008-2009 48DASDI

Configuración y empaquetado de aplicaciones JEE

Page 49: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 49

Archivos de recursos (RAR)

� Componente de más bajo nivel integrado en el framework JEE� Manipulación de Transacciones, Seguridad� Llamadas nativas, manipulación de hilos, etc

� Adaptadores a otros sistemas, etc

Configuración y empaquetado de aplicaciones JEE

Page 50: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 50

Archivos EAR

� Archivo que contiene todas las capas de la aplicación y todos los subcomponentes

Configuración y empaquetado de aplicaciones JEE

Page 51: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 51

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.

Configuración y empaquetado de aplicaciones JEE

Page 52: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 52

Ejemplo ejb-jar.xml

Configuración y empaquetado de aplicaciones JEE

Page 53: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 53

Estructura application.xml

Configuración y empaquetado de aplicaciones JEE

Page 54: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 54

Descriptores específicos

� Para cada contenedor concreto� Se especifican las características propias de ese contendor

� Cada contendor es distinto� En un empaquetado se pueden añadir muchos descriptores distintos

Configuración y empaquetado de aplicaciones JEE

Page 55: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 55

Ejemplo servidor Sun Java System

Configuración y empaquetado de aplicaciones JEE

Page 56: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 56

Contenidos

Page 57: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 57

Arquitectura de aplicaciones Java EE centrada en la web

Función de los componentes web en una aplicación Java EE

Page 58: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 58

Arquitectura de aplicaciones Java EE centrada en EJB

Función de los componentes web en una aplicación Java EE

Page 59: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 59

Protocolo HTTP

Modelo de petición-respuesta de HTTP

Page 60: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 60

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, …

Modelo de petición-respuesta de HTTP

Page 61: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 61

Peticiones GET y POST

� Get: datos en query string

� Post: datos en cuerpo de la petición

Modelo de petición-respuesta de HTTP

Contenido del paquete HTTP

Page 62: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 62

Respuesta devuelta por el servidor

� Entre las cabeceras de respuesta:� Resultado de la petición (status-code)

� MIME type de los datos� Codificación estándar de los tipos de datos� Página HTML: text/html� Documento XML: text/xml� Imagen en formato JPEG: image/jpeg

Modelo de petición-respuesta de HTTP

200 – OK400 – Bad Request401 – Unauthorized403 – Forbidden404 – Not Found. . .

Page 63: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 63

HolaMundo Servlet

Comparación entre servlets y componentes JSP

Page 64: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 64

Ejemplo de página JSP

Comparación entre servlets y componentes JSP

Page 65: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 65

JSP: Proceso de compilación

Comparación entre servlets y componentes JSP

Page 66: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 66

Ejemplo: de JSP a Servlet(Tomcat)

Comparación entre servlets y componentes JSP

Page 67: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 67

JSP a

Servlet.service()

Comparación entre servlets y componentes JSP

Page 68: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 68

Servlet API

Page 69: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 69

Servlets: Jerarquía

� No es habitual implementar Servletdirectamente

� Heredamos de HttpServlet

Page 70: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 70

Administración y ciclo de vida

Comparación entre servlets y componentes JSP

Page 71: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 71

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.

Comparación entre servlets y componentes JSP

Page 72: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 72

Combinación de servlets y componentes JSP

� Lo más habitual es usar combinaciones de servlets y JSP� JSP para generar la vista� Servlets para ejecutar la lógica del negocio

Comparación entre servlets y componentes JSP

Page 73: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 73

Concurrencia basada en hilos

Control de la concurrencia en componentes Web

Page 74: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 74

Consecuencias para el desarrollador

� Un único Servlet puede estar atendiendo múltiples peticiones simultáneas� Varios hilos ejecutándo service() � posibles problemas de concurrencia

� Precauciones al:� Usar variables de instancia� Usar variables de clase (static)� Acceder a recursos externos si ellos no soportan concurrencia

� Posible recurso:

Control de la concurrencia en componentes Web

Page 75: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 75

Asignación de alias y raíz de contexto web

� Formato general de URI

Control de la concurrencia en componentes Web

Nombre de la aplicación (el del paquete WAR o EAR)

Nombre del ficheroo alias de servlet que forma parte de la aplicación

bank.war

Page 76: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 76

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� Cookies, URL rewriting, etc� Útil si hay pocos datos

� Mantener datos en el servidor� 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

Administración de sesiones

Page 77: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 77

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

Complejidad de la capa Web

Page 78: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 78

Arquitectura Model 1

Secundino González Pérez

Complejidad de la capa Web

Page 79: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 79

Arquitectura Model 2

Secundino González Pérez

Complejidad de la capa Web

Page 80: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 80

Paradigma modelo-vista-controlador

Patrones de diseño en la capa Web

Page 81: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 81

Arquitectura 2 y MVC

Patrones de diseño en la capa Web

Page 82: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 82

Patrón Business-Delegate

Patrones de diseño en la capa Web

Page 83: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 83

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

Patrones de diseño en la capa Web

Page 84: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 84

Contenidos

Page 85: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 85

API genéricas y específicas de los protocolos

Conceptos básicos sobre el API de los servlets

Page 86: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 86

Método service()

Conceptos básicos sobre el API de los servlets

Page 87: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 87

Método service() en HTTPServlet

Separa la petición en función del método HTTP

Conceptos básicos sobre el API de los servlets

Page 88: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 88

Métodos de manejo de peticiones

Conceptos básicos sobre el API de los servlets

Page 89: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 89

Métodos de manejo de peticiones, código

Conceptos básicos sobre el API de los servlets

Page 90: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 90

HolaMundo Servlet

Conceptos básicos sobre el API de los servlets

Page 91: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 91

Configuración de servlets

� En fichero web.xml� Suministra información acerca del despliege de componentes en el contenedor� Página de inicio, mapes de Servlets y URLs, parámetros de configuración para servlets, recursos referenciados, etc

Conceptos básicos sobre el API de los servlets

Page 92: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 92

Ejemplo fichero web.xml

Conceptos básicos sobre el API de los servlets

Page 93: Sesion 3. desarrollo de aplicaciones jee

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

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException {

. . .}

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException {

. . .}

� 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)

Page 94: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 94

HttpServeltRequest HttpServletResponse

serviceservice()()

Attributes[R/W/D]

Parameters[R]

Session[R/W/D]

Cookies [R]

ContentType[W]

Writer[W]

OutputStream[W]

Cookies[W]

Redirect[W]

WebContainer

Utilización de las API de petición y respuesta

Utilización de las API de petición y respuesta

Page 95: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 95

<form> y request.getParameter()

Utilización de las API de petición y respuesta

Page 96: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 96

Interfaz RequestDispatcher

� Deriva la petición a otro servlet o JSP para que complete el procesamiento� Es lo que permite que el JSP genera la vista y el servlet procese la lógica

Reenvío de control y transferencia de datos

Page 97: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 97

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():

� 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)

Reenvío de control y transferencia de datos

Page 98: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 98

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

Reenvío de control y transferencia de datos

En el JSP

Page 99: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 99

Gestión de la sesión por el contenedor

Administración de sesiones

Page 100: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 100

Interfaz HttpSession

Deprecated methods

Administración de sesiones

Page 101: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 101

Enlace de sesion y navegador

� Cookies� En servidor las inserta en cada respuesta al navegador

� Reescribiendo todas las URL generadas por el contenedor

Administración de sesiones

Rewrited as

Page 102: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 102

Cierre de sesión, timeout, nueva

Administración de sesiones

Page 103: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 103

Contenidos

Page 104: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 104

Presentación con JSP

� Ventajas:� 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)

Tecnología JSP como mecanismo de presentación

Page 105: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 105

Proceso de compilación

Tecnología JSP como mecanismo de presentación

Page 106: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 106

Elementos en las páginas JSP� Directivas

� Permiten condicionar la generación del código del servletgenerado

� Requisitos de buffering� Página de error para redirección, etc.

� Acciones� Etiquetas XML que invocan a clases que generan código de

salida para la petición� Acciones estándar� Acciones propietarias (Tag libs)

� Scriptlets� Permite insertar código java que será ejecutado en el

momento de la petición

Tecnología JSP como mecanismo de presentación

Page 107: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 107

Elementos en las páginas JSP

Creación de páginas JSP

Page 108: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 108

Formas sintácticas de las etiquetas JSP

Creación de páginas JSP

Page 109: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 109

Directivas JSP� Las directivas son mensajes al contenedor de JSP

� Ejemplos:ElementoElemento DescripciDescripcióónn

<%@ <%@ pagepage ... %>... %>

Permite importar clases Java, especificar el Permite importar clases Java, especificar el

tipo de la respuesta (tipo de la respuesta (““texttext//htmlhtml”” por omisipor omisióón), n),

etcetcééteratera<%@ <%@ includeinclude ... ...

%>%>Permite incluir otros ficheros antes de que la Permite incluir otros ficheros antes de que la

ppáágina sea traducida a un gina sea traducida a un servletservlet

<%@ <%@ taglibtaglib ... %>... %>

Declara una biblioteca de etiquetas con Declara una biblioteca de etiquetas con

accionesacciones personalizadas para ser utilizadas personalizadas para ser utilizadas

en la pen la pááginagina

Forma general: <%@ directive { attr=”value” }* %>

Creación de páginas JSP

Page 110: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 110

Directiva page

Creación de páginas JSP

Page 111: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 111

Directiva import

� Inserta el texto de otro recurso en tiempo de compilación

Creación de páginas JSP

Page 112: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 112

Ejemplo: directiva include

Creación de páginas JSP

Page 113: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 113

Elementos de “scripting”

ElementoElemento DescripciDescripcióónn

<% ... %><% ... %> ScriptletScriptlet. se usa para meter c. se usa para meter cóódigo Java dentrodigo Java dentro

<%= ... %><%= ... %>ExpresiExpresióónn. Permite acceder al valor devuelto por . Permite acceder al valor devuelto por

una expresiuna expresióón en Java e imprimirlo en OUTn en Java e imprimirlo en OUT

<%! ... %><%! ... %>DeclaraciDeclaracióónn. Usada para declarar variables y . Usada para declarar variables y

mméétodos en la clase correspondiente a la ptodos en la clase correspondiente a la pááginagina

<%<%---- …… ----%>%>

ComentarioComentario. Comentario ignorado cuando se . Comentario ignorado cuando se

traduce la ptraduce la páágina JSP en un gina JSP en un servletservlet..

(comentario en el HTML <!(comentario en el HTML <!---- commentcomment ��))

Creación de páginas JSP

Page 114: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 114

Ejemplo: expresión, saludo.jsp

expresión

Nota: Si se necesita usar los caracteres "%>" dentro de un scriptlet, hay que usar "%\>" y “<\%”

<%=

Creación de páginas JSP

Page 115: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 115

Ejemplo: scriptlet, saludo.jsp

<%

Creación de páginas JSP

Page 116: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 116

Ejemplo: declaración, saludo.jsp

<%!

Creación de páginas JSP

Page 117: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 117

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:�� requestrequest

�� responseresponse

�� pageContextpageContext

�� sessionsession

�� applicationapplication

�� outout

�� configconfig

Se puede acceder a

ellos directamente

desde los “scriptlets”

Creación de páginas JSP

Page 118: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 118

Acciones JSP

� Etiquetas XML que tienen procesamiento asociado

Procesamiento de datos de servlets

Page 119: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 119

<jsp:useBean

Procesamiento de datos de servlets

Page 120: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 120

<jsp:useBean id=“”

Procesamiento de datos de servlets

Page 121: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 121

Ambitos JSP

Procesamiento de datos de servlets

Page 122: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 122

Recuperando beans de la request

Procesamiento de datos de servlets

Page 123: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 123

Syntax

<%@ taglib ( uri=”tagLibraryURI” | tagdir=”tagDir” ) prefix=”tagPrefix” %>

Directiva taglib

Bibliotecas de etiquetas personalizadas

� Declara que la página usa una librería de tags (acciones)

� Identifica la librería por su URI� Le asocia un prefijo para usar en el código de la JSP

<%@ taglib uri=”http://www.mycorp/supertags” prefix=”super” %>...<super:doMagic>...</super:doMagic>

Alias definido en web.xml

Page 124: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 124

Ejemplo de uso de JSTL y EL

Bibliotecas de etiquetas personalizadas

Page 125: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 125

Contenidos

Page 126: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 126

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.

Función de los componentes EJB

Page 127: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 127

Solución en capas

ene-09 127

DAO Factory

ProcsFacade

Service Interface

Action

Action

Action

Action

Facade

Lógica PersistenciaPresentac.

Control

Persistence Interface

JDBC

Procs

Hibernate DAO

JDBC DAO

JPA DAO

Spring DAO

ModelModelModelProcs

Procs

Función de los componentes EJBSession Beans

implementan el patrón Fachada

Clases Java implementan el modelo del dominio

Page 128: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 128

Capas de EJBs

Función de los componentes EJB

Page 129: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 129

Interfaces Context

� EJBContext� SessionContext� MessageContext

� Permiten al componente EJB interaccionar con el contenedor� Seguridad� Transacciones� Búsquedas JNDI

Función de los componentes EJB

Page 130: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 130

Función del contenedor EJB

Análisis del modelo de componentes EJB

Page 131: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 131

Objetos EJB y proxies

� Intercepta las llamadas y toma el control

Clase que se programa

ene-09 131

EJBObject

Page 132: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 132

Vistas de cliente locales y distribuidas

ene-09 [email protected] 132

Conexión local

Interfaz local

EJB Container

Page 133: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 133

Vistas de cliente locales y distribuidasene-09 [email protected] 133

Conexión remotaInterfaz remota

EJB Container

Page 134: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 134

Invocación de stateless: cliente

� Este código se ejecuta en otra máquina (JVM)

� El cliente necesita acceso a la implementación del stub

� El stub se obtiene de un registro JNDI

ene-09 134

Page 135: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 135

Servlet con referencia un beande 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()

Llamada a EJB desde servlets

Page 136: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 136

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.

Llamada a EJB desde servlets

Page 137: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 137

Contenidos

Page 138: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 138

Mantenimiento del estado

� Capa de usuario (programa cliente)� Trasiego de datos

� Capa Web� En HttpSession

� Capa de negocio (EJB)� En EJBs con estado

� Capa de base de datos

Comparación de comportamientos con y sin estado

� Carrito de la compra� Datos en varias páginas

Page 139: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 139

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. � Mejora de rendimiento.

Características de los beans sin estado

Page 140: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 140

Beans sin estado

� Cuidado con los atributos de instancia

Características de los beans sin estado

Page 141: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 141

Beans con estado

Características de los beans con estado

Page 142: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 142

Adaptación de una clase Java a EJB sin sesión

� Declarar interfaz de negocio

� Definir clase de implementación

Creación de beans de sesión

anotaciones

Page 143: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 143

Interfaces locales y remotas

Creación de beans de sesión

La implementación se puede anotar con @Remote pero no con @Local y @Remote a la vez

Un implementación puede serremota y local pero las anotaciones van en cada interfaz

Page 144: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 144

Interfaces locales y remotas

Creación de beans de sesión

� La implementación se puede anotar con @Remotepero no con @Local y @Remote a la vez

� Un implementación puede ser remota y local pero las anotaciones van en cada interfaz

Page 145: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 145

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.

Creación de beans de sesión

Page 146: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 146

Todas las anotaciones

� Tipo de bean� @Stateless, @Statefull

� Tipo de acceso� @Remote, @Local

� Cierre de sesión (en Statefull)� @Remove

� Acceso a recursos desde el EJB� @EJB, @Resource

� Ciclo de vida� @PostConstruct, @PreDestroy, � (Sólo statefull) @PostActivate, @PrePassivate

Creación de beans de sesión

Page 147: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 147

Ciclo de vida de session beanssin estado

Creación de beans de sesión

Page 148: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 148

Ciclo de vida de session beanscon estado

Creación de beans de sesión

Page 149: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 149

Objeto SessionContext� Proporciona acceso al EJBObject (al contenedor)� Entorno de seguridad� Información sobre el control de la transacción� Acceso a JNDI

Creación de beans de sesión

Page 150: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 150

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:� Web: web.xml� EJB: ejb-jar.xml� Aplicaciones completas: application.xml

Empaquetado y despliegue de beans de sesión

Page 151: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 151

Ejemplo de ejb-jar.xml

Empaquetado y despliegue de beans de sesión

Page 152: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 152

Empaquetado

� Web: <nombre>.war� EJB: <nombre>.jar

� Archivo JAR nomal� Descriptor ejb-jar.xml en /META-INF

� Aplicaciones: <nombre>.ear� Contiene WAR + JAR� Descriptor application.xmlen /META-INF

Empaquetado y despliegue de beans de sesión

Page 153: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 153

Posibles clientes

� Otro EJB de sesion� Un servlet (o JSP compilado)� Clase Java normal

� ¿Cómo obtener una referencia al EJB?� Depende de si el cliente se ejecuta en un contenedor o no (si es EJB/servlet o clase normal)

Creación de un cliente bean de sesión

Page 154: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 154

Con servicios de contenedor

� Servlet o EJB local� El contenedor inyecta la referencia

Creación de un cliente bean de sesión

Page 155: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 155

Con servicios de contenedor

� Servlet o EJB remoto (en otro contenedor)

� Búsqueda JNDI

Creación de un cliente bean de sesión

En ejb-jar.xmlo web.xml

Page 156: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 156

Sin servicios de contenedor

� Clase Java (local o remota)� Se deben usar los servicios JNDI

Creación de un cliente bean de sesión

Page 157: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 157

Contenidos

Page 158: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 158

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 mapeadorobjeto/relacional

API de persistencia de Java

Page 159: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 159

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� Los objetos son persistentes (en BDDR) sin apenas programación (mucho ahorro de código tedioso)

Mapeadores objeto/relacional

Page 160: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 160

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

Requisitos de una clase Entidad

Page 161: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 161

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

� Puede ser Set<T>, List<T>, Map<T> o Collection<T> (interfaces)

Requisitos de una clase Entidad

Page 162: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 162

Page 163: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 163

Modelo de dominio en código

Requisitos de una clase Entidad

Page 164: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 164

De clase a tabla

Requisitos de una clase Entidad

Page 165: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 165

Campos persistentes o propiedades

Requisitos de una clase Entidad

Acceso properties:se anotan los getters

Acceso field:se anotan los atributos

Page 166: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 166

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:

� java.util.Date, java.sql.TimeStamp� Cualquier otra clase del programa

Requisitos de una clase Entidad

Page 167: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 167

Conceptos básicos� Unidad de persistencia

� Conjunto de clases administradas por el ORM� Descriptor persistence.xml

� Administrador de entidades� Controla el ciclo de vida de la entidades: salvar, borrar,

recuperar, buscar (CRUD)� Contexto de persistencia

� Estado de la entidad con respecto al administrador de entidades

� Identidad persistence� 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

Ciclo de vida de las entidades

Page 168: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 168

Archivo persistence.xml

� Define las clases que forman parte de la persistence-unit (por su presencia)

� Especifica el DataSource

Ciclo de vida de las entidades

Page 169: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 169

Ejemplo de uso de EntityManager

Ciclo de vida de las entidades

Page 170: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 170ene-09 [email protected] 170

Estados de un objeto persistente JVM

Ciclo de vida de las entidades

Page 171: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 171

Notificación de cambios de estado

� Especificación de métodos callback con anotaciones� @PrePersist� @PostPersist� @PreRemove� @PostRemove� @PreUpdate� @PostUpdate� @PostLoad

Ciclo de vida de las entidades

Page 172: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 172

Estructura típica de archivo ejb-jar

Ciclo de vida de las entidades

Page 173: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 173

API JPA

Ciclo de vida de las entidades

Page 174: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 174

Consultas, lenguaje de consulta

� El EntityManager permite la creación de objetos Query� NativeQuery

� SQL nativo de la BDD

� NamedQuery� Consulta externalizada a fichero xml (orm.xml)

� Query� Expresadas en JPA-QL� Lenguaje de consultas OO independiente de la BDD

Ciclo de vida de las entidades

Page 175: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 175

Ejemplo de Queries

Ciclo de vida de las entidades

Page 176: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 176

Contenidos

Page 177: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 177

Transacciones ACID

� Es la demarcación de una unidad de trabajo

� JPA permite trabajar con varios API de transacciones� JSE JDBC� JTA� Declarativas (EJB)

Semántica transaccional

Page 178: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 178

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

Semántica transaccional

Page 179: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 179

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� El contendor se encarga de la gestión� Anotaciones o xml

Transacciones programáticas y declarativas

Page 180: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 180

Control usando JTA

� Acceso JNDI o anotacion

Controlar transacciones programáticas JTA

Page 181: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 181

Ejemplo de control de transacción

Controlar transacciones programáticas JTA

Page 182: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 182

Control por el contenedor

� El atributo de la trx controla el ciclo de vida de la transacción en curso� Required� RequiresNew� NotSupported� Supports� Mandatory� Never

Transacciones administradas por el contenedor

Page 183: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 183

Coordinador de transacciones

Transacciones administradas por el contenedor

Page 184: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 184

Control pesimista y optimista

ene-09 Alberto M.F.A. [email protected] 184

Lock Lock

ROLLBACK

Lock v1.0 v2.0 v1.0

ROLLBACK

En BDD ya no es v1.0

PESIMISTA OPTIMISTA

Bloqueo optimista y control de versiones

Page 185: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 185ene-09 Alberto M.F.A. [email protected] 185

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 versiersióónn a los objetos

Bloqueo optimista y control de versiones

Page 186: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 186ene-09 Alberto M.F.A. [email protected] 186

Versionado de objetos con campo versión

� Añadir información al objeto para poder detectar cambios entre el estado detached y persistent� Campo versión (un entero)� Timestamp (de la última modificación)

Bloqueo optimista y control de versiones

Page 187: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 187ene-09 Alberto M.F.A. [email protected] 187

Mapeado de campos

Sin get/set

JPA gestiona los campos versión de forma automática

Tipos válidos para versionado

!

Bloqueo optimista y control de versiones

Page 188: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 188

Excepciones JPA

ene-09 Alberto M.F.A. [email protected] 188

�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 yNonUniqueResultException.

Todas NO chequeadas

Excepciones durante una transacción

Page 189: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 189

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� getRollbackOnly� setRollbackOnly

Excepciones durante una transacción

Page 190: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 190

Contenidos

Page 191: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 191

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)

Tecnología del API JMS

Page 192: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 192

MOM como integrador

Tecnología del API JMS

Clientes de mensajería

Distribución de mensajes

Page 193: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 193

Tipos de clientes de mensajería

Se bloquea esperando la llegada de un mensaje

Tecnología del API JMS

Page 194: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 194

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

Tecnología del API JMS

Page 195: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 195

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

Tecnología del API JMS

Page 196: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 196

Elementos del API JMS

Tecnología del API JMS

Page 197: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 197

Estructura de los mensajes

Tecnología del API JMS

Page 198: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 198

Diagrama de colaboración

Creación de un productor de mensajes de cola

Page 199: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 199

Ejem

plo

Creación de un productor de mensajes de cola

Page 200: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 200

Diagrama de colaboración

Creación de un consumidor de mensajes síncrono

Page 201: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 201

Ejem

plo

Creación de un consumidor de mensajes síncrono

Page 202: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 202

Método gestor del evento

Creación de un consumidor de mensajes asíncrono

Page 203: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 203

Creación de un consumidor de mensajes asíncrono

Page 204: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 204

EJB como clientes de mensajería

EJB como clientes de mensajería

Page 205: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 205

Contenidos

Page 206: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 206

MessageDriven Beans

� Son clientes asíncronos de mensajes� Implementan el interfaz MessageListener

� Desconectados de cliente

Introducción a los beans controlados por mensajes

Page 207: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 207

Ciclo de vida

Introducción a los beans controlados por mensajes

Posible interceptar los cambios de estado

@PostConstruct@PreDestroy

Page 208: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 208

Código ejemplo

Creación de un bean controlado por mensajes

Page 209: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 209

Creación de un bean controlado por mensajes

Filtra los mensajes que llegan

Page 210: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 210

Contenidos

Page 211: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 211

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

Finalidad de los servicios web

Page 212: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 212

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� XML, SOAP� HTTP, SMTP

Finalidad de los servicios web

Page 213: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 213

Comparación entre servicios web y EJB remotos

� La implementación del servicio websimilar 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

Finalidad de los servicios web

Page 214: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 214

Requisitos de interoperabilidad

� Intercambio de mensajes HTTP y XML� Se necesita cerrar más las posibilidades

� 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

Especificaciones de los servicios web

Page 215: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 215

Arquitectura de WS

Especificaciones de los servicios web

Page 216: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 216

Ejemplo mensajes SOAP

Especificaciones de los servicios web

Petición

Respuesta

Page 217: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 217

Ejemplo WSDL “hola mundo”

Especificaciones de los servicios web

Estructura general de documento WSDL

Page 218: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 218

APIs java para WS� 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

� API de más alto nivel � Usa todas las demás por debajo� Permite manejo de WS sin conocimientos de XML, SOAP, etc

APIs de Java relacionados con servicios web

-

+

Complejidad

Page 219: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 219

Contenidos

Page 220: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 220

Punto final un Servlet

Puntos finales servlet JAX-WS

web.xml

Page 221: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 221

Punto final un EJB

Puntos finales EJB JAX-WS

Page 222: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 222

Tipos de datos admitidos en JAX-WS

� Se pueden transferir tipos básicos a WS

� Tipos complejos deben marcados

Puntos finales EJB JAX-WS

Page 223: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 223

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 proxydinámicamente

Clientes de servicios Web

Page 224: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 224

Ejem

plo

Clientes de servicios Web

Cliente con proxy dinámico

Cliente con proxy estático

Page 225: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 225

Contenidos

Page 226: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 226

Conceptos de seguridad

� Autenticación� Asegurar la identidad del usuario

� Autorización� Verificar que tiene permiso para la operación que solicita

� Confidencialidad� Impedir el espionaje de datos en transporte

� Integridad� Detectar la corrupción de los mensajes en el transporte

Seguridad administrada por el contenedor

Page 227: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 227

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� SSL (TLS)

Seguridad administrada por el contenedor

Page 228: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 228

Propagación del contexto de seguridad

Seguridad administrada por el contenedor

Page 229: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 229ene-09 Alberto M.F.A. 229

Seguridad para WEB (HTTPS)

� HTTPS = HTTP Secure� HTTP sobre un protocolo de transporte seguro� HTTP � SSL � TCP

� SSL también es conocido como TLS según IETF

Seguridad administrada por el contenedor

Page 230: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 230

SSL (o TLS)� El servidor tiene un certificado

� opcionalmente el cliente tiene el suyo� Permite intercambio seguro de datos (p.e. claves de sesión)

� Usa algoritmos de clave simétrica y asimétrica

� Ofrece:� Autentificación � Confidencialidad� Integridad

Del servidor siempre, del cliente si tiene certificado

Seguridad administrada por el contenedor

Page 231: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 231

Autenticación administrada por contenedor web

Seguridad administrada por el contenedor

Page 232: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 232

Especificación� En web.xmlweb.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

Seguridad administrada por el contenedor

Page 233: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 233

web.xml

� Colección de recursos, roles y métodos

Si no hay método todos están protegidos

Seguridad administrada por el contenedor

Page 234: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 234

web.xml

� Roles

� Técnicas

Seguridad administrada por el contenedor

Page 235: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 235

Tipos de autenticación soportados

� BASIC� DIGEST� FORM� CLIENT-CERT

Seguridad administrada por el contenedor

Page 236: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 236

Autentificación por Formulario

� No es segura por sí sola, es necesario combinarla con HTTPs (SSL – Secure SocketLayer)

� Permite controlar la apariencia de la pantalla de login

� La pantalla de login es HTML estándar, sigue un convenio de nombres� Action: j_security_check� Login: j_username� Pass: j_password

Seguridad administrada por el contenedor

Page 237: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 237

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

� Base de datos (tablas: usuarios, roles)� Ficheros XML� Ficheros de propiedades� . . .

� Consultar documentación del contenedor

Seguridad administrada por el contenedor

Page 238: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 238

Usuarios y roles

Roles y responsabilidades del usuario

Page 239: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 239

Autorización basada en funciones en la capa EJB

Roles y responsabilidades del usuario

Page 240: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 240

Métodos de API

� Métodos en web:� getUserPrincipal y isUserInRole

� Métodos en EJB:� getCallerPrincipal y isCallerInRole

Utilización del API de seguridad

Page 241: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 241

API de seguridad de la capa web

Utilización del API de seguridad

Page 242: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 242

API de seguridad de la capa EJB

Utilización del API de seguridad

Page 243: Sesion 3. desarrollo de aplicaciones jee

ene-09 [email protected] 243

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

Seguridad HTTP y clientes JAX-WS