Sie sind auf Seite 1von 55

Curso: Desarrollo de aplicaciones en Java EE 5 (antes J2EE)

Mara Consuelo Franky


Mayo de 2007

CincoSOFT Ltda.
ConsueloFranky@cincosoft.com http://www.cincosoft.com

Introduccin

Java EE 5 reemplaz a J2EE hace menos de 1 ao: cambio profundo de modelo conceptual, arquitectura y estrategia de desarrollo Aplicaciones Java EE 5 son mucho ms concisas y eficientes: reducen el cdigo a la tercera parte El reto es volver a aprender a hacer aplicaciones de una manera completamente distinta Objetivo del curso: visin del desarrollo de aplicaciones Java EE 5, estrategias y guas, frameworks y herramientas
2

Contenido del curso

A: Arquitectura de una aplicacin Java EE 5 B: Organizacin y configuracin de una aplicacin Java EE 5 C: Programacin de una aplicacin Java EE 5 D: Elementos JSF para pantallas E: Aspectos avanzados en las aplicaciones Java EE 5 F: Meta-framework para acelerar el desarrollo en Java EE 5 (experiencia CincoSOFT)
3

parte A: Arquitectura de una aplicacin Java EE 5

Conceptos bsicos sobre la tecnologa Java EE

Niveles de una arquitectura multi-nivel


Presentacin Aplicacin Servicios Dominio Persistencia

Invoca Maneja
interaccin con usuario servicios

Realiza
servicios sobre objetos del dominio

Servicios Modela
entidades del negocio y sus reglas bsicas bsicos de persistencia de objetos del dominio

Validacin
sintctica

Implanta
reglas del negocio

Despliegue
HTML

Adapta
respuestas a interfaz usuario

Transformacin ObjetoRelacional

Validacin
sintctica

Estado de
sesin -usuario

Validacin
semntica

Soporte
transaccin

Maneja
excepciones

Control
transaccin

Cliente con navegador Web

Servidor Web Servidor de Componentes Servidor BD

Elementos J2EE distribuidos en 5 niveles


Presentacin y Aplicacin
application con interfaz rica applet con interfaz rica PC local o remoto
RM I-I IOP

Aplicacin
web service
RM I

Servicios
-IIO

Dominio
P I-IIO

Persistencia
BD OO
JDBC
C JDB

RM

RMI-IIOP
IIOP I RM

componente EJB de sesin

componente EJB de entidad

BD relacional

servlets
TP T H

JNDI

Presentacin
HTML

JMS cola de mensajes

Servidor de directorios
BC JD

hojas activas HTTP JSP XML Servidor Web

EJB de mensajes Servidor de BD


7

Navegador Cliente - local o remoto

Servidor de componentes

Contenedores, componentes y APIs que intervienen en la plataforma J2EE

Navegador Web

Fuentes de Datos. Datos. HTTP SSL

Contenedor Web Servlet JSP


RMI-IIOP

Contenedor EJB componente


RMI-IIOP J J J J N Java RMI- D M D T Mail IIOP B S I A C

HTML XML applet

HTTP SSL HTTP SSL J J J J N Java RMI- D M D T Mail IIOP B S I A C

RMI-IIOP

PC
application

J2SE

J2SE

Descripcin de las principales libreras de J2EE


N JTA: manejo de transacciones N JNDI: manejo de nombres y localizacin de recursos N JDBC: acceso a BD relacionales N RMI-IIOP: acceso a objetos remotos N JavaMail: correo electrnico N JMS: manejo de mensajes asincrnicos

Elementos del estndar Java EE 5


Mltiples frameworks Framework: librera reglas de uso soporta 1 aspecto del desarrollo

10

Servidor de Aplicaciones: rene el contenedor Web y el contenedor EJB

servidor Web

servidor EJB
componente 1

HTML

servlet

componente 2 BD

Servidor de Aplicaciones
11

Fases de una aplicacin multi-nivel Java EE


Desarrollo de componentes de diferentes niveles
Cliente Java EE Componente Web Componente EJB

Descriptor Cliente clase Cliente


archivo .jar

Descriptor Web clase Servlet archivo JSP archivo HTML archivo GIF
archivo .war ensamblaje del

Descriptor EJB interfaz creacin interfaz servicios clase EJB


archivo .jar aplicacin

Sintonizacin y

Aplicacin Java EE

Descriptor aplicacin archivos .jar archivos .war


