SlideShare uma empresa Scribd logo
1 de 243
Baixar para ler offline
Desarrollo de aplicaciones JEE

ene-09

alb@uniovi.es

1
Contenidos

ene-09

alb@uniovi.es

2
Requisitos de las aplicaciones de empresa

Plataformas de la tecnología
Java y Java EE

ene-09

alb@uniovi.es

3
Requisitos de las aplicaciones de empresa

Tecnologías de infraestructura
en aplicaciones de empresa

ene-09

alb@uniovi.es

4
Requisitos de las aplicaciones de empresa

Elementos de la tecnología
Java EE

ene-09

alb@uniovi.es

5
Requisitos de las aplicaciones de empresa

Función de las API de Java EE

ene-09

alb@uniovi.es

6
Requisitos de las aplicaciones de empresa

Contenedores Java EE

ene-09

alb@uniovi.es

7
Requisitos de las aplicaciones de empresa

Separación de lógica de
negocio y servicios

ene-09

alb@uniovi.es

8
API y servicios de la plataforma Java EE

Servicios Java EE: categorías
De implementación:

Inherentes:

Persistencia
Transacciones
Seguridad

Ciclo de vida
Subprocesos (threading)
Comunicación con
objetos remotos, como
RMI y CORBA

API:
Asignación de nombres
Mensajería
Conectores
Configurados en XML
o con annotations
ene-09

Del fabricante:

Usados desde código

alb@uniovi.es

Capacidad de ampliación
Fail over
Balanceo de carga

9
API y servicios de la plataforma Java EE

Servicios Java EE

ene-09

alb@uniovi.es

10
Capas y arquitecturas de la plataforma Java EE

Arquitectura de N capas

ene-09

alb@uniovi.es

11
Capas y arquitecturas de la plataforma Java EE

JEE y las N capas

ene-09

alb@uniovi.es

12
Capas y arquitecturas de la plataforma Java EE

Arquitectura de N capas

ene-09

alb@uniovi.es

13
Capas y arquitecturas de la plataforma Java EE

Variantes en la arquitectura de
N capas en JEE
Centrada en la web
Combinada basada en la web y en
componentes EJB
arquitectura centrada en componentes EJB

Aplicaciones interempresariales (B2B)
Aplicaciones de servicios web

ene-09

alb@uniovi.es

14
Capas y arquitecturas de la plataforma Java EE

Arq. centrada en la web

ene-09

alb@uniovi.es

15
Capas y arquitecturas de la plataforma Java EE

Arq. centrada en EJB

ene-09

alb@uniovi.es

16
Capas y arquitecturas de la plataforma Java EE

Arquitectura B2B

ene-09

alb@uniovi.es

17
Capas y arquitecturas de la plataforma Java EE

Arq. de servicios Web

ene-09

alb@uniovi.es

18
Patrones Java EE

Catálogo de patrones Java EE

ene-09

alb@uniovi.es

19
Patrones Java EE

Algunos patrones en Java EE

ene-09

alb@uniovi.es

20
Contenidos

ene-09

alb@uniovi.es

21
Principios de desarrollo basado en componentes

Componentes Java EE
Componente: A menudo una agrupación de
clases e interfaces que implementan una
unidad autónoma de funciones.
Tipos de componentes JEE:
Servlets
JSP (java servlet pages)
Beans de sesion
Clases entidad
Beans de mensajes
ene-09

alb@uniovi.es

22
Principios de desarrollo basado en componentes

Características de los
componentes Java EE
Estado y propiedades
Encapsulación en un contenedor
Capacidad para interacciones de
componentes locales y distribuibles
Transparencia de ubicación
Obtención de referencias a
componentes a través de un sistema de
nombres
ene-09

alb@uniovi.es

23
Principios de desarrollo basado en componentes

Estado y propiedades de
componentes
Estado: Capacidad del componente para
almacenar información entre invocaciones del
mismo cliente:
Con estado
Sin estado
Ventaja técnica para mayor clusterización

Propiedades:
Característica visible de un componente:
En Java pares getters y setters
ene-09

alb@uniovi.es

24
Principios de desarrollo basado en componentes

Interfaces como contratos
Encapsulación: ejecución dentro de un
contenedor.
Independencia del entorno

Interfaces como contratos: Los
componentes interactúan solo través de
sus interfaces
Interface java
ene-09

alb@uniovi.es

25
Principios de desarrollo basado en componentes

Interfaces como contratos

ene-09

alb@uniovi.es

26
Principios de desarrollo basado en componentes

Conexiones remotas
(diversas tecnologías)

Conexiones
remotas y
locales

ene-09

Conexiones
locales

alb@uniovi.es

27
Principios de desarrollo basado en componentes

RMI, remote method
invocation

Marshalling y unmarshalling
Transmisión de excepciones
Transmisión del contexto de seguridad
Transmisión del contexto de transacción
ene-09
alb@uniovi.es

28
Principios de desarrollo basado en componentes

Implicaciones de invocación
remota
Cambio de semántica:
Paso por valor (remotas)
Paso por referencia (locales)

Marshalling y unmarshalling
Sobrecarga grande (10/1)

Acceso remoto proporciona
transparencia de ubicación
ene-09

alb@uniovi.es

29
Principios de desarrollo basado en componentes

Servicios de nombres en el
modelo de componentes

ene-09

alb@uniovi.es

30
Principios de desarrollo basado en componentes

Uso del API JNDI en JEE
Código a ejecutar
en la parte
cliente

Configuración en cliente
externo para localizar
el servidor JNDI

ene-09

alb@uniovi.es

31
Principios de desarrollo basado en componentes

Uso del API JNDI en JEE

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

ene-09

alb@uniovi.es

32
Tipos de objetos retornados
por JNDI
Conexiones a bases de datos relacionales
Conexiones a servicios de mensajería
Destinos de mensajes
Variables de entorno de componentes
Conexiones a sistemas heredados
compatibles con adaptadores de recursos

Necesario hacer un cast
ene-09

alb@uniovi.es

33
Principios de desarrollo basado en componentes

EJBContext para localizar
componentes

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

alb@uniovi.es

34
Principios de desarrollo basado en componentes

Inyección de dependencias en
vez de JNDI

El contenedor por medio de
reflectividad interviene el código en el
arranque del contenedor
ene-09

alb@uniovi.es

35
Modelo de comunicación asíncrona

Comparación entre comunicación
síncrona y asíncrona
Síncrona:
Semántica petición-respuesta
El llamador bloquea en espera mientras el
llamado resuelve

Asíncrona:
Semántica petición-notificación
El llamador no bloquea en espera
Reduce el acoplamiento
ene-09

alb@uniovi.es

36
Modelo de comunicación asíncrona

Interacción asíncrona de
componentes

ene-09

alb@uniovi.es

37
Modelo de comunicación asíncrona

Ventajas e inconvenientes de
las interacciones asíncronas
Ventajas:
Reducen acoplamiento entre componentes
Mejor rendimiento de máquinas en
operaciones largas

Inconvenientes:
Infraestructura más compleja
Servidores, buffers, notificaciones

Generan más tráfico de red ¿?
ene-09

alb@uniovi.es

38
Desarrollo de aplicaciones Java EE

Roles en JEE

ene-09

alb@uniovi.es

39
Desarrollo de aplicaciones Java EE

Fases de desarrollo
Diseño
Codificación
Creación de descriptores de
implementación
Empaquetado
Ensamblaje
Despliegue
ene-09

alb@uniovi.es

40
Desarrollo de aplicaciones Java EE

Ensamblado de EAR

ene-09

alb@uniovi.es

41
Comparación entre opciones de desarrollo

Opciones para automatizar el
empaquetado y el despliege
Herramientas específicas
Makefile
Apache ANT
muy usada en Java
Fichero build.xml con instrucciones
Solución universal
Ver ejemplo

IDE:
Eclipse, Netbeans
ene-09

alb@uniovi.es

42
Comparación entre opciones de desarrollo

Sistemas de control de código
fuente

ene-09

alb@uniovi.es

43
Configuración y empaquetado de aplicaciones JEE

Configuración y empaquetado
Archivos de almacenamiento web
(WAR)
Archivos de almacenamiento Java (JAR)
Archivos de almacenamiento de
recursos (RAR)
Archivos de almacenamiento
empresariales (EAR)
ene-09

alb@uniovi.es

44
Configuración y empaquetado de aplicaciones JEE

Archivos WEB

ene-09

alb@uniovi.es

45
Configuración y empaquetado de aplicaciones JEE

Creación manual de .WAR

ene-09
2008-2009

alb@uniovi.es
DASDI

46 46
Configuración y empaquetado de aplicaciones JEE

Archivos JAR
Contienen
módulos EJB
Clases
Interfaces
Descriptores
de despliege
Otros
recursos
ene-09

alb@uniovi.es

47
Configuración y empaquetado de aplicaciones JEE

Ejemplo estructura EJB-JAR

ene-09
2008-2009

alb@uniovi.es
DASDI

48 48
Configuración y empaquetado de aplicaciones JEE

Archivos de recursos (RAR)
Componente de más bajo nivel
integrado en el framework JEE
Manipulación de Transacciones, Seguridad
Llamadas nativas, manipulación de hilos,
etc
Adaptadores a otros sistemas, etc

ene-09

alb@uniovi.es

49
Configuración y empaquetado de aplicaciones JEE

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

ene-09

alb@uniovi.es

50
Configuración y empaquetado de aplicaciones JEE

Descriptores de despliege
Modo declarativo de describir las
interacciones entre componentes y entre
componentes y sus contenedores mediante el
uso de archivos XML
En Java EE 5, los descriptores de
implementación son optativos. Se pueden
utilizar anotaciones en el código.
Los descriptores de implementación, de
haberlos, anulan las anotaciones en el código.
ene-09

alb@uniovi.es

51
Configuración y empaquetado de aplicaciones JEE

Ejemplo ejb-jar.xml

ene-09

alb@uniovi.es

52
Configuración y empaquetado de aplicaciones JEE

Estructura application.xml

ene-09

alb@uniovi.es

53
Configuración y empaquetado de aplicaciones JEE

Descriptores específicos
Para cada contenedor concreto
Se especifican las características propias de
ese contendor
Cada contendor es distinto
En un empaquetado se pueden añadir
muchos descriptores distintos

ene-09

alb@uniovi.es

54
Configuración y empaquetado de aplicaciones JEE

Ejemplo
servidor
Sun Java
System

ene-09

alb@uniovi.es

55
Contenidos

ene-09

alb@uniovi.es

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

Arquitectura de aplicaciones
Java EE centrada en la web

ene-09

alb@uniovi.es

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

Arquitectura de aplicaciones
Java EE centrada en EJB

ene-09

alb@uniovi.es

58
Modelo de petición-respuesta de HTTP

Protocolo HTTP

ene-09

alb@uniovi.es

59
Modelo de petición-respuesta de HTTP

Tipos de peticiones HTTP
Un navegador puede enviar la información al
servidor de varias formas:
GET: Paso de parámetros en la propia URL
de acceso al servicio o recurso del servidor.
Método “doGet” del servlet
POST: Lo mismo que GET pero los
parámetros no van en la línea de URL sino en
otra línea a parte. El manejo es idéntico.
Método “doPost” del servlet.
PUT, …

ene-09

alb@uniovi.es

60
Modelo de petición-respuesta de HTTP

Peticiones GET y POST
Get: datos en query string
Post: datos en cuerpo de la petición

ene-09

Contenido del
paquete HTTP
alb@uniovi.es

61
Modelo de petición-respuesta de HTTP

Respuesta devuelta por el
servidor
Entre las cabeceras de respuesta:
Resultado de la petición (status-code)

