Download Sesion 3. Desarrollo de aplicaciones JEE

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