archivo .ear
12

Ultima sintonizacin y Despliegue de la aplicacin en el Servidor de Aplicaciones donde va a operar


Aplicacin Java EE

archivo .ear

cliente

servidor Web

servidor EJB
componente 1

servlet HTML
componente 2 BD

Servidor de Aplicaciones

13

Concepto de componente de negocio (EJB)


4

Pieza independiente de software que encapsula cierta funcionalidad Se ejecuta del lado servidor Reutilizable: no se disea para solo una aplicacin Sigue un modelo estndar de componente, ==> puede ejecutarse en cualquier plataforma que soporte el modelo Se desarrolla como un conjunto de interfaces y clases que conforman paquetes

4 4

14

Facilidades ofrecidas por los servidores EJB:


N manejo de nombres y localizacin de componentes N generacin de las clases proxy (i.e. stubs, skeletons) N creacin, interrupcin y destruccin de componentes N ejecucin de componentes en threads N persistencia N soporte de transacciones distribuidas N manejo eficiente de conexiones a BD (pooling) N manejo de seguridad por roles y autenticacin de usuarios N manejo de tareas asincrnicas N clusters

15

Arquitectura bsica de los componentes EJB

EJB Home Cliente EJB Object Contenedor Servidor EJB componente B.D.

16

Un contenedor por clase EJB


EJB Home

Cliente 1 Cliente 1

componente componente A EJB EJB Object Object

Contenedor B.D.

EJB Home Cliente 2 Cliente 2 EJB EJB Object Object componente componente B

Contenedor Servidor EJB


17

Elementos de la arquitectura
N Componente EJB
Lgica del negocio implementada por el desarrollador

N 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.

N Servidor EJB
Aloja los contenedores EJB Maneja los servicios de conectividad, de nombres y de autenticacin

18

Tipos de componentes EJB


4

Session Bean (de sesin)


N define los servicios ofrecidos por la aplicacin N Cada instancia est asociada a la sesin de un cliente ==> instancia NO COMPARTIDA N Estado no persistente (Transient)

Entity Bean (de entidad)


N Cada instancia modela una entidad de negocio N Estado persistente (reflejado en una BD) N Mltiples sesiones-clientes utilizan una instancia COMPARTIDA (identificada por llave primaria) N Sus mtodos se realizan bajo transacciones controladas por el Contenedor

Message Driven Bean (de mensajera)


N Procesa mensajes asincrnicos (JMS)
19

Alternativas de componentes EJB

sin estado componente de Sesin EJB componente de Entidad componente de Mensajes sincroniza su estado con estado
CMP

no sincroniza su estado

persistencia manejada por el Contenedor persistencia manejada por el componente


BMP

20

Interfaces, Clases y Descriptores asociados a un componente EJB (J2EE)


4

Ejemplo: componente Broker (intermediario financiero)


Interfaz de servicios
extiende EJBObject
enumera mtodos de negocio, por ej: submitOrder()

Interfaz de creacin
extiende EJBHome
enumera mtodos create() y findByPrimaryKey()

BrokerHome .java

Broker.java Descriptor XML


Descripcin y valor de propiedades sintonizables del componente

Clase implementadora
implanta componente de sesin o de entidad
define mtodos ejbCreate() y findByPrimaryKey() define mtodos de negocio, por ej: submitOrder() define mtodos de sesin o de entidad

BrokerBean.java

broker.xml
21

Tareas asincrnicas en una aplicacin Java EE


contenedor EJB servidor Web HTML servlet
depo sitar

componente de sesin

servidor JMS
cola de mensajes

JSP contenedor EJB


BD

componente de componente mensajes componente de mensajes de mensajes

Servidor de Aplicaciones
22

Facilidades ofrecidas por los Contenedores de componentes EJB

23

Persistencia automtica del estado de los componentes EJB de entidad


4 4

Persistencia declarativa (sin escribir cdigo SQL) Independencia de las BD

24

Manejo de transacciones

25

Alternativas en el manejo de transacciones

BMT
transacciones manejadas por el componente mediante JDBC

componente de Sesin EJB componente de Entidad


transacciones manejadas por el Contenedor

mediante JTA

CMT

26

Valores de la propiedad transaccional de un mtodo (transacciones manejadas por el Contenedor)


Valor del atributo MANDATORY REQUIRED REQUIRES_NEW SUPPORTS NOT_SUPPORTED NEVER cliente del componente transaccin para est en transaccin? ejecutar el mtodo