MIME type de los datos

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
ene-09

alb@uniovi.es

62
Comparación entre servlets y componentes JSP

HolaMundo Servlet

ene-09

alb@uniovi.es

63
Comparación entre servlets y componentes JSP

Ejemplo de página JSP

ene-09

alb@uniovi.es

64
Comparación entre servlets y componentes JSP

JSP: Proceso de compilación

ene-09

alb@uniovi.es

65
Comparación entre servlets y componentes JSP

Ejemplo: de JSP a Servlet
(Tomcat)

ene-09

alb@uniovi.es

66
JSP a
Servlet.service()

Comparación entre servlets y componentes JSP

ene-09

alb@uniovi.es

67
Servlet API

ene-09

alb@uniovi.es

68
Servlets: Jerarquía
No es habitual implementar Servlet
directamente

Heredamos de HttpServlet
ene-09

alb@uniovi.es

69
Comparación entre servlets y componentes JSP

Administración y ciclo de vida

ene-09

alb@uniovi.es

70
Comparación entre servlets y componentes JSP

Método service()
Validar los datos de formulario.
Actualizar el modelo de datos de la
aplicación.
Reunir datos del modelo que va a
representarse.
Representar los datos en HTML o pasar
la petición y los datos a otro
componente para que los represente.
ene-09

alb@uniovi.es

71
Comparación entre servlets y componentes JSP

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

ene-09

alb@uniovi.es

72
Control de la concurrencia en componentes Web

Concurrencia basada en hilos

ene-09

alb@uniovi.es

73
Control de la concurrencia en componentes Web

Consecuencias para el
desarrollador
Un único Servlet puede estar atendiendo
múltiples peticiones simultáneas
Varios hilos ejecutándo service()
problemas de concurrencia

posibles

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

Posible recurso:
ene-09

alb@uniovi.es

74
Control de la concurrencia en componentes Web

Asignación de alias y raíz de
contexto web
Formato general de URI

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

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

bank.war
ene-09

alb@uniovi.es

75
Administración de sesiones

Control de sesión de usuario
HTTP no tiene sesión, la aplicación web debe
hacerse cargo de ella
Varias posibilidades tecnológicas
Enviar datos de sesión al navegador
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
ene-09

alb@uniovi.es

76
Complejidad de la capa Web

Problemas de desarrollo de
capas web
HTTP es petición-respuesta
El servidor no se puede comunicar con el cliente
La respuesta debe incluir una actualización de la
vista

Aplicaciones con muchas “pantallas” tendrán
muchos servlets y muchas URLs
difícil de
gestionar
JSP útil para presentar pero incómodo para
lógica, servlets lo contrario
ene-09

alb@uniovi.es

77
Complejidad de la capa Web

Arquitectura Model 1

ene-09
Secundino González Pérez

alb@uniovi.es

78
Complejidad de la capa Web

Arquitectura Model 2

ene-09
Secundino González Pérez

alb@uniovi.es

79
Patrones de diseño en la capa Web

Paradigma
modelo-vista-controlador

ene-09

alb@uniovi.es

80
Patrones de diseño en la capa Web

Arquitectura 2 y MVC

ene-09

alb@uniovi.es

81
Patrones de diseño en la capa Web

Patrón Business-Delegate

ene-09

alb@uniovi.es

82
Patrones de diseño en la capa Web

Frameworks disponibles
Generalizaciones del patrón MVC
Configuración XML del mapa de pantallas
Acciones, Vistas, etc

Struts (1 y 2)
Tapestry
Spring MVC
WebWork
Java Server faces
ene-09

alb@uniovi.es

83
Contenidos

ene-09

alb@uniovi.es

84
Conceptos básicos sobre el API de los servlets

API genéricas y específicas de
los protocolos

ene-09

alb@uniovi.es

85
Conceptos básicos sobre el API de los servlets

Método service()

ene-09

alb@uniovi.es

86
Conceptos básicos sobre el API de los servlets

Método service() en
HTTPServlet

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

ene-09

alb@uniovi.es

87
Conceptos básicos sobre el API de los servlets

Métodos de manejo de
peticiones

ene-09

alb@uniovi.es

88
Conceptos básicos sobre el API de los servlets

Métodos de manejo de
peticiones, código

ene-09

alb@uniovi.es

89
Conceptos básicos sobre el API de los servlets

HolaMundo Servlet

ene-09

alb@uniovi.es

90
Conceptos básicos sobre el API de los servlets

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

ene-09

alb@uniovi.es

91
Conceptos básicos sobre el API de los servlets

Ejemplo fichero web.xml

ene-09

alb@uniovi.es

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

Utilización de las API de
petición y respuesta
Service (doGet y doPost) reciben
interfaces instanciadas:
“HttpServletRequest” canal de entrada con
información enviada por el usuario
“HttpServletResponse” canal de salida
(página web)
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, java.io.IOException {
. . .
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, java.io.IOException {
. . .
ene-09
alb@uniovi.es
93
}
Utilización de las API de petición y respuesta

Utilización de las API de
petición y respuesta
WebContainer
ContentType[W]
Attributes[R/W/D]

Writer[W]

Parameters[R]

OutputStream[W]

Session[R/W/D]

Cookies[W]

Cookies [R]

Redirect[W]

HttpServeltRequest

ene-09

HttpServletResponse

service()
alb@uniovi.es

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

<form> y
request.getParameter()

ene-09

alb@uniovi.es

95
Reenvío de control y transferencia de datos

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

ene-09

alb@uniovi.es

96
Reenvío de control y transferencia de datos

Métodos forward e include
forward():
La salida del componente al que se transfiere el
control se convierte en la salida del componente
que lo ha llamado.
El componente llamante no puede generar
ninguna salida por sí solo.
Suelen utilizarlo los controladores (servlets)

include():
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)
ene-09

alb@uniovi.es

97
Reenvío de control y transferencia de datos

Transferencia de datos en la
request
Permite pasar datos desde un
componente a otro de la cadena de
procesamiento usando la request como
almacén

En el JSP
ene-09

alb@uniovi.es

98
Administración de sesiones

Gestión de la sesión por el
contenedor

ene-09

alb@uniovi.es

99
Administración de sesiones

Interfaz HttpSession

Deprecated methods

ene-09

alb@uniovi.es

100
Administración de sesiones

Enlace de sesion y navegador
Cookies
En servidor las inserta en cada respuesta al
navegador

Reescribiendo todas las URL generadas
por el contenedor
Rewrited as

ene-09

alb@uniovi.es

101
Administración de sesiones

Cierre de sesión, timeout,
nueva

ene-09

alb@uniovi.es

102
Contenidos

ene-09

alb@uniovi.es

103
Tecnología JSP como mecanismo de presentación

Presentación con JSP
Ventajas:
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)
ene-09

alb@uniovi.es

104
Tecnología JSP como mecanismo de presentación

Proceso de compilación

ene-09

alb@uniovi.es

105
Tecnología JSP como mecanismo de presentación

Elementos en las páginas JSP
Directivas
Permiten condicionar la generación del código del servlet
generado
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

ene-09

alb@uniovi.es

106
Creación de páginas JSP

Elementos en las páginas JSP

ene-09

alb@uniovi.es

107
Creación de páginas JSP

Formas sintácticas de las
etiquetas JSP

ene-09

alb@uniovi.es

108
Creación de páginas JSP

Directivas JSP
Las directivas son mensajes al contenedor
de JSP
Ejemplos:
Elemento
<%@ page ... %>
<%@ include ...
%>
<%@ taglib ... %>

Descripción
Permite importar clases Java, especificar el
tipo de la respuesta (“text/html” por omisión),
etcétera
Permite incluir otros ficheros antes de que la
página sea traducida a un servlet
Declara una biblioteca de etiquetas con
acciones personalizadas para ser utilizadas
en la página

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

alb@uniovi.es

109
Creación de páginas JSP

Directiva page

ene-09

alb@uniovi.es

110
Creación de páginas JSP

Directiva import
Inserta el texto de otro recurso en
tiempo de compilación

ene-09

alb@uniovi.es

111
Creación de páginas JSP

Ejemplo: directiva include

ene-09

alb@uniovi.es

112
Creación de páginas JSP

Elementos de “scripting”
Elemento

Descripción

<% ... %>

Scriptlet. se usa para meter código Java dentro

<%= ... %>

Expresión. Permite acceder al valor devuelto por
una expresión en Java e imprimirlo en OUT

<%! ... %>

Declaración. Usada para declarar variables y
métodos en la clase correspondiente a la página

Comentario. Comentario ignorado cuando se
<%-- … --%> traduce la página JSP en un servlet.
(comentario en el HTML <!-- comment )
ene-09

alb@uniovi.es

113
Creación de páginas JSP

Ejemplo: expresión, saludo.jsp
<%=

expresión

ene-09

Nota: Si se necesita usar los
caracteres "%>" dentro de un
scriptlet, hay que usar "%>" y
“<%”
alb@uniovi.es
114
Creación de páginas JSP

Ejemplo: scriptlet, saludo.jsp
<%

ene-09

alb@uniovi.es

115
Creación de páginas JSP

Ejemplo: declaración,
saludo.jsp
<%!

ene-09

alb@uniovi.es

116
Creación de páginas JSP

JSP: Objetos predefinidos
El código java incrustado en JSP tiene
acceso a los mismos objetos
predefinidos que tenían los servlets
Aquí se llaman como sigue:

ene-09

request
response
pageContext
session
application
out
config

Se puede acceder a
ellos directamente
desde los “scriptlets”

alb@uniovi.es

117
Procesamiento de datos de servlets

Acciones JSP
Etiquetas XML que tienen
procesamiento asociado

ene-09

alb@uniovi.es

118
Procesamiento de datos de servlets

<jsp:useBean

ene-09

alb@uniovi.es

119
Procesamiento de datos de servlets

<jsp:useBean id=“”

ene-09

alb@uniovi.es

120
Procesamiento de datos de servlets

Ambitos JSP

ene-09

alb@uniovi.es

121
Procesamiento de datos de servlets

Recuperando beans de la
request

ene-09

alb@uniovi.es

122
Bibliotecas de etiquetas personalizadas

Directiva taglib
Declara que la página usa una
librería de tags (acciones)
<%@ taglib uri=”http://www.mycorp/supertags” prefix=”super” %>
...
Alias definido en web.xml
<super:doMagic>
...
</super:doMagic>

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

Syntax
ene-09

alb@uniovi.es

123

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

Ejemplo de uso de JSTL y EL

ene-09

alb@uniovi.es

124
Contenidos

ene-09

alb@uniovi.es

125
Función de los componentes EJB

Tipos de EJB
Además de los componentes EJB, el contenedor EJB
también pueden contener clases entidad JPA y otras
clases auxiliares y de utilidad general.

ene-09

alb@uniovi.es

126
Función de los componentes EJB

Solución en capas
Service Interface

Control
Action
Action
Action
Action

Session Beans
implementan el
patrón Fachada
Clases Java
implementan el
modelo del
dominio
Persistence Interface

Fa
ca
de
Fa
ca
de

Hibernate DAO

Procs
Procs
Procs

Model
Model
Model

JDBC

JDBC DAO
JPA DAO
Spring DAO

Procs
DAO
Factory

Presentac.
ene-09

ene-09

Lógica
alb@uniovi.es

Persistencia
127
127
Función de los componentes EJB

Capas de EJBs

ene-09

alb@uniovi.es

128
Función de los componentes EJB

Interfaces Context
EJBContext
SessionContext
MessageContext

Permiten al componente EJB
interaccionar con el contenedor
Seguridad
Transacciones
Búsquedas JNDI
ene-09

