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
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
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
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
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
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
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
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
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
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
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
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
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
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
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” %>
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
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
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
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
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
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
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
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
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
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
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