NO S NO S NO S NO S NO S NO S

error la del cliente nueva la del cliente nueva nueva ninguna la del cliente ninguna ninguna ninguna error
27

Transacciones distribuidas coordinadas por el Servidor Java EE


Sobre BDs de varios sitios

En 1 sitio, sobre mltiples BD

28

Manejo de seguridad

29

Autenticacin y Autorizacin por roles de usuarios


N Definicin de roles de usuarios para cada aplicacin, asociados a grupos de usuarios N Autenticacin del usuario:
cuando invoca un programa cliente inscrita en la aplicacin cuando invoca un componente Web (servlet o JSP)

N Autorizacin
de utilizar un componente Web: si el usuario pertenece a un rol autorizado de invocar un mtodo de un componente EJB: si el rol del usuario tiene permiso de invocar ese mtodo

30

Asignar permisos sobre mtodos del componente por roles

31

Interoperabilidad con aplicaciones ERP y de legado

32

Otras ventajas ofrecidas por los contenedores de componentes EJB


4

Flexibilidad mediante diversidad de tipos de componentes para modelar servicios de sesin o entidades de negocio Manejo de estado Eficiencia mediante manejo de cach de bases de datos en componentes de entidad y pooling de conexiones Escalabilidad y tolerancia a fallas mediante clusters de servidores y balanceo de carga

4 4

33

Frameworks y elementos de la arquitectura Java EE 5

34

El metapatrn MVC

Model (Modelo): maneja reglas del negocio y estructura de los datos View (Vistas): maneja presentacin de los datos del sistema al usuario Controller (Controlador): transforma pedidos del usuario en operaciones sobre los objetos del modelo y selecciona vista para 35 mostrar resultados al usuario (comportamiento del sistema)

Nivel web basado en el framework JSF


4

Pantallas se contruyen con componentes grficos UIComponent que reaccionan a eventos:


N son componentes de alto nivel que encapsulan elementos HTML y tienen comportamiento asociado N muestran y actualizan valores del Modelo contenidos en javaBeans asociados ("backing beans") N como reaccin a eventos (por ej: oprimir un botn) invocan directamente mtodos de los backing beans

Aspectos de validacin de los datos del usuario:


N Validacin automtica asociada a cada componente grfico N Cuando la validacin falla se vuelve a mostrar la pantalla junto con los mensajes de error N Procesamiento de eventos solo cuando la validacin es exitosa

36

Framework JSF
Presentacin Aplicacin Servicios Dominio Persistencia

CONTROLADOR

servlet Faces

MODELO

Backing Bean 1 Backing Bean 2 HTML 1 HTML 2 JSP pantallazo1 JSP pantallazo2 EJB sesin A

EJB entidad C

BD relacional

VISTAS
Navegador Cliente Servidor Web Servidor de componentes Servidor BD
37

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> 38

backing bean para el pantallazo:

public class BackCalc { // atributos ligados a los UIComponents: private int firstNumber = 0; private int secondNumber = 0; private int result = 0; // model: podria ser la referencia a un EJB: private Calculator calculator = new Calculator(); //. . . metodos set y get de atributos . . . // reaccion a evento sobre el boton: public String add() { result = calculator.add(firstNumber, secondNumber); return "success"; } }
39

Validacin automtica:

abc

"firstNumber": Conversion error occured Validation Error: "secondNumber": Value is required

40

Nivel de Dominio basado en pojos EJB 3.0 de entidad


4

Simplificacin respecto a J2EE


N Interfaces de creacin y de negocio: NO N Clase implementadora:
NO extiende clase base de componente NO mtodos de intercepcin: ejbCreate(), ejbFindByPrimaryKey(), ejbLoad(), ejbStore(), se regresa a un javaBean sencillo con atributos, get() y set() (POJO: Plain Old Java Objects) Descriptor: NO es obligatorio N @anotaciones (J2SE 5.0) dan indicaciones al servidor pero NO son obligatorias (ms trabajo para el Contenedor, menos para el desarrollador) N Gracias a la persistencia automtica casi desaparece cdigo SQL (patrn DAO obsoleto) => gran reduccin de cdigo y una mayor robustez
41

Ej. EJB 3.0 de entidad:


N observar ausencia de JDBC !

ORDER order_id order_date

ORDER_ITEM order_item_id order_id quantity

@Entity @Table(name="ORDER") @NamedQuery(name="findOrdersByDate", queryString= "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(Cascade=All) @JoinColumn("ORDER_ID") public List<OrderItem> getOrderItems(){return orderItems;} public void setOrderItems (List<OrderItem> orderItems) { this.orderItems = orderItems; } }
42

Nivel de servicios basado en pojos EJB 3.0 de sesin


4

Simplificacin respecto a J2EE


N Requiere interfaz de negocio pero NO de creacin N Clase implementadora:
NO extiende clase base de componente NO mtodos de intercepcin: ejbCreate(), ... se regresa a un javaBean sencillo (POJO) con atributos y mtodos de negoco Descriptor: NO es obligatorio N @anotaciones (J2SE 5.0) dan indicaciones al servidor pero NO son obligatorias (ms trabajo para el Contenedor, menos para el desarrollador) N los servicios se programan en trminos de objetos (entidades) y no en trminos de tablas de la BD => gran reduccin de cdigo y una mayor robutez
43

Ej. EJB 3.0 de sesin que invoca al de entidad:


N ilustra EntityManager: maneja ciclo de vida de EJBs de entidad N observar ausencia de JDBC !

@Stateful public class ShoppingCartBean implements ShoppingCart { @Inject EntityManager em; private List itemsInCart; . . . public Order checkout() { Order order = new Order(); order.setOrderDate(new Date()); order.setOrderItems(this.itemsInCart); em.persist(order);// INSERTs en ORDER y ORDER_ITEM return order; } public List<Order> findOrdersByDate (Date date) { return em.createNamedQuery("findOrdersByDate") .setParameter("date", date).getResultList(); // SELECTs } public void updateOrder(Order order) { em.merge (order); // UPDATEs en ORDER y ORDER_ITEM } }
44

Comparacin con EJB 1.x y EJB 2.x


4

EJB de entidad: modelo de persistencia automtica no se poda usar !


N demasiado restringido en 1.x N demasiado complejo en 2.x

EJB de sesin 1.x, 2.x: JDBC demasiado dispendioso !

public Order loadOrder(Long orderId) throws DAOException { Order order = null; PreparedStatement ps = null; ResultSet rs = null; String queryOrder = " SELECT order_date FROM ORDER WHERE order_id = ? "; String queryOrderItems = " SELECT order_item_id, quantity " " FROM ORDER_ITEM WHERE order_id = ? "; try { dbConnection = datasource.getConnection(); // consulta a tabla ORDER: ps = dbConnection.prepareStatement(queryOrder); ps.setLong(1, orderId.longValue()); ps.executeQuery(); ORDER_ITEM ORDER rs = ps.getResultSet(); order_item_id order_id rs.next(); order_id order_date order = new Order(); quantity order.setOrderId(orderId); order.setOrderDate(rs.getDate(1)); rs.close(); ps.close(); 45

N continuacin del ejemplo:


// consulta a tabla ORDER_ITEM: ps = dbConnection.prepareStatement(queryOrderItems); ps.setLong(1, orderId.longValue()); ps.executeQuery(); rs = ps.getResultSet(); List theItems = new ArrayList(); while (rs.next()) { OrderItem orderItem = new OrderItem(); orderItem.setOrderId(orderId); orderItem.setOrderItemId(rs.getString(1)); orderItem.setQuantity (rs.getLong(2)); theItems.add(orderItem); } order.setOrderItems(theItems); } catch (Exception e) { throw new Exception ("Problem loading an order: " + e.getMessage()); } finally { rs.close(); ps.close(); dbConnection.close(); } return order; }
46

J2EE: Arquitectura MVC de una aplicacin


Presentacin Aplicacin
servlet controlador

Servicios

Dominio Persistencia

CONTROLADOR
EJB controlador

MainServlet

RequestProcessor

ScreenFlowManager


WebProxy

StateMachine

JSP template

MODELO
EJB entidad C

VISTAS
HTML 1 HTML 2 Navegador Cliente JSP pantallazo1 JSP pantallazo2 javaBean 1 javaBean 2

EJB sesin A

Model DAO Value

DAO

BD relaBD cional

Servidor Web

Servidor de componentes

47 Servidor BD

Problemas en la implantacin de patrones


N Larga curva de aprendizaje N Se requiere personal muy capacitado N Elevados costos y tiempos de desarrollo de proyectos N Alta probabilidad de:
implantar los patrones de forma errada generar bugs en la implantacin

N Cada nuevo proyecto es volver a comenzar la implantacin de patrones ...

48

Java EE 5: Arquitectura MVC de una aplicacin utilizando JSF, EJB 3.0 y Seam
N. Presentacin
Navegador Cliente

N. Aplicacin (Web)
Servidor Web

N. Servicios
Servidor de componentes

N. Persistencia
Servidor de BD

frameworks
HTML servlet JSF
forw a rd

servlet Seam

ejb Seam

entity manager

BD relacional

JSP JSP

ejb ejb aplicacin aplicacin

entidades

Convenciones:

interaccin HTTP

invocacin

acceso BD

uso de atributos de entidades (get y set)

49

Acople entre niveles utilizando el framework JBoss Seam


4

Seam logra que las entidades estn asociadas directamente a las pantallas
N las pantallas muestran valores de atributos de entidades N el usuario modifica o suministra valores para estos atributos N asociacin bidireccional entre pantallas y entidades

4 4 4

Procesamiento de eventos de pantallas es realizado directamente por los componentes EJB de sesin Se eliminan intermediarios => muchos patrones se vuelven innecesarios Modelo de contextos de diversos alcances para manejar
adecuadamente el estado de las aplicaciones

Biyeccin: asociacin dinmica, contextual y bidireccional entre


las variables de los contextos y los atributos de los componentes

Portabilidad de Seam a cualquier servidor que soporte JSF y


EJB 3.0
50

Facilidades avanzadas ofrecidas por Seam:


N Anotaciones Seam reducen descriptores y cdigo N Manejo de mltiples conversaciones simultneas de un mismo usuario N Integracin de Procesos de negocios: definicin e implementacin de flujos de negocio con jBPM y Seam definicin e implementacin de flujos de pantallas N Facilidades de testing con TestNG

-------------------------------------------------------------------------4

Framework EJB 3.0 recoge experiencias de JDO, HIBERNATE, TOPLINK, SPRING Principal autor de Seam: Gavin King (el mismo autor de HIBERNATE)
51

Alternativas de implementacin

Presentation Application tiers Request Controller Context Management State Management

JSP

Facelets

Portal

JSF Seam EJB 3 Jboss jBPM Hibernate

52

demo de Cincosoft para Java EE 5


4

This sample application has been built on top of the following frameworks:
JSF: implemented by Apache Myfaces EJB 3.0: implemented by JBoss JBoss Seam: to glue JSF and EJB 3.0 JBoss jBPM: workflow

CincoSOFT studied the booking seam demo, that illustrates Seam conversations, and wrote a new application whose main characteristics are:
organization oriented by modules and use cases security model based in roles to access system resources workflow using jBPM, with the participation of several use cases and actors dynamic menu with data coming from the database a growing set of high level patterns of screens flexible timeout control of the application and of conversations internationalization event management between ejbs based in annotations, event management for screen rendering standardized source code administration based on ANT (compiling, 53 packaging, deployment, javadoc generation, testng, cvs)

Mostrar:
N diferentes perfiles de usuarios => diferentes opciones de men N elementos de pantallas: mens, tablas con scroll, tablas ordenables, tablas editables con validacin, facilidades ajax N mltiples conversaciones para un mismo usuario (abrir segunda pestaa sobre enlace de conversacin e invocar botn "Buscar" para abrir segunda conversacin) N jBPM: inscripcin de hoteles y aprobacin posterior por parte del superadministrador N internacionalizacin

54

Libros estudiados

Estndares Java EE

Experiencia 5S en proyectos PetStore (Sun)

Ejemplos pblicos Ejs BEA Ejs JBoss Seam

Meta-framework 5S = materializacin del know-how de CincoSOFT

Distribuimos herramientas y ejemplos libres:


N Postgresql, J2SDK 1.5, JBoss-4.0.5.GA, JBoss-Seam (con ejs), Eclipse 3.2.2, ExadelStudio 4.0.4

No distribuimos el demo de Cincosoft para Java EE 5


N es know-how interno N tiene aspectos muy complejos para ser considerado punto de arranque: son ms simples algunos ejemplos de JBoss Seam (por ej: Hotel Bookings) N en las transparencias se ilustrarn las tcnicas utilizadas en el demo de CincoSOFT
55

Das könnte Ihnen auch gefallen