alb@uniovi.es

129
Análisis del modelo de componentes EJB

Función del contenedor EJB

ene-09

alb@uniovi.es

130
Objetos EJB y proxies
Intercepta las
llamadas y
toma el control

ene-09

ene-09

Clase que se
programa

EJBObject

alb@uniovi.es

131
131
Conexión local
Interfaz local

EJB Container

Vistas de cliente
locales y
distribuidas
ene-09

ene-09

alb@uniovi.es
alb@uniovi.es

132132
Conexión remota
Interfaz remota

EJB Container

Vistas de cliente
locales y
distribuidas
ene-09

ene-09

alb@uniovi.es
alb@uniovi.es

133133
Invocación de stateless:
cliente
Este código se ejecuta en

otra máquina (JVM)
El cliente necesita acceso a la
implementación del stub
El stub se obtiene de un
registro JNDI

ene-09

ene-09

alb@uniovi.es

134
134
Llamada a EJB desde servlets

Servlet con referencia un bean
de sesión remoto sin estado
La referencia se guarda en atributo de
instancia
El bean staless es concurrente (thread safe)

Se inicializa en el init()

ene-09

alb@uniovi.es

135
Llamada a EJB desde servlets

Servlet con referencia a través
de anotaciones
Inyección de referencias
Solo es posible en componentes gestionados por
el contenedor

No hace falta contexto ni búsqueda JNDI.
El contenedor asigna un valor a la variable
de la referencia bankMgr cuando se
instancia el servlet.
La inicialización no genera excepciones.

ene-09

alb@uniovi.es

136
Contenidos

ene-09

alb@uniovi.es

137
Comparación de comportamientos con y sin estado

Mantenimiento del estado
Capa de usuario (programa cliente)
Trasiego de datos

Capa Web

Carrito de la compra
Datos en varias páginas

En HttpSession

Capa de negocio (EJB)
En EJBs con estado

Capa de base de datos
ene-09

alb@uniovi.es

138
Características de los beans sin estado

Beans sin estado
El bean no retiene información del cliente.
Entre invocaciones es posible que un cliente
no obtenga la misma instancia de bean de
sesión.
Una misma instancia de bean de sesión
puede manejar cualquier número de
solicitudes de cliente.
Mejora de rendimiento.

ene-09

alb@uniovi.es

139
Características de los beans sin estado

Beans sin estado
Cuidado con los atributos de instancia

ene-09

alb@uniovi.es

140
Características de los beans con estado

Beans con estado

ene-09

alb@uniovi.es

141
Creación de beans de sesión

Adaptación de una clase Java
a EJB sin sesión
Declarar interfaz de negocio
anotaciones

Definir clase de implementación

ene-09

alb@uniovi.es

142
Creación de beans de sesión

Interfaces locales y remotas

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

Un implementación puede ser
remota y local pero las anotaciones
van en cada interfaz
alb@uniovi.es

143
Creación de beans de sesión

Interfaces locales y remotas
La implementación se puede anotar con @Remote
pero no con @Local y @Remote a la vez
Un implementación puede ser remota y local pero las
anotaciones van en cada interfaz

ene-09

alb@uniovi.es

144
Creación de beans de sesión

Requisitos de la clase de
implementación
pública, no debe ser final ni abstracta
Constructor público que no acepte
parámetros.
El contenedor utiliza este constructor para
crear instancias de la clase de bean de
sesión.

No debe definir el método finalize.
ene-09

alb@uniovi.es

145
Creación de beans de sesión

Todas las anotaciones
Tipo de bean
@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
ene-09

@PostConstruct, @PreDestroy,
alb@uniovi.es
(Sólo statefull) @PostActivate, @PrePassivate

146
Creación de beans de sesión

Ciclo de vida de session beans
sin estado

ene-09

alb@uniovi.es

147
Creación de beans de sesión

Ciclo de vida de session beans
con estado

ene-09

alb@uniovi.es

148
Creación de beans de sesión

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

ene-09

alb@uniovi.es

149
Empaquetado y despliegue de beans de sesión

Metadatos de despliegue
En EJB 3.0: anotaciones y/o xml
Con anotaciones no es necesario el xml
Si están presentes los dos, el xml revoca
las configuraciones de anotaciones

Descriptores JEE:
Web: web.xml
EJB: ejb-jar.xml
Aplicaciones completas: application.xml
ene-09

alb@uniovi.es

150
Empaquetado y despliegue de beans de sesión

Ejemplo de ejb-jar.xml

ene-09

alb@uniovi.es

151
Empaquetado y despliegue de beans de sesión

Empaquetado
Web: <nombre>.war
EJB: <nombre>.jar
Archivo JAR nomal
Descriptor ejb-jar.xml en
/META-INF

Aplicaciones:
<nombre>.ear
Contiene WAR + JAR
Descriptor application.xml
en /META-INF
ene-09

alb@uniovi.es

152
Creación de un cliente bean de sesión

Posibles clientes
Otro EJB de sesion
Un servlet (o JSP compilado)
Clase Java normal
¿Cómo obtener una referencia al EJB?
Depende de si el cliente se ejecuta en un
contenedor o no (si es EJB/servlet o clase
normal)
ene-09

alb@uniovi.es

153
Creación de un cliente bean de sesión

Con servicios de contenedor
Servlet o EJB local
El contenedor inyecta la referencia

ene-09

alb@uniovi.es

154
Creación de un cliente bean de sesión

Con servicios de contenedor
Servlet o EJB remoto (en otro
contenedor)
Búsqueda JNDI
En ejb-jar.xml
o web.xml

ene-09

alb@uniovi.es

155
Creación de un cliente bean de sesión

Sin servicios de contenedor
Clase Java (local o remota)
Se deben usar los servicios JNDI

ene-09

alb@uniovi.es

156
Contenidos

ene-09

alb@uniovi.es

157
API de persistencia de Java

Persistencia
Necesidad de que los datos manejados
sobrevivan tras la ejecución a del
programa
Muchas técnicas y tecnologías (ficheros,
serialización, bases de datos, etc)

JPA: especificación de un mapeador
objeto/relacional
ene-09

alb@uniovi.es

158
Mapeadores objeto/relacional

Mapeador ORM
Diseño e implementación con OO pero
persistencia en BDD relacional
Diferentes paradigmas (diferencias
estructurales, dinámicas, etc)

Se busca tener persistencia automática
y (casi) transparente
Los objetos son persistentes (en BDDR) sin
apenas programación (mucho ahorro de
código tedioso)
ene-09

alb@uniovi.es

159
Requisitos de una clase Entidad

Clases Entidad
Representan conceptos del modelo de
dominio
Relacionadas con otros son el modelo del
dominio
Conjunto de clases que representan los conceptos
principales del problema (núcleo de la
funcionalidad del programa)

Otras clases de proceso (p.e: EJBs de sesión)
las manipulan
ene-09

alb@uniovi.es

160
Requisitos de una clase Entidad

Clase Java como Entidad
Deben seguir convenio Java Beans:
Setters y getters
Constructor sin parámetros
Recomendable
Serializable
hashCode() y equals() redefinido

Campo Identificador (clave)
Colecciones para asociaciones many
Puede ser Set<T>, List<T>, Map<T> o
Collection<T> (interfaces)
ene-09

alb@uniovi.es

161
ene-09

alb@uniovi.es

162
Requisitos de una clase Entidad

Modelo de dominio en código

ene-09

alb@uniovi.es

163
Requisitos de una clase Entidad

De clase a tabla

ene-09

alb@uniovi.es

164
Requisitos de una clase Entidad

Campos persistentes o
propiedades
Acceso field:
se anotan los atributos

Acceso properties:
se anotan los
getters
ene-09

alb@uniovi.es

165
Requisitos de una clase Entidad

Tipos Java persistentes
Tipos primitivos Java
Envoltorios Java, como java.lang.Integer
java.lang.String
byte[] y Byte[]
char[] y Character[]
Los tipos serializables, incluidos, entre otros:
java.util.Date, java.sql.TimeStamp
Cualquier otra clase del programa
ene-09

alb@uniovi.es

166
Ciclo de vida de las entidades

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
ene-09

alb@uniovi.es

167
Ciclo de vida de las entidades

Archivo persistence.xml
Define las clases que forman parte de la
persistence-unit (por su presencia)
Especifica el DataSource

ene-09

alb@uniovi.es

168
Ciclo de vida de las entidades

Ejemplo de uso de
EntityManager

ene-09

alb@uniovi.es

169
Ciclo de vida de las entidades

Estados de un objeto
persistente

ene-09

alb@uniovi.es

JVM

170
Ciclo de vida de las entidades

Notificación de cambios de
estado
Especificación de métodos callback con
anotaciones
@PrePersist
@PostPersist
@PreRemove
@PostRemove
@PreUpdate
@PostUpdate
@PostLoad
ene-09

alb@uniovi.es

171
Ciclo de vida de las entidades

Estructura típica de archivo
ejb-jar

ene-09

alb@uniovi.es

172
Ciclo de vida de las entidades

API JPA

ene-09

alb@uniovi.es

173
Ciclo de vida de las entidades

Consultas, lenguaje de
consulta
El EntityManager permite la creación de
objetos Query
NativeQuery
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
ene-09

alb@uniovi.es

174
Ciclo de vida de las entidades

Ejemplo de Queries

ene-09

alb@uniovi.es

175
Contenidos

ene-09

alb@uniovi.es

176
Semántica transaccional

Transacciones ACID
Es la demarcación de una unidad de
trabajo
JPA permite trabajar con varios API de
transacciones
JSE JDBC
JTA
Declarativas (EJB)
ene-09

alb@uniovi.es

177
Semántica transaccional

Control de concurrencia
Las trx ACID crean la ilusión de que cada
usuario es único en la base de datos
aíslan
a unos de otros
El aislamiento tradicionalmente se consigue
con bloqueos a nivel de fila, de rangos o de
tabla:
De lectura (compartido)
todos podemos leer pero nadie escribir

De escritura (exclusivo)
nadie puede leer porque voy a escribir y nadie más
puede escribir

Las transacciones JEE en contendor pueden
ser distribuidas
ene-09
alb@uniovi.es
178
Transacciones programáticas y declarativas

Control de la trx
Programáticas: el programador se hace
cargo de la gestión usando el JTA
Acceso a la trx en curso por JNDI

Declarativas: se especifica para cada
operación su comportamiento
transaccional
El contendor se encarga de la gestión
Anotaciones o xml
ene-09

alb@uniovi.es

179
Controlar transacciones programáticas JTA

Control usando JTA
Acceso JNDI o anotacion

ene-09

alb@uniovi.es

180
Controlar transacciones programáticas JTA

Ejemplo de control de
transacción

ene-09

alb@uniovi.es

181
Transacciones administradas por el contenedor

Control por el contenedor

El atributo de la trx controla el ciclo de vida
de la transacción en curso

ene-09

Required
RequiresNew
NotSupported
Supports
Mandatory
Never

alb@uniovi.es

182
Transacciones administradas por el contenedor

Coordinador de transacciones

ene-09

alb@uniovi.es

183
Bloqueo optimista y control de versiones

Control pesimista y optimista
ROLLBACK

Lock

Lock

v1.0

Lock

ROLLBACK
PESIMISTA

ene-09

v1.0

v2.0

En BDD ya no es v1.0
OPTIMISTA

Alberto alb@uniovi.es
M.F.A. alb@uniovi.es

184
Bloqueo optimista y control de versiones

Control optimista
Diferencia entre trx de sistema y trx de
aplicación
El control optimista además permite
detectar cambios en actualizaciones
entre trx de sistema
La solución optimista es
añadir versión a los
objetos

