Documentos de Académico
Documentos de Profesional
Documentos de Cultura
A Arquitectura JavaEE
A Arquitectura JavaEE
ConsueloFranky@gmail.com
Septiembre de 2008
1
Introducción
Arquitectura de una
aplicación Java EE 5
4
Conceptos básicos
sobre la tecnología Java EE
5
Niveles de una arquitectura multi-nivel
•Invoca •Realiza
servicios •Servicios
servicios sobre
•Maneja básicos de
interacción
objetos del •Modela persistencia
•Validación dominio entidades de objetos
con usuario
sintáctica •Implanta del negocio del dominio
reglas del y sus reglas
•Despliegue •Transforma-
HTML
•Adapta negocio básicas
respuestas ción Objeto-
a interfaz •Estado de •Validación Relacional
•Validación usuario sesión semántica
sintáctica -usuario •Soporte
transacción
•Maneja •Control
excepciones transacción
Cliente con Servidor Web
navegador Web Servidor de Componentes Servidor BD
6
Elementos J2EE
distribuidos en 5 niveles
Presentación y
Aplicación Aplicación Servicios Dominio Persistencia
application web RM
con interfaz RM service I-II compo- BD OO
I-IIO
IIOP
P O P
rica I- nente
RM
EJB de JDBC
compo- BD
applet entidad
RMI-IIOP nente C
con interfaz JDB relacional
rica EJB de
sesión
P
MI-IIO JNDI
PC local o remoto servlets R Servidor de
Presentación TTP directorios
H JMS •cola de mensajes
C
B
HTML JD
hojas activas
HTTP JSP EJB de
XML mensajes
Fuentes
Navegador
de Datos.
Web
HTTP
Contenedor Web Contenedor EJB
HTML SSL RMI-IIOP
Servlet JSP
HTTP componente
XML SSL
RMI-IIOP
HTTP J J J J
J J J J
applet SSL N Java RMI- D
M D T Mail
N Java RMI- D
M D T Mail
IIOP B IIOP B
S I A C S I A C
RMI-IIOP
PC J2SE J2SE
application
8
✹ Descripción de las principales librerías de J2EE
◆ JTA: manejo de transacciones
9
Elementos del estándar Java EE 5
Múltiples frameworks
Framework:
• librería
• reglas de uso
• soporta 1 aspecto
del desarrollo
10
Servidor de Aplicaciones: reúne
el contenedor Web y el contenedor EJB
HTML servlet
componente 2
BD
Servidor de Aplicaciones
11
Fases de una aplicación multi-nivel Java EE
Aplicación Java EE
•Descriptor aplicación
•archivos .jar
•archivos .war
archivo .ear
12
Ultima sintonización y Despliegue de la aplicación en el
Servidor de Aplicaciones donde va a operar
Aplicación Java EE
archivo .ear
servlet
HTML
componente 2
BD
Servidor de Aplicaciones 13
Concepto de
componente de negocio (EJB)
14
✹ Facilidades ofrecidas por los servidores EJB:
◆ manejo de nombres y localización de componentes
◆ generación de las clases “proxy” (i.e. stubs, skeletons)
◆ creación, interrupción y destrucción de componentes
◆ ejecución de componentes en threads
◆ persistencia
◆ soporte de transacciones distribuidas
◆ manejo eficiente de conexiones a BD (“pooling”)
◆ manejo de seguridad por roles y autenticación de usuarios
◆ manejo de tareas asincrónicas
◆ clusters
15
Arquitectura básica de los
componentes EJB
EJB
Home
Cliente componente
B.D.
EJB
Object
Contenedor
Servidor EJB
16
✹ Un contenedor por clase EJB
EJB
Home
componente
Cliente 1 componente
EJB
EJB
Object
Object Contenedor
B.D.
EJB
Home
componente
Cliente 2 componente
EJB
EJB
Object
Object Contenedor
Servidor EJB 17
✹ Elementos de la arquitectura
◆ Componente EJB
• Lógica del negocio implementada por el desarrollador
◆ Contenedor EJB
• Aloja pool de componentes EJB de una clase determinada
• Mantiene objetos intermediarios (EJB Home y EJB Object) que
interceptan los pedidos de los clientes a los componentes EJB
• Maneja servicios de: transacciones, threads, persistencia,
seguridad.
◆ Servidor EJB
• Aloja los contenedores EJB
• Maneja los servicios de conectividad, de nombres y de
autenticación
18
Tipos de componentes EJB
✹ Session Bean (de sesión)
◆ define los servicios ofrecidos por la aplicación
◆ Cada instancia está asociada a la sesión de un cliente ==>
instancia NO COMPARTIDA
◆ Estado no persistente (Transient)
sin estado
componente sincroniza
de Sesión su estado
con estado no sincroniza
EJB su estado
CMP
persistencia manejada
componente por el Contenedor
de Entidad
persistencia manejada
componente por el componente
de Mensajes BMP
20
Interfaces, Clases y Descriptores
asociados a un componente EJB (J2EE)
✹ Ejemplo: componente Broker (intermediario financiero)
Home
interface
Cliente componente 1
remoto
Remote
interface
Contenedor
B.D.
Local Home
interface
Cliente componente 2
local
Local
interface
Contenedor
Servidor EJB
22
Tareas asincrónicas
en una aplicación Java EE
contenedor EJB
componente
de sesión
servidor Web
servidor JMS
HTML servlet
depo
sitar •cola de mensajes
JSP
contenedor EJB
BD
componente
de mensajes
Servidor de Aplicaciones
23
Facilidades ofrecidas por los
Contenedores de componentes EJB
24
Persistencia automática del estado de los
componentes EJB de entidad
25
Manejo de transacciones (ACID)
26
✹ Alternativas en el manejo de transacciones
BMT
transacciones mediante JDBC
manejadas
por el componente
componente mediante JTA
de Sesión
EJB transacciones
manejadas
por el Contenedor
componente
de Entidad CMT
27
✹ Valores de la propiedad transaccional de un
método (transacciones manejadas por el Contenedor)
cliente del componente transacción para
Valor del atributo
está en transacción? ejecutar el método
NO error
MANDATORY
SÍ la del cliente
NO nueva
REQUIRED
SÍ la del cliente
NO nueva
REQUIRES_NEW
SÍ nueva
NO ninguna
SUPPORTS
SÍ la del cliente
NO ninguna
NOT_SUPPORTED
SÍ ninguna
NO ninguna
NEVER
SÍ error
28
✹ Transacciones distribuidas coordinadas por el
Servidor Java EE
En 1 sitio, sobre múltiples BD Sobre BD’s de varios sitios
29
Manejo de seguridad
30
✹ Autenticación y Autorización por roles de usuarios
◆ Definición de roles de usuarios para cada aplicación,
asociados a grupos de usuarios
◆ Autorización
• de utilizar un componente Web: si el usuario pertenece a un rol
autorizado
• de invocar un método de un componente EJB: si el rol del usuario
tiene permiso de invocar ese método
31
✹ Asignar permisos sobre métodos del componente
por roles
32
Interoperabilidad con aplicaciones
ERP y de legado
33
Otras ventajas ofrecidas por los
contenedores de componentes EJB
✹ Manejo de estado
34
Frameworks y elementos de la arquitectura
Java EE 5
35
El metapatrón MVC
EJB
Backing entidad
BD
Bean 1 C rela-
Backing EJB cional
Bean 2 sesión
A
HTML JSP
1 pantallazo1
HTML JSP
2 pantallazo2
VISTAS
Navegador Servidor Web Servidor de Servidor BD
38
Cliente componentes
✹ Ejemplo de pantalla JSF:
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<html>
<head>
<title>Add 2 numbers</title>
</head>
<body>
<f:view>
<h:form id="addForm">
First Number:
<h:inputText id="firstNumber"
value="#{BackCalc.firstNumber}" required="true" />
<h:message for="firstNumber" /> <br>
Second Number:
<h:inputText id="secondNumber"
value="#{BackCalc.secondNumber}" required="true" />
<h:message for="secondNumber" /> <br>
Result:
<h:outputText id="output" value="#{BackCalc.result}" /> <br>
<h:commandButton id="submitAdd"
action="#{BackCalc.add}" value="Add" />
</h:form>
</f:view>
</body>
</html> 39
✹ backing bean para el pantallazo:
40
✹ Validación automática:
41
Nivel de Dominio basado en
pojos EJB 3 de entidad
✹ Simplificación respecto a J2EE
◆ Interfaces de creación y de negocio: NO
◆ Clase implementadora:
• NO extiende clase base de componente
• NO métodos de intercepción: ejbCreate(), ejbFindByPrimaryKey(),
ejbLoad(), ejbStore(), …
• se regresa a un javaBean sencillo con atributos, get() y set()
(POJO: Plain Old Java Objects)
◆ @anotaciones (J2SE 5.0) dan indicaciones al servidor pero NO son
obligatorias: más trabajo para el Contenedor, menos para el
desarrollador
◆ Descriptor: NO es obligatorio, pero disponible si se quiere
sobreponer a las anotaciones
◆ Gracias a la persistencia automática desaparece código JDBC(SQL)
(patrón DAO obsoleto) => gran reducción de código y una mayor
robustez
✹ Framework EJB 3 recoge experiencias de JDO,
HIBERNATE, TOPLINK, SPRING 42
ORDER_ITEM
✹ Ej. EJB 3 de entidad: ORDER order_item_id
◆ observar ausencia de JDBC ! order_id order_id
◆ Hay valor por omisión para casi order_date quantity
toda anotación
@Entity @Table(name="ORDER")
@NamedQuery(name="findOrdersByDate", query=
"select o from Order o where o.orderDate = :date")
public class Order implements java.io.Serializable {
private long orderId;
private Date orderDate;
private List<OrderItem> orderItems = new ArrayList();
@Id(generate=AUTO) @Column(name="ORDER_ID")
public long getOrderId() { return orderId;}
public void setOrderId(long orderId) {
this.orderId = orderId;
}
@Column(name="ORDER_DATE")
public Date getOrderDate() { return orderDate;}
public void setOrderDate(Date orderDate) {
this.orderDate= orderDate;
}
@OneToMany(mappedBy="order", CascadeType.ALL)
public List<OrderItem> getOrderItems(){return orderItems;}
public void setOrderItems (List<OrderItem> orderItems) {
this.orderItems = orderItems;
}
}
43
Nivel de servicios basado en
pojos EJB 3 de sesión
✹ Simplificación respecto a J2EE
◆ Requiere interfaz de negocio pero NO de creación
◆ Clase implementadora:
• NO extiende clase base de componente
❽ ❷ ❸ ❹
❼
ScreenFlow- ❻ WebProxy StateMachine
Manager
❺ MODELO
JSP EJB entidad
template C
Navegador
Cliente Servidor Web Servidor de componentes Servidor BD48
✹ Problemas en la implantación de patrones
◆ Larga curva de aprendizaje
◆ Se requiere personal muy capacitado
◆ Elevados costos y tiempos de desarrollo de proyectos
49
Java EE 5:
Arquitectura MVC de una aplicación
utilizando JSF, EJB 3 y Seam
N. Presentación N. Aplicación (Web) N. Servicios N. Persistencia
Navegador Cliente Servidor Web Servidor de componentes Servidor de BD
frameworks
servlet servlet ejb entity BD
HTML
JSF Seam Seam manager
relacional
ard
forw
JSP ejb
ejb
aplicación
JSP aplicación
entidades
52
✹ Seam fue aprobado por unanimidad en Junio 2006 como
parte de la próxima versión del estándar Java EE:
http://jcp.org/en/jsr/detail?id=299
53
✹ Alternativas de implementación
Request JSF
Controller
Context Seam
Management
54
demo super-booking para Java EE 5
✹ This sample application has been built on top of the following
frameworks:
• JSF: (Sun implementation) with facelets-RichFaces
• EJB 3: implemented by JBoss
• JBoss Seam: to glue JSF and EJB 3
• JBoss jBPM: workflow