ene-09

Alberto alb@uniovi.es
M.F.A. alb@uniovi.es

185
Bloqueo optimista y control de versiones

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

ene-09

Alberto alb@uniovi.es
M.F.A. alb@uniovi.es

186
Bloqueo optimista y control de versiones
Tipos válidos
para
versionado

Mapeado de campos
!

Sin get/set

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

ene-09

Alberto alb@uniovi.es
M.F.A. alb@uniovi.es

187
Excepciones durante una transacción

Excepciones JPA
Todas las excepciones JPA son
fatales y dejan el contexto de
persistencia inutilizado
Todas las excepciones lanzadas por
EntityManager provocan rollback()
Todas las de Query tb, excepto
NoResultException y
NonUniqueResultException.
Todas NO chequeadas

ene-09

Alberto alb@uniovi.es
M.F.A. alb@uniovi.es

188
Excepciones durante una transacción

Chequeadas y no chequeadas
No chequeadas provocan rollback
Las chequedas por sí solas no
Trx distribuidas:
Otro agente puede provocar rollback y ya
lo notificó
comprobar si la trx está
marcada para rollback
Uso de EJBContext
getRollbackOnly
setRollbackOnly
ene-09

alb@uniovi.es

189
Contenidos

ene-09

alb@uniovi.es

190
Tecnología del API JMS

Middleware orientado a
mensajes (MOM)
Permite conexiones desacopladas entre
sistemas
Facilita la integración entre sistemas de
tecnologías dispares
Añaden una capa intermedia

La interacción entre sistemas se basa
en intercambio de mensajes (o eventos)
ene-09

alb@uniovi.es

191
Tecnología del API JMS

MOM como integrador

Distribución
de mensajes
Clientes de
mensajería
ene-09

alb@uniovi.es

192
Tecnología del API JMS

Tipos de clientes de
mensajería
Se bloquea esperando
la llegada de un mensaje

ene-09

alb@uniovi.es

193
Tecnología del API JMS

Arquitectura de mensajería
punto a punto

Cuando el consumidor recoge el mensaje se
borra de la cola
Puede haber múltiples consumidores, pero “el
primero que llega se lo lleva”
También pude haber múltiples productores
enviando a la misma cola
ene-09

alb@uniovi.es

194
Tecnología del API JMS

Arquitectura de mensajería de
publicación/suscripción
El tema es
como una lista
de distribución
El mensaje se
conserva hasta
que todos los
suscritos lo
consumen
ene-09

alb@uniovi.es

195
Tecnología del API JMS

Elementos del API JMS

ene-09

alb@uniovi.es

196
Tecnología del API JMS

Estructura de los mensajes

ene-09

alb@uniovi.es

197
Creación de un productor de mensajes de cola

Diagrama de colaboración

ene-09

alb@uniovi.es

198
Ejemplo

Creación de un productor de mensajes de cola

ene-09

alb@uniovi.es

199
Creación de un consumidor de mensajes síncrono

Diagrama de colaboración

ene-09

alb@uniovi.es

200
Ejemplo

Creación de un consumidor de mensajes síncrono

ene-09

alb@uniovi.es

201
Creación de un consumidor de mensajes asíncrono

Método gestor del evento

ene-09

alb@uniovi.es

202
Creación de un consumidor de mensajes asíncrono

ene-09

alb@uniovi.es

203
EJB como clientes de mensajería

EJB como clientes de
mensajería

ene-09

alb@uniovi.es

204
Contenidos

ene-09

alb@uniovi.es

205
Introducción a los beans controlados por mensajes

MessageDriven Beans
Son clientes asíncronos de mensajes
Implementan el interfaz
MessageListener
Desconectados de cliente

ene-09

alb@uniovi.es

206
Introducción a los beans controlados por mensajes

Ciclo de vida

Posible interceptar
los cambios de estado
@PostConstruct
@PreDestroy
ene-09

alb@uniovi.es

207
Creación de un bean controlado por mensajes

Código ejemplo

ene-09

alb@uniovi.es

208
Creación de un bean controlado por mensajes

Filtra los mensajes
que llegan

ene-09

alb@uniovi.es

209
Contenidos

ene-09

alb@uniovi.es

210
Finalidad de los servicios web

Servicios Web
W3C: “sistema de software diseñado para
permitir la interacción interoperable entre
máquinas en una red”
Características:
Independencia de plataforma (Hw + SO)
Uso de tecnologías Internet: XML, HTTP, etc
Interoperabilidad de programas: clientes y
servidores escritos en cualquier lenguaje

Invocación a servicios ofrecidos como
procedimientos
ene-09

alb@uniovi.es

211
Finalidad de los servicios web

Servicios web como
componentes remotos
Mismo paradigma que otras soluciones
anteriores:
CORBA
RMI
RPC
DCOM

Diferencia técnica: Se emplean tecnologías
estándares abiertas Internet
XML, SOAP
HTTP, SMTP

ene-09

alb@uniovi.es

212
Finalidad de los servicios web

Comparación entre servicios
web y EJB remotos
La implementación del servicio web
similar a un EJB de sesión
El registro JNDI podría ser el registro
UDDI de los WS
El protocolo de transporte HTTP en vez
de RMI-IIOP
Los datos se transfieren en XML (SOAP)
en ves de serializados
ene-09

alb@uniovi.es

213
Especificaciones de los servicios web

Requisitos de interoperabilidad
Intercambio de mensajes HTTP y XML
Se necesita cerrar más las posibilidades
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
ene-09

alb@uniovi.es

214
Especificaciones de los servicios web

Arquitectura de WS

ene-09

alb@uniovi.es

215
Especificaciones de los servicios web

Ejemplo mensajes SOAP
Petición

Respuesta

ene-09

alb@uniovi.es

216
Especificaciones de los servicios web

Ejemplo WSDL “hola mundo”

Estructura general
de documento WSDL

ene-09

alb@uniovi.es

217
APIs de Java relacionados con servicios web

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

-

+
Complejidad

ene-09

API de más alto nivel
Usa todas las demás por debajo
Permite manejo de WS sin conocimientos de XML,
SOAP, etc
alb@uniovi.es

218
Contenidos

ene-09

alb@uniovi.es

219
Puntos finales servlet JAX-WS

Punto final un Servlet

web.xml

ene-09

alb@uniovi.es

220
Puntos finales EJB JAX-WS

Punto final un EJB

ene-09

alb@uniovi.es

221
Puntos finales EJB JAX-WS

Tipos de datos admitidos en
JAX-WS
Se pueden
transferir
tipos básicos
a WS
Tipos
complejos
deben
marcados

ene-09

alb@uniovi.es

222
Clientes de servicios Web

Desarrollo de clientes
Es necesario disponer del WSDL
A partir del archivo de especificación se
pueden generar clases proxy
Las usa el cliente
Se encargan de localizar el servicio y realizar las
conversiones Java
SOAP

También es posible generar el proxy
dinámicamente
ene-09

alb@uniovi.es

223
Clientes de servicios Web

Ejemplo

Cliente con proxy dinámico

Cliente con proxy estático
ene-09

alb@uniovi.es

224
Contenidos

ene-09

alb@uniovi.es

225
Seguridad administrada por el contenedor

Conceptos de seguridad
Autenticación
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
ene-09

alb@uniovi.es

226
Seguridad administrada por el contenedor

Conceptos
Autenticación y autorización pueden ser
gestionados por JEE
No es aconsejable usar estrategias de
seguridad programáticas
poco
portables, poco maduras

Confidencialidad e integridad
conseguidas con un protocolo de
transporte seguro
SSL (TLS)
ene-09

alb@uniovi.es

227
Seguridad administrada por el contenedor

Propagación del contexto de
seguridad

ene-09

alb@uniovi.es

228
Seguridad administrada por el contenedor

Seguridad para WEB (HTTPS)
HTTPS = HTTP Secure
HTTP sobre un protocolo de
transporte seguro
HTTP

SSL

TCP

SSL también es conocido
como TLS según IETF
ene-09

ene-09

Albertoalb@uniovi.es
M.F.A.

229
229
Seguridad administrada por el contenedor

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
Del servidor siempre,
asimétrica
del cliente si tiene
certificado
Ofrece:

ene-09

Autentificación
Confidencialidad
Integridad
alb@uniovi.es

230
Seguridad administrada por el contenedor

Autenticación administrada
por contenedor web

ene-09

alb@uniovi.es

231
Seguridad administrada por el contenedor

Especificación
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
ene-09

alb@uniovi.es

232
Seguridad administrada por el contenedor

web.xml
Colección de recursos, roles y métodos

Si no hay método todos
están protegidos

ene-09

alb@uniovi.es

233
Seguridad administrada por el contenedor

web.xml
Roles

Técnicas

ene-09

alb@uniovi.es

234
Seguridad administrada por el contenedor

Tipos de autenticación
soportados
BASIC
DIGEST
FORM
CLIENT-CERT

ene-09

alb@uniovi.es

235
Seguridad administrada por el contenedor

Autentificación por Formulario
No es segura por sí sola, es necesario
combinarla con HTTPs (SSL – Secure Socket
Layer)
Permite controlar la apariencia de la pantalla
de login
La pantalla de login es HTML estándar, sigue
un convenio de nombres
Action: j_security_check
Login: j_username
Pass: j_password
ene-09

alb@uniovi.es

236
Seguridad administrada por el contenedor

Interacción con la
infraestructura de seguridad
BDD de usuarios y roles
El contenedor consulta los datos de una
fuente directamente
Tipos de fuentes y configuración
dependen de la implementación del
contenedor
Base de datos (tablas: usuarios, roles)
Ficheros XML
Ficheros de propiedades
...
ene-09

Consultar documentación del
alb@uniovi.es
contenedor

237
Roles y responsabilidades del usuario

Usuarios y roles

ene-09

alb@uniovi.es

238
Roles y responsabilidades del usuario

Autorización basada en
funciones en la capa EJB

ene-09

alb@uniovi.es

239
Utilización del API de seguridad

Métodos de API
Métodos en web:
getUserPrincipal y isUserInRole

Métodos en EJB:
getCallerPrincipal y isCallerInRole

ene-09

alb@uniovi.es

240
Utilización del API de seguridad

API de seguridad de la capa
web

ene-09

alb@uniovi.es

241
Utilización del API de seguridad

API de seguridad de la capa
EJB

ene-09

alb@uniovi.es

242
Seguridad HTTP y clientes JAX-WS

Autenticar clientes de WS
Mismo caso que el del navegador web
En el paquete HTTP debe ir la
autenticación de usuario (sobre SSL)

Si el WSDL está protegido el cliente
debe tener una copia local
ene-09

alb@uniovi.es

243

Mais conteúdo relacionado

Mais procurados

Introducción Spring Framework
Introducción Spring FrameworkIntroducción Spring Framework
Introducción Spring Framework
econtinua
 

Mais procurados (20)

Seminario de programación Java, con Apache Maven, J2EE, JPA, Primefaces
Seminario de programación Java, con Apache Maven, J2EE, JPA, PrimefacesSeminario de programación Java, con Apache Maven, J2EE, JPA, Primefaces
Seminario de programación Java, con Apache Maven, J2EE, JPA, Primefaces
 
Introduccion Aplicaciones Web en java j2ee
Introduccion Aplicaciones Web en java j2ee Introduccion Aplicaciones Web en java j2ee
Introduccion Aplicaciones Web en java j2ee
 
Introducción a JEE
Introducción a JEEIntroducción a JEE
Introducción a JEE
 
[ES] Fundamentos de Java Enterprise Edition
[ES] Fundamentos de Java Enterprise Edition [ES] Fundamentos de Java Enterprise Edition
[ES] Fundamentos de Java Enterprise Edition
 
Introdución a aplicaciones web en java
Introdución a aplicaciones web en java Introdución a aplicaciones web en java
Introdución a aplicaciones web en java
 
Arquitectura java web
Arquitectura java webArquitectura java web
Arquitectura java web
 
JEE y Tomcat
JEE y TomcatJEE y Tomcat
JEE y Tomcat
 
Java script
Java scriptJava script
Java script
 
1/9 Curso JEE5, Soa, Web Services, ESB y XML
1/9 Curso JEE5, Soa, Web Services, ESB y XML1/9 Curso JEE5, Soa, Web Services, ESB y XML
1/9 Curso JEE5, Soa, Web Services, ESB y XML
 
Frameworks J2EE
Frameworks J2EEFrameworks J2EE
Frameworks J2EE
 
spring
springspring
spring
 
J2 ee
J2 eeJ2 ee
J2 ee
 
Sesion 01 - Introduccion a Net Framework
Sesion 01 - Introduccion a Net FrameworkSesion 01 - Introduccion a Net Framework
Sesion 01 - Introduccion a Net Framework
 
Introducción JEE
Introducción JEEIntroducción JEE
Introducción JEE
 
Introducción a Java y BEA (2008)
Introducción a Java y BEA (2008)Introducción a Java y BEA (2008)
Introducción a Java y BEA (2008)
 
Modernizacion Oracle Forms
Modernizacion Oracle FormsModernizacion Oracle Forms
Modernizacion Oracle Forms
 
Introducción a Spring framework
Introducción a Spring frameworkIntroducción a Spring framework
Introducción a Spring framework
 
Persistencia de datos_hibernate_arquitecturas_de_software
Persistencia de datos_hibernate_arquitecturas_de_softwarePersistencia de datos_hibernate_arquitecturas_de_software
Persistencia de datos_hibernate_arquitecturas_de_software
 
Introducción Spring Framework
Introducción Spring FrameworkIntroducción Spring Framework
Introducción Spring Framework
 
De Forms a Oracle Fusion Middleware
De Forms a Oracle Fusion MiddlewareDe Forms a Oracle Fusion Middleware
De Forms a Oracle Fusion Middleware
 

Destaque (8)

Conexión a SQL Server con C#.NET a través de ODBC
Conexión a SQL Server con C#.NET a través de ODBCConexión a SQL Server con C#.NET a través de ODBC
Conexión a SQL Server con C#.NET a través de ODBC
 
DAP - Configuracion ambiente de desarrollo
DAP - Configuracion ambiente de desarrolloDAP - Configuracion ambiente de desarrollo
DAP - Configuracion ambiente de desarrollo
 
Desarrollo de aplicaciones empresariales Introducción
Desarrollo de aplicaciones empresariales IntroducciónDesarrollo de aplicaciones empresariales Introducción
Desarrollo de aplicaciones empresariales Introducción
 
Base datos
Base datosBase datos
Base datos
 
MVC: El modelo
MVC: El modeloMVC: El modelo
MVC: El modelo
 
MVC: La Vista
MVC: La VistaMVC: La Vista
MVC: La Vista
 
Html
HtmlHtml
Html
 
DISEÑO DE LA ARQUITECTURA DEL SOFTWARE
DISEÑO DE LA ARQUITECTURA DEL SOFTWAREDISEÑO DE LA ARQUITECTURA DEL SOFTWARE
DISEÑO DE LA ARQUITECTURA DEL SOFTWARE
 

Semelhante a Sesion 3. desarrollo de aplicaciones jee

Ejb30 3
Ejb30 3 Ejb30 3
Ejb30 3
oscar
 
Manual 2014 i 04 lenguaje de programación ii (0870)
Manual 2014 i 04 lenguaje de programación ii (0870)Manual 2014 i 04 lenguaje de programación ii (0870)
Manual 2014 i 04 lenguaje de programación ii (0870)
Robert Rayco Quiroz
 
J2 Ee Para Seres Humanos Slides
J2 Ee Para Seres Humanos SlidesJ2 Ee Para Seres Humanos Slides
J2 Ee Para Seres Humanos Slides
mundojava
 
Introducción-a-Microsoft.NET-[parte2]
Introducción-a-Microsoft.NET-[parte2]Introducción-a-Microsoft.NET-[parte2]
Introducción-a-Microsoft.NET-[parte2]
Kevin Reaño
 
1 curso javaserverfaces-presentacion_clase_1
1 curso javaserverfaces-presentacion_clase_11 curso javaserverfaces-presentacion_clase_1
1 curso javaserverfaces-presentacion_clase_1
josezapana
 

Semelhante a Sesion 3. desarrollo de aplicaciones jee (20)

Curso Java Avanzado 5 Ejb
Curso Java Avanzado   5 EjbCurso Java Avanzado   5 Ejb
Curso Java Avanzado 5 Ejb
 
Zend Framework - MVC - 2008
Zend Framework - MVC - 2008Zend Framework - MVC - 2008
Zend Framework - MVC - 2008
 
Curso Java Avanzado 1 IntroduccióN Al Desarrollo Web
Curso Java Avanzado   1 IntroduccióN Al Desarrollo WebCurso Java Avanzado   1 IntroduccióN Al Desarrollo Web
Curso Java Avanzado 1 IntroduccióN Al Desarrollo Web
 
Ejb30 3
Ejb30 3 Ejb30 3
Ejb30 3
 
J2EE - 01 Arquitectura Web
J2EE - 01   Arquitectura WebJ2EE - 01   Arquitectura Web
J2EE - 01 Arquitectura Web
 
Manual 2014 i 04 lenguaje de programación ii (0870)
Manual 2014 i 04 lenguaje de programación ii (0870)Manual 2014 i 04 lenguaje de programación ii (0870)
Manual 2014 i 04 lenguaje de programación ii (0870)
 
1. Introduccion a .Net
1. Introduccion a .Net1. Introduccion a .Net
1. Introduccion a .Net
 
01 jee5-componentes
01 jee5-componentes01 jee5-componentes
01 jee5-componentes
 
Mvc
MvcMvc
Mvc
 
Framework spring
Framework springFramework spring
Framework spring
 
J2 Ee Para Seres Humanos Slides
J2 Ee Para Seres Humanos SlidesJ2 Ee Para Seres Humanos Slides
J2 Ee Para Seres Humanos Slides
 
Poc 2
Poc 2Poc 2
Poc 2
 
PD1_7moA_TS3_JavierLogroño.pptx
PD1_7moA_TS3_JavierLogroño.pptxPD1_7moA_TS3_JavierLogroño.pptx
PD1_7moA_TS3_JavierLogroño.pptx
 
Trabajar con bases de datos desde ASP.NET
Trabajar con bases de datos desde ASP.NETTrabajar con bases de datos desde ASP.NET
Trabajar con bases de datos desde ASP.NET
 
curso-de-visual-basic-net.pdf
curso-de-visual-basic-net.pdfcurso-de-visual-basic-net.pdf
curso-de-visual-basic-net.pdf
 
Introducción-a-Microsoft.NET-[parte2]
Introducción-a-Microsoft.NET-[parte2]Introducción-a-Microsoft.NET-[parte2]
Introducción-a-Microsoft.NET-[parte2]
 
Persistencia de datos en Java
Persistencia de datos en JavaPersistencia de datos en Java
Persistencia de datos en Java
 
1 curso javaserverfaces-presentacion_clase_1
1 curso javaserverfaces-presentacion_clase_11 curso javaserverfaces-presentacion_clase_1
1 curso javaserverfaces-presentacion_clase_1
 
Para Flor :P
Para Flor :PPara Flor :P
Para Flor :P
 
Entity framework
Entity frameworkEntity framework
Entity framework
 

Último

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
nicho110
 

Último (12)

PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 

Sesion 3. desarrollo de aplicaciones jee

  • 1. Desarrollo de aplicaciones JEE ene-09 alb@uniovi.es 1
  • 3. Requisitos de las aplicaciones de empresa Plataformas de la tecnología Java y Java EE ene-09 alb@uniovi.es 3
  • 4. Requisitos de las aplicaciones de empresa Tecnologías de infraestructura en aplicaciones de empresa ene-09 alb@uniovi.es 4
  • 5. Requisitos de las aplicaciones de empresa Elementos de la tecnología Java EE ene-09 alb@uniovi.es 5
  • 6. Requisitos de las aplicaciones de empresa Función de las API de Java EE ene-09 alb@uniovi.es 6
  • 7. Requisitos de las aplicaciones de empresa Contenedores Java EE ene-09 alb@uniovi.es 7
  • 8. Requisitos de las aplicaciones de empresa Separación de lógica de negocio y servicios ene-09 alb@uniovi.es 8
  • 9. API y servicios de la plataforma Java EE Servicios Java EE: categorías De implementación: Inherentes: Persistencia Transacciones Seguridad Ciclo de vida Subprocesos (threading) Comunicación con objetos remotos, como RMI y CORBA API: Asignación de nombres Mensajería Conectores Configurados en XML o con annotations ene-09 Del fabricante: Usados desde código alb@uniovi.es Capacidad de ampliación Fail over Balanceo de carga 9
  • 10. API y servicios de la plataforma Java EE Servicios Java EE ene-09 alb@uniovi.es 10
  • 11. Capas y arquitecturas de la plataforma Java EE Arquitectura de N capas ene-09 alb@uniovi.es 11
  • 12. Capas y arquitecturas de la plataforma Java EE JEE y las N capas ene-09 alb@uniovi.es 12
  • 13. Capas y arquitecturas de la plataforma Java EE Arquitectura de N capas ene-09 alb@uniovi.es 13
  • 14. Capas y arquitecturas de la plataforma Java EE Variantes en la arquitectura de N capas en JEE Centrada en la web Combinada basada en la web y en componentes EJB arquitectura centrada en componentes EJB Aplicaciones interempresariales (B2B) Aplicaciones de servicios web ene-09 alb@uniovi.es 14
  • 15. Capas y arquitecturas de la plataforma Java EE Arq. centrada en la web ene-09 alb@uniovi.es 15
  • 16. Capas y arquitecturas de la plataforma Java EE Arq. centrada en EJB ene-09 alb@uniovi.es 16
  • 17. Capas y arquitecturas de la plataforma Java EE Arquitectura B2B ene-09 alb@uniovi.es 17
  • 18. Capas y arquitecturas de la plataforma Java EE Arq. de servicios Web ene-09 alb@uniovi.es 18
  • 19. Patrones Java EE Catálogo de patrones Java EE ene-09 alb@uniovi.es 19
  • 20. Patrones Java EE Algunos patrones en Java EE ene-09 alb@uniovi.es 20
  • 22. 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: Servlets JSP (java servlet pages) Beans de sesion Clases entidad Beans de mensajes ene-09 alb@uniovi.es 22
  • 23. Principios de desarrollo basado en componentes Características de los componentes Java EE Estado y propiedades Encapsulación en un contenedor Capacidad para interacciones de componentes locales y distribuibles Transparencia de ubicación Obtención de referencias a componentes a través de un sistema de nombres ene-09 alb@uniovi.es 23
  • 24. 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: En Java pares getters y setters ene-09 alb@uniovi.es 24
  • 25. 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 Interface java ene-09 alb@uniovi.es 25
  • 26. Principios de desarrollo basado en componentes Interfaces como contratos ene-09 alb@uniovi.es 26
  • 27. Principios de desarrollo basado en componentes Conexiones remotas (diversas tecnologías) Conexiones remotas y locales ene-09 Conexiones locales alb@uniovi.es 27
  • 28. Principios de desarrollo basado en componentes RMI, remote method invocation Marshalling y unmarshalling Transmisión de excepciones Transmisión del contexto de seguridad Transmisión del contexto de transacción ene-09 alb@uniovi.es 28
  • 29. Principios de desarrollo basado en componentes 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 ene-09 alb@uniovi.es 29
  • 30. Principios de desarrollo basado en componentes Servicios de nombres en el modelo de componentes ene-09 alb@uniovi.es 30
  • 31. Principios de desarrollo basado en componentes Uso del API JNDI en JEE Código a ejecutar en la parte cliente Configuración en cliente externo para localizar el servidor JNDI ene-09 alb@uniovi.es 31
  • 32. Principios de desarrollo basado en componentes Uso del API JNDI en JEE El registro JNDI mantiene referencias a los beans que sirve el contenedor ene-09 alb@uniovi.es 32
  • 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 ene-09 alb@uniovi.es 33
  • 34. Principios de desarrollo basado en componentes EJBContext para localizar componentes EJBContext: contexto JNDI especializado para localizar ejb en java:comp/env ene-09 alb@uniovi.es 34
  • 35. Principios de desarrollo basado en componentes Inyección de dependencias en vez de JNDI El contenedor por medio de reflectividad interviene el código en el arranque del contenedor ene-09 alb@uniovi.es 35
  • 36. 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: Semántica petición-notificación El llamador no bloquea en espera Reduce el acoplamiento ene-09 alb@uniovi.es 36
  • 37. Modelo de comunicación asíncrona Interacción asíncrona de componentes ene-09 alb@uniovi.es 37
  • 38. 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 Servidores, buffers, notificaciones Generan más tráfico de red ¿? ene-09 alb@uniovi.es 38
  • 39. Desarrollo de aplicaciones Java EE Roles en JEE ene-09 alb@uniovi.es 39
  • 40. Desarrollo de aplicaciones Java EE Fases de desarrollo Diseño Codificación Creación de descriptores de implementación Empaquetado Ensamblaje Despliegue ene-09 alb@uniovi.es 40
  • 41. Desarrollo de aplicaciones Java EE Ensamblado de EAR ene-09 alb@uniovi.es 41
  • 42. 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: Eclipse, Netbeans ene-09 alb@uniovi.es 42
  • 43. Comparación entre opciones de desarrollo Sistemas de control de código fuente ene-09 alb@uniovi.es 43
  • 44. Configuración y empaquetado de aplicaciones JEE Configuración y empaquetado Archivos de almacenamiento web (WAR) Archivos de almacenamiento Java (JAR) Archivos de almacenamiento de recursos (RAR) Archivos de almacenamiento empresariales (EAR) ene-09 alb@uniovi.es 44
  • 45. Configuración y empaquetado de aplicaciones JEE Archivos WEB ene-09 alb@uniovi.es 45
  • 46. Configuración y empaquetado de aplicaciones JEE Creación manual de .WAR ene-09 2008-2009 alb@uniovi.es DASDI 46 46
  • 47. Configuración y empaquetado de aplicaciones JEE Archivos JAR Contienen módulos EJB Clases Interfaces Descriptores de despliege Otros recursos ene-09 alb@uniovi.es 47
  • 48. Configuración y empaquetado de aplicaciones JEE Ejemplo estructura EJB-JAR ene-09 2008-2009 alb@uniovi.es DASDI 48 48
  • 49. Configuración y empaquetado de aplicaciones JEE 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 ene-09 alb@uniovi.es 49
  • 50. Configuración y empaquetado de aplicaciones JEE Archivos EAR Archivo que contiene todas las capas de la aplicación y todos los subcomponentes ene-09 alb@uniovi.es 50
  • 51. Configuración y empaquetado de aplicaciones JEE Descriptores de despliege Modo declarativo de describir las interacciones entre componentes y entre componentes y sus contenedores mediante el uso de archivos XML En Java EE 5, los descriptores de implementación son optativos. Se pueden utilizar anotaciones en el código. Los descriptores de implementación, de haberlos, anulan las anotaciones en el código. ene-09 alb@uniovi.es 51
  • 52. Configuración y empaquetado de aplicaciones JEE Ejemplo ejb-jar.xml ene-09 alb@uniovi.es 52
  • 53. Configuración y empaquetado de aplicaciones JEE Estructura application.xml ene-09 alb@uniovi.es 53
  • 54. Configuración y empaquetado de aplicaciones JEE 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 ene-09 alb@uniovi.es 54
  • 55. Configuración y empaquetado de aplicaciones JEE Ejemplo servidor Sun Java System ene-09 alb@uniovi.es 55
  • 57. Función de los componentes web en una aplicación Java EE Arquitectura de aplicaciones Java EE centrada en la web ene-09 alb@uniovi.es 57
  • 58. Función de los componentes web en una aplicación Java EE Arquitectura de aplicaciones Java EE centrada en EJB ene-09 alb@uniovi.es 58
  • 59. Modelo de petición-respuesta de HTTP Protocolo HTTP ene-09 alb@uniovi.es 59
  • 60. Modelo de petición-respuesta de HTTP Tipos de peticiones HTTP Un navegador puede enviar la información al servidor de varias formas: GET: Paso de parámetros en la propia URL de acceso al servicio o recurso del servidor. Método “doGet” del servlet POST: Lo mismo que GET pero los parámetros no van en la línea de URL sino en otra línea a parte. El manejo es idéntico. Método “doPost” del servlet. PUT, … ene-09 alb@uniovi.es 60
  • 61. Modelo de petición-respuesta de HTTP Peticiones GET y POST Get: datos en query string Post: datos en cuerpo de la petición ene-09 Contenido del paquete HTTP alb@uniovi.es 61
  • 62. 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 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 ene-09 alb@uniovi.es 62
  • 63. Comparación entre servlets y componentes JSP HolaMundo Servlet ene-09 alb@uniovi.es 63
  • 64. Comparación entre servlets y componentes JSP Ejemplo de página JSP ene-09 alb@uniovi.es 64
  • 65. Comparación entre servlets y componentes JSP JSP: Proceso de compilación ene-09 alb@uniovi.es 65
  • 66. Comparación entre servlets y componentes JSP Ejemplo: de JSP a Servlet (Tomcat) ene-09 alb@uniovi.es 66
  • 67. JSP a Servlet.service() Comparación entre servlets y componentes JSP ene-09 alb@uniovi.es 67
  • 69. Servlets: Jerarquía No es habitual implementar Servlet directamente Heredamos de HttpServlet ene-09 alb@uniovi.es 69
  • 70. Comparación entre servlets y componentes JSP Administración y ciclo de vida ene-09 alb@uniovi.es 70
  • 71. Comparación entre servlets y componentes JSP Método service() Validar los datos de formulario. Actualizar el modelo de datos de la aplicación. Reunir datos del modelo que va a representarse. Representar los datos en HTML o pasar la petición y los datos a otro componente para que los represente. ene-09 alb@uniovi.es 71
  • 72. 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 JSP para generar la vista Servlets para ejecutar la lógica del negocio ene-09 alb@uniovi.es 72
  • 73. Control de la concurrencia en componentes Web Concurrencia basada en hilos ene-09 alb@uniovi.es 73
  • 74. Control de la concurrencia en componentes Web Consecuencias para el desarrollador Un único Servlet puede estar atendiendo múltiples peticiones simultáneas Varios hilos ejecutándo service() problemas de concurrencia posibles Precauciones al: Usar variables de instancia Usar variables de clase (static) Acceder a recursos externos si ellos no soportan concurrencia Posible recurso: ene-09 alb@uniovi.es 74
  • 75. Control de la concurrencia en componentes Web Asignación de alias y raíz de contexto web Formato general de URI Nombre del fichero o alias de servlet que forma parte de la aplicación Nombre de la aplicación (el del paquete WAR o EAR) bank.war ene-09 alb@uniovi.es 75
  • 76. 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 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 ene-09 alb@uniovi.es 76
  • 77. Complejidad de la capa Web Problemas de desarrollo de capas web HTTP es petición-respuesta El servidor no se puede comunicar con el cliente La respuesta debe incluir una actualización de la vista Aplicaciones con muchas “pantallas” tendrán muchos servlets y muchas URLs difícil de gestionar JSP útil para presentar pero incómodo para lógica, servlets lo contrario ene-09 alb@uniovi.es 77
  • 78. Complejidad de la capa Web Arquitectura Model 1 ene-09 Secundino González Pérez alb@uniovi.es 78
  • 79. Complejidad de la capa Web Arquitectura Model 2 ene-09 Secundino González Pérez alb@uniovi.es 79
  • 80. Patrones de diseño en la capa Web Paradigma modelo-vista-controlador ene-09 alb@uniovi.es 80
  • 81. Patrones de diseño en la capa Web Arquitectura 2 y MVC ene-09 alb@uniovi.es 81
  • 82. Patrones de diseño en la capa Web Patrón Business-Delegate ene-09 alb@uniovi.es 82
  • 83. Patrones de diseño en la capa Web Frameworks disponibles Generalizaciones del patrón MVC Configuración XML del mapa de pantallas Acciones, Vistas, etc Struts (1 y 2) Tapestry Spring MVC WebWork Java Server faces ene-09 alb@uniovi.es 83
  • 85. Conceptos básicos sobre el API de los servlets API genéricas y específicas de los protocolos ene-09 alb@uniovi.es 85
  • 86. Conceptos básicos sobre el API de los servlets Método service() ene-09 alb@uniovi.es 86
  • 87. Conceptos básicos sobre el API de los servlets Método service() en HTTPServlet Separa la petición en función del método HTTP ene-09 alb@uniovi.es 87
  • 88. Conceptos básicos sobre el API de los servlets Métodos de manejo de peticiones ene-09 alb@uniovi.es 88
  • 89. Conceptos básicos sobre el API de los servlets Métodos de manejo de peticiones, código ene-09 alb@uniovi.es 89
  • 90. Conceptos básicos sobre el API de los servlets HolaMundo Servlet ene-09 alb@uniovi.es 90
  • 91. 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 Página de inicio, mapes de Servlets y URLs, parámetros de configuración para servlets, recursos referenciados, etc ene-09 alb@uniovi.es 91
  • 92. Conceptos básicos sobre el API de los servlets Ejemplo fichero web.xml ene-09 alb@uniovi.es 92
  • 93. Utilización de las API de petición y respuesta Utilización de las API de petición y respuesta Service (doGet y doPost) reciben interfaces instanciadas: “HttpServletRequest” canal de entrada con información enviada por el usuario “HttpServletResponse” canal de salida (página web) protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException { . . . } protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException { . . . ene-09 alb@uniovi.es 93 }
  • 94. Utilización de las API de petición y respuesta Utilización de las API de petición y respuesta WebContainer ContentType[W] Attributes[R/W/D] Writer[W] Parameters[R] OutputStream[W] Session[R/W/D] Cookies[W] Cookies [R] Redirect[W] HttpServeltRequest ene-09 HttpServletResponse service() alb@uniovi.es 94
  • 95. Utilización de las API de petición y respuesta <form> y request.getParameter() ene-09 alb@uniovi.es 95
  • 96. Reenvío de control y transferencia de datos 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 ene-09 alb@uniovi.es 96
  • 97. 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(): 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) ene-09 alb@uniovi.es 97
  • 98. Reenvío de control y transferencia de datos Transferencia de datos en la request Permite pasar datos desde un componente a otro de la cadena de procesamiento usando la request como almacén En el JSP ene-09 alb@uniovi.es 98
  • 99. Administración de sesiones Gestión de la sesión por el contenedor ene-09 alb@uniovi.es 99
  • 100. Administración de sesiones Interfaz HttpSession Deprecated methods ene-09 alb@uniovi.es 100
  • 101. Administración de sesiones Enlace de sesion y navegador Cookies En servidor las inserta en cada respuesta al navegador Reescribiendo todas las URL generadas por el contenedor Rewrited as ene-09 alb@uniovi.es 101
  • 102. Administración de sesiones Cierre de sesión, timeout, nueva ene-09 alb@uniovi.es 102
  • 104. Tecnología JSP como mecanismo de presentación 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) ene-09 alb@uniovi.es 104
  • 105. Tecnología JSP como mecanismo de presentación Proceso de compilación ene-09 alb@uniovi.es 105
  • 106. 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 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 ene-09 alb@uniovi.es 106
  • 107. Creación de páginas JSP Elementos en las páginas JSP ene-09 alb@uniovi.es 107
  • 108. Creación de páginas JSP Formas sintácticas de las etiquetas JSP ene-09 alb@uniovi.es 108
  • 109. Creación de páginas JSP Directivas JSP Las directivas son mensajes al contenedor de JSP Ejemplos: Elemento <%@ page ... %> <%@ include ... %> <%@ taglib ... %> Descripción Permite importar clases Java, especificar el tipo de la respuesta (“text/html” por omisión), etcétera Permite incluir otros ficheros antes de que la página sea traducida a un servlet Declara una biblioteca de etiquetas con acciones personalizadas para ser utilizadas en la página Forma general: <%@ directive { attr=”value” }* %> ene-09 alb@uniovi.es 109
  • 110. Creación de páginas JSP Directiva page ene-09 alb@uniovi.es 110
  • 111. Creación de páginas JSP Directiva import Inserta el texto de otro recurso en tiempo de compilación ene-09 alb@uniovi.es 111
  • 112. Creación de páginas JSP Ejemplo: directiva include ene-09 alb@uniovi.es 112
  • 113. Creación de páginas JSP Elementos de “scripting” Elemento Descripción <% ... %> Scriptlet. se usa para meter código Java dentro <%= ... %> Expresión. Permite acceder al valor devuelto por una expresión en Java e imprimirlo en OUT <%! ... %> Declaración. Usada para declarar variables y métodos en la clase correspondiente a la página Comentario. Comentario ignorado cuando se <%-- … --%> traduce la página JSP en un servlet. (comentario en el HTML <!-- comment ) ene-09 alb@uniovi.es 113
  • 114. Creación de páginas JSP Ejemplo: expresión, saludo.jsp <%= expresión ene-09 Nota: Si se necesita usar los caracteres "%>" dentro de un scriptlet, hay que usar "%>" y “<%” alb@uniovi.es 114
  • 115. Creación de páginas JSP Ejemplo: scriptlet, saludo.jsp <% ene-09 alb@uniovi.es 115
  • 116. Creación de páginas JSP Ejemplo: declaración, saludo.jsp <%! ene-09 alb@uniovi.es 116
  • 117. Creación de páginas JSP JSP: Objetos predefinidos El código java incrustado en JSP tiene acceso a los mismos objetos predefinidos que tenían los servlets Aquí se llaman como sigue: ene-09 request response pageContext session application out config Se puede acceder a ellos directamente desde los “scriptlets” alb@uniovi.es 117
  • 118. Procesamiento de datos de servlets Acciones JSP Etiquetas XML que tienen procesamiento asociado ene-09 alb@uniovi.es 118
  • 119. Procesamiento de datos de servlets <jsp:useBean ene-09 alb@uniovi.es 119
  • 120. Procesamiento de datos de servlets <jsp:useBean id=“” ene-09 alb@uniovi.es 120
  • 121. Procesamiento de datos de servlets Ambitos JSP ene-09 alb@uniovi.es 121
  • 122. Procesamiento de datos de servlets Recuperando beans de la request ene-09 alb@uniovi.es 122
  • 123. 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 Le asocia un prefijo para usar en el código de la JSP Syntax ene-09 alb@uniovi.es 123 <%@ taglib ( uri=”tagLibraryURI” | tagdir=”tagDir” ) prefix=”tagPrefix” %>
  • 124. Bibliotecas de etiquetas personalizadas Ejemplo de uso de JSTL y EL ene-09 alb@uniovi.es 124
  • 126. Función de los componentes EJB Tipos de EJB Además de los componentes EJB, el contenedor EJB también pueden contener clases entidad JPA y otras clases auxiliares y de utilidad general. ene-09 alb@uniovi.es 126
  • 127. Función de los componentes EJB Solución en capas Service Interface Control Action Action Action Action Session Beans implementan el patrón Fachada Clases Java implementan el modelo del dominio Persistence Interface Fa ca de Fa ca de Hibernate DAO Procs Procs Procs Model Model Model JDBC JDBC DAO JPA DAO Spring DAO Procs DAO Factory Presentac. ene-09 ene-09 Lógica alb@uniovi.es Persistencia 127 127
  • 128. Función de los componentes EJB Capas de EJBs ene-09 alb@uniovi.es 128
  • 129. Función de los componentes EJB Interfaces Context EJBContext SessionContext MessageContext Permiten al componente EJB interaccionar con el contenedor Seguridad Transacciones Búsquedas JNDI ene-09 alb@uniovi.es 129
  • 130. Análisis del modelo de componentes EJB Función del contenedor EJB ene-09 alb@uniovi.es 130
  • 131. Objetos EJB y proxies Intercepta las llamadas y toma el control ene-09 ene-09 Clase que se programa EJBObject alb@uniovi.es 131 131
  • 132. Conexión local Interfaz local EJB Container Vistas de cliente locales y distribuidas ene-09 ene-09 alb@uniovi.es alb@uniovi.es 132132
  • 133. Conexión remota Interfaz remota EJB Container Vistas de cliente locales y distribuidas ene-09 ene-09 alb@uniovi.es alb@uniovi.es 133133
  • 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 ene-09 alb@uniovi.es 134 134
  • 135. Llamada a EJB desde servlets Servlet con referencia un bean de sesión remoto sin estado La referencia se guarda en atributo de instancia El bean staless es concurrente (thread safe) Se inicializa en el init() ene-09 alb@uniovi.es 135
  • 136. Llamada a EJB desde servlets Servlet con referencia a través de anotaciones Inyección de referencias Solo es posible en componentes gestionados por el contenedor No hace falta contexto ni búsqueda JNDI. El contenedor asigna un valor a la variable de la referencia bankMgr cuando se instancia el servlet. La inicialización no genera excepciones. ene-09 alb@uniovi.es 136
  • 138. Comparación de comportamientos con y sin estado Mantenimiento del estado Capa de usuario (programa cliente) Trasiego de datos Capa Web Carrito de la compra Datos en varias páginas En HttpSession Capa de negocio (EJB) En EJBs con estado Capa de base de datos ene-09 alb@uniovi.es 138
  • 139. 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. Mejora de rendimiento. ene-09 alb@uniovi.es 139
  • 140. Características de los beans sin estado Beans sin estado Cuidado con los atributos de instancia ene-09 alb@uniovi.es 140
  • 141. Características de los beans con estado Beans con estado ene-09 alb@uniovi.es 141
  • 142. Creación de beans de sesión Adaptación de una clase Java a EJB sin sesión Declarar interfaz de negocio anotaciones Definir clase de implementación ene-09 alb@uniovi.es 142
  • 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 ene-09 Un implementación puede ser remota y local pero las anotaciones van en cada interfaz alb@uniovi.es 143
  • 144. Creación de beans de sesión Interfaces locales y remotas La implementación se puede anotar con @Remote pero no con @Local y @Remote a la vez Un implementación puede ser remota y local pero las anotaciones van en cada interfaz ene-09 alb@uniovi.es 144
  • 145. Creación de beans de sesión Requisitos de la clase de implementación pública, no debe ser final ni abstracta Constructor público que no acepte parámetros. El contenedor utiliza este constructor para crear instancias de la clase de bean de sesión. No debe definir el método finalize. ene-09 alb@uniovi.es 145
  • 146. Creación de beans de sesión 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 ene-09 @PostConstruct, @PreDestroy, alb@uniovi.es (Sólo statefull) @PostActivate, @PrePassivate 146
  • 147. Creación de beans de sesión Ciclo de vida de session beans sin estado ene-09 alb@uniovi.es 147
  • 148. Creación de beans de sesión Ciclo de vida de session beans con estado ene-09 alb@uniovi.es 148
  • 149. Creación de beans de sesión Objeto SessionContext Proporciona acceso al EJBObject (al contenedor) Entorno de seguridad Información sobre el control de la transacción Acceso a JNDI ene-09 alb@uniovi.es 149
  • 150. 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: Web: web.xml EJB: ejb-jar.xml Aplicaciones completas: application.xml ene-09 alb@uniovi.es 150
  • 151. Empaquetado y despliegue de beans de sesión Ejemplo de ejb-jar.xml ene-09 alb@uniovi.es 151
  • 152. Empaquetado y despliegue de beans de sesión 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.xml en /META-INF ene-09 alb@uniovi.es 152
  • 153. 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? Depende de si el cliente se ejecuta en un contenedor o no (si es EJB/servlet o clase normal) ene-09 alb@uniovi.es 153
  • 154. Creación de un cliente bean de sesión Con servicios de contenedor Servlet o EJB local El contenedor inyecta la referencia ene-09 alb@uniovi.es 154
  • 155. Creación de un cliente bean de sesión Con servicios de contenedor Servlet o EJB remoto (en otro contenedor) Búsqueda JNDI En ejb-jar.xml o web.xml ene-09 alb@uniovi.es 155
  • 156. Creación de un cliente bean de sesión Sin servicios de contenedor Clase Java (local o remota) Se deben usar los servicios JNDI ene-09 alb@uniovi.es 156
  • 158. API de persistencia de Java Persistencia Necesidad de que los datos manejados sobrevivan tras la ejecución a del programa Muchas técnicas y tecnologías (ficheros, serialización, bases de datos, etc) JPA: especificación de un mapeador objeto/relacional ene-09 alb@uniovi.es 158
  • 159. 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 Los objetos son persistentes (en BDDR) sin apenas programación (mucho ahorro de código tedioso) ene-09 alb@uniovi.es 159
  • 160. Requisitos de una clase Entidad Clases Entidad Representan conceptos del modelo de dominio Relacionadas con otros son el modelo del dominio Conjunto de clases que representan los conceptos principales del problema (núcleo de la funcionalidad del programa) Otras clases de proceso (p.e: EJBs de sesión) las manipulan ene-09 alb@uniovi.es 160
  • 161. 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 Puede ser Set<T>, List<T>, Map<T> o Collection<T> (interfaces) ene-09 alb@uniovi.es 161
  • 163. Requisitos de una clase Entidad Modelo de dominio en código ene-09 alb@uniovi.es 163
  • 164. Requisitos de una clase Entidad De clase a tabla ene-09 alb@uniovi.es 164
  • 165. Requisitos de una clase Entidad Campos persistentes o propiedades Acceso field: se anotan los atributos Acceso properties: se anotan los getters ene-09 alb@uniovi.es 165
  • 166. 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: java.util.Date, java.sql.TimeStamp Cualquier otra clase del programa ene-09 alb@uniovi.es 166
  • 167. Ciclo de vida de las entidades 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 ene-09 alb@uniovi.es 167
  • 168. Ciclo de vida de las entidades Archivo persistence.xml Define las clases que forman parte de la persistence-unit (por su presencia) Especifica el DataSource ene-09 alb@uniovi.es 168
  • 169. Ciclo de vida de las entidades Ejemplo de uso de EntityManager ene-09 alb@uniovi.es 169
  • 170. Ciclo de vida de las entidades Estados de un objeto persistente ene-09 alb@uniovi.es JVM 170
  • 171. Ciclo de vida de las entidades Notificación de cambios de estado Especificación de métodos callback con anotaciones @PrePersist @PostPersist @PreRemove @PostRemove @PreUpdate @PostUpdate @PostLoad ene-09 alb@uniovi.es 171
  • 172. Ciclo de vida de las entidades Estructura típica de archivo ejb-jar ene-09 alb@uniovi.es 172
  • 173. Ciclo de vida de las entidades API JPA ene-09 alb@uniovi.es 173
  • 174. Ciclo de vida de las entidades 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 ene-09 alb@uniovi.es 174
  • 175. Ciclo de vida de las entidades Ejemplo de Queries ene-09 alb@uniovi.es 175
  • 177. Semántica transaccional Transacciones ACID Es la demarcación de una unidad de trabajo JPA permite trabajar con varios API de transacciones JSE JDBC JTA Declarativas (EJB) ene-09 alb@uniovi.es 177
  • 178. Semántica transaccional Control de concurrencia Las trx ACID crean la ilusión de que cada usuario es único en la base de datos aíslan a unos de otros El aislamiento tradicionalmente se consigue con bloqueos a nivel de fila, de rangos o de tabla: De lectura (compartido) todos podemos leer pero nadie escribir De escritura (exclusivo) nadie puede leer porque voy a escribir y nadie más puede escribir Las transacciones JEE en contendor pueden ser distribuidas ene-09 alb@uniovi.es 178
  • 179. 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 El contendor se encarga de la gestión Anotaciones o xml ene-09 alb@uniovi.es 179
  • 180. Controlar transacciones programáticas JTA Control usando JTA Acceso JNDI o anotacion ene-09 alb@uniovi.es 180
  • 181. Controlar transacciones programáticas JTA Ejemplo de control de transacción ene-09 alb@uniovi.es 181
  • 182. Transacciones administradas por el contenedor Control por el contenedor El atributo de la trx controla el ciclo de vida de la transacción en curso ene-09 Required RequiresNew NotSupported Supports Mandatory Never alb@uniovi.es 182
  • 183. Transacciones administradas por el contenedor Coordinador de transacciones ene-09 alb@uniovi.es 183
  • 184. Bloqueo optimista y control de versiones Control pesimista y optimista ROLLBACK Lock Lock v1.0 Lock ROLLBACK PESIMISTA ene-09 v1.0 v2.0 En BDD ya no es v1.0 OPTIMISTA Alberto alb@uniovi.es M.F.A. alb@uniovi.es 184
  • 185. Bloqueo optimista y control de versiones Control optimista Diferencia entre trx de sistema y trx de aplicación El control optimista además permite detectar cambios en actualizaciones entre trx de sistema La solución optimista es añadir versión a los objetos ene-09 Alberto alb@uniovi.es M.F.A. alb@uniovi.es 185
  • 186. 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 Campo versión (un entero) Timestamp (de la última modificación) ene-09 Alberto alb@uniovi.es M.F.A. alb@uniovi.es 186
  • 187. Bloqueo optimista y control de versiones Tipos válidos para versionado Mapeado de campos ! Sin get/set JPA gestiona los campos versión de forma automática ene-09 Alberto alb@uniovi.es M.F.A. alb@uniovi.es 187
  • 188. Excepciones durante una transacción Excepciones JPA Todas las excepciones JPA son fatales y dejan el contexto de persistencia inutilizado Todas las excepciones lanzadas por EntityManager provocan rollback() Todas las de Query tb, excepto NoResultException y NonUniqueResultException. Todas NO chequeadas ene-09 Alberto alb@uniovi.es M.F.A. alb@uniovi.es 188
  • 189. 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 getRollbackOnly setRollbackOnly ene-09 alb@uniovi.es 189
  • 191. Tecnología del API JMS Middleware orientado a mensajes (MOM) Permite conexiones desacopladas entre sistemas Facilita la integración entre sistemas de tecnologías dispares Añaden una capa intermedia La interacción entre sistemas se basa en intercambio de mensajes (o eventos) ene-09 alb@uniovi.es 191
  • 192. Tecnología del API JMS MOM como integrador Distribución de mensajes Clientes de mensajería ene-09 alb@uniovi.es 192
  • 193. Tecnología del API JMS Tipos de clientes de mensajería Se bloquea esperando la llegada de un mensaje ene-09 alb@uniovi.es 193
  • 194. Tecnología del API JMS Arquitectura de mensajería punto a punto Cuando el consumidor recoge el mensaje se borra de la cola Puede haber múltiples consumidores, pero “el primero que llega se lo lleva” También pude haber múltiples productores enviando a la misma cola ene-09 alb@uniovi.es 194
  • 195. Tecnología del API JMS Arquitectura de mensajería de publicación/suscripción El tema es como una lista de distribución El mensaje se conserva hasta que todos los suscritos lo consumen ene-09 alb@uniovi.es 195
  • 196. Tecnología del API JMS Elementos del API JMS ene-09 alb@uniovi.es 196
  • 197. Tecnología del API JMS Estructura de los mensajes ene-09 alb@uniovi.es 197
  • 198. Creación de un productor de mensajes de cola Diagrama de colaboración ene-09 alb@uniovi.es 198
  • 199. Ejemplo Creación de un productor de mensajes de cola ene-09 alb@uniovi.es 199
  • 200. Creación de un consumidor de mensajes síncrono Diagrama de colaboración ene-09 alb@uniovi.es 200
  • 201. Ejemplo Creación de un consumidor de mensajes síncrono ene-09 alb@uniovi.es 201
  • 202. Creación de un consumidor de mensajes asíncrono Método gestor del evento ene-09 alb@uniovi.es 202
  • 203. Creación de un consumidor de mensajes asíncrono ene-09 alb@uniovi.es 203
  • 204. EJB como clientes de mensajería EJB como clientes de mensajería ene-09 alb@uniovi.es 204
  • 206. Introducción a los beans controlados por mensajes MessageDriven Beans Son clientes asíncronos de mensajes Implementan el interfaz MessageListener Desconectados de cliente ene-09 alb@uniovi.es 206
  • 207. Introducción a los beans controlados por mensajes Ciclo de vida Posible interceptar los cambios de estado @PostConstruct @PreDestroy ene-09 alb@uniovi.es 207
  • 208. Creación de un bean controlado por mensajes Código ejemplo ene-09 alb@uniovi.es 208
  • 209. Creación de un bean controlado por mensajes Filtra los mensajes que llegan ene-09 alb@uniovi.es 209
  • 211. Finalidad de los servicios web Servicios Web W3C: “sistema de software diseñado para permitir la interacción interoperable entre máquinas en una red” Características: Independencia de plataforma (Hw + SO) Uso de tecnologías Internet: XML, HTTP, etc Interoperabilidad de programas: clientes y servidores escritos en cualquier lenguaje Invocación a servicios ofrecidos como procedimientos ene-09 alb@uniovi.es 211
  • 212. 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 XML, SOAP HTTP, SMTP ene-09 alb@uniovi.es 212
  • 213. Finalidad de los servicios web Comparación entre servicios web y EJB remotos La implementación del servicio web similar a un EJB de sesión El registro JNDI podría ser el registro UDDI de los WS El protocolo de transporte HTTP en vez de RMI-IIOP Los datos se transfieren en XML (SOAP) en ves de serializados ene-09 alb@uniovi.es 213
  • 214. Especificaciones de los servicios web 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 ene-09 alb@uniovi.es 214
  • 215. Especificaciones de los servicios web Arquitectura de WS ene-09 alb@uniovi.es 215
  • 216. Especificaciones de los servicios web Ejemplo mensajes SOAP Petición Respuesta ene-09 alb@uniovi.es 216
  • 217. Especificaciones de los servicios web Ejemplo WSDL “hola mundo” Estructura general de documento WSDL ene-09 alb@uniovi.es 217
  • 218. APIs de Java relacionados con servicios web 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 - + Complejidad ene-09 API de más alto nivel Usa todas las demás por debajo Permite manejo de WS sin conocimientos de XML, SOAP, etc alb@uniovi.es 218
  • 220. Puntos finales servlet JAX-WS Punto final un Servlet web.xml ene-09 alb@uniovi.es 220
  • 221. Puntos finales EJB JAX-WS Punto final un EJB ene-09 alb@uniovi.es 221
  • 222. Puntos finales EJB JAX-WS Tipos de datos admitidos en JAX-WS Se pueden transferir tipos básicos a WS Tipos complejos deben marcados ene-09 alb@uniovi.es 222
  • 223. Clientes de servicios Web Desarrollo de clientes Es necesario disponer del WSDL A partir del archivo de especificación se pueden generar clases proxy Las usa el cliente Se encargan de localizar el servicio y realizar las conversiones Java SOAP También es posible generar el proxy dinámicamente ene-09 alb@uniovi.es 223
  • 224. Clientes de servicios Web Ejemplo Cliente con proxy dinámico Cliente con proxy estático ene-09 alb@uniovi.es 224
  • 226. Seguridad administrada por el contenedor 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 ene-09 alb@uniovi.es 226
  • 227. 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 SSL (TLS) ene-09 alb@uniovi.es 227
  • 228. Seguridad administrada por el contenedor Propagación del contexto de seguridad ene-09 alb@uniovi.es 228
  • 229. Seguridad administrada por el contenedor 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 ene-09 ene-09 Albertoalb@uniovi.es M.F.A. 229 229
  • 230. Seguridad administrada por el contenedor 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 Del servidor siempre, asimétrica del cliente si tiene certificado Ofrece: ene-09 Autentificación Confidencialidad Integridad alb@uniovi.es 230
  • 231. Seguridad administrada por el contenedor Autenticación administrada por contenedor web ene-09 alb@uniovi.es 231
  • 232. Seguridad administrada por el contenedor Especificación 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 ene-09 alb@uniovi.es 232
  • 233. Seguridad administrada por el contenedor web.xml Colección de recursos, roles y métodos Si no hay método todos están protegidos ene-09 alb@uniovi.es 233
  • 234. Seguridad administrada por el contenedor web.xml Roles Técnicas ene-09 alb@uniovi.es 234
  • 235. Seguridad administrada por el contenedor Tipos de autenticación soportados BASIC DIGEST FORM CLIENT-CERT ene-09 alb@uniovi.es 235
  • 236. 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 Action: j_security_check Login: j_username Pass: j_password ene-09 alb@uniovi.es 236
  • 237. 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 Base de datos (tablas: usuarios, roles) Ficheros XML Ficheros de propiedades ... ene-09 Consultar documentación del alb@uniovi.es contenedor 237
  • 238. Roles y responsabilidades del usuario Usuarios y roles ene-09 alb@uniovi.es 238
  • 239. Roles y responsabilidades del usuario Autorización basada en funciones en la capa EJB ene-09 alb@uniovi.es 239
  • 240. Utilización del API de seguridad Métodos de API Métodos en web: getUserPrincipal y isUserInRole Métodos en EJB: getCallerPrincipal y isCallerInRole ene-09 alb@uniovi.es 240
  • 241. Utilización del API de seguridad API de seguridad de la capa web ene-09 alb@uniovi.es 241
  • 242. Utilización del API de seguridad API de seguridad de la capa EJB ene-09 alb@uniovi.es 242
  • 243. Seguridad HTTP y clientes JAX-WS Autenticar clientes de WS Mismo caso que el del navegador web En el paquete HTTP debe ir la autenticación de usuario (sobre SSL) Si el WSDL está protegido el cliente debe tener una copia local ene-09 alb@uniovi.es 243