9fcfd50916764d54ee

52
1 Java EE 5 (sucesor de J2EE): Java EE 5 (sucesor de J2EE): el reto de volver a empezar el reto de volver a empezar Mar Mar í í a Consuelo Franky a Consuelo Franky Abril de 2007 Abril de 2007 CincoSOFT Ltda. CincoSOFT Ltda. [email protected] [email protected] http://www.cincosoft.com http://www.cincosoft.com

Upload: jose-gonzales

Post on 20-Oct-2015

13 views

Category:

Documents


2 download

TRANSCRIPT

1

Java EE 5 (sucesor de J2EE): Java EE 5 (sucesor de J2EE): el reto de volver a empezarel reto de volver a empezar

MarMaríía Consuelo Frankya Consuelo FrankyAbril de 2007Abril de 2007

CincoSOFT Ltda.CincoSOFT [email protected]@cincosoft.com

http://www.cincosoft.comhttp://www.cincosoft.com

2

IntroducciIntroducci óónn

• Java EE 5 reemplazó a J2EE hace menos de 1 año: cambio profundo de modelo conceptual, arquitectura y estrategia de desarrollo

• Aplicaciones Java EE 5 son mucho más concisas y eficientes: reducen el código a la tercera parte

• El reto es volver a aprender a hacer aplicaciones de una manera completamente distinta

• Objetivo de la conferencia: visión general del desarrollo de aplicaciones Java EE 5 con sus ventajas y dificultades

3

ContenidoContenido

A: Arquitectura de una aplicación Java EE 5

B: Concepto y programación de un caso de uso

C: Facilidades para el desarrollo de aplicaciones Java EE 5

D: Elementos JSF para pantallas

E: Meta-framework para acelerar el desarrollo en Java EE 5 (experiencia CincoSOFT)

4

A:A:

Arquitectura de una Arquitectura de una aplicaciaplicaci óón Java EE 5 n Java EE 5

5

•Manejainteraccióncon usuario

•Despliegue HTML

•Validación sintáctica

PresentaciPresentacióónn

Cliente conCliente con

navegador Webnavegador Web

•Invoca servicios

•Validaciónsintáctica

•Adaptarespuestasa interfaz usuario

•Maneja excepciones

AplicaciAplicacióónn

ServidorServidor WebWeb

•Realiza servicios sobre objetos deldominio

•Implanta reglas del negocio

•Estado desesión-usuario

•Control transacción

ServiciosServicios

Servidor de ComponentesServidor de Componentes

•Servicios básicos depersistenciade objetosdel dominio

•Transforma-ción Objeto-Relacional

•Soporte transacción

PersistenciaPersistencia

Servidor BDServidor BD

•Modelaentidades del negocioy sus reglasbásicas

•Validación semántica

DominioDominio

Niveles de una arquitecturaNiveles de una arquitectura multimulti --nivelnivel

6

Elementos del estElementos del est áándar Java EE 5ndar Java EE 5

Múltiples frameworks

Framework:• librería• reglas de uso

• soporta 1 aspecto del desarrollo

7

8

� Pantallas se contruyen con componentes gráficos que reaccionan a eventos:�son componentes de alto nivel que encapsulan elementos

HTML y tienen comportamiento asociado

�como reacción a eventos (por ej: oprimir un botón) invocan directamente métodos de clases java ("backing beans")

� Aspectos de validación de los datos del usuario:�Validación automática asociada a cada componente gráfico

�Cuando la validación falla se vuelve a mostrar la pantalla junto con los mensajes de error

�Procesamiento de eventos solo cuando la validación es exitosa

Nivel web basado en JSFNivel web basado en JSF

9

Framework JSF

NavegadorCliente

PresentaciPresentacióónn AplicaciAplicacióónn ServiciosServicios PersistenciaPersistencia

servlet Faces

Servidor Web Servidor BD Servidor de componentes

DominioDominio

JSP pantallazo1

HTML 1

JSP pantallazo2

Backing Bean 2

VISTAS

MODELO

CONTROLADOR

Backing Bean 1

BD

rela-

cional

HTML 2

EJB sesión

A

EJB entidad

C

10

� Concepto de EJB de entidad�modela una entidad de negocio persistente

� Concepto de EJB de sesión�componente de negocio: implementa los servicios ofrecidos

por la aplicación

� Simplificación de Java EE 5 respecto a J2EE�clases simples para implementar entidades y componentes de

negocio: • se regresa a un POJO: “Plain Old Java Objects”

�descriptores desaparecen (pero ahora hay @anotaciones no obligatorias)

• más trabajo para el Contenedor, menos para el desarrollador

� persistencia automática: desaparece SQL burocrático

� ahora sí se programa en términos de objetos (entidades) y no en términos de tablas de la BD

• código se reduce a la tercera parte (y más robusto)

Niveles de Servicio y Dominio Niveles de Servicio y Dominio basados en EJBs 3.0basados en EJBs 3.0

11

J2EE: J2EE: Arquitectura MVC de una aplicaciArquitectura MVC de una aplicaci óónn

NavegadorCliente

PresentaciPresentacióón n AplicaciAplicacióónn ServiciosServicios PersistenciaPersistencia

Servidor Web Servidor BD Servidor de componentes

DominioDominio

VISTAS

MODELO

CONTROLADOR

BD

rela-

cional

servlet controlador

EJB sesiónA

EJB entidadC

StateMachine

javaBean 1

javaBean2

� WebProxy

EJB controlador

��

ScreenFlow-Manager

JSP pantallazo1

JSP pantallazo2

JSPtemplate

HTML 1

RequestProcessor

HTML 2

MainServlet �

DAO

ModelDAO

Value

BD

12

Java EE 5: Java EE 5: Arquitectura de una aplicaciArquitectura de una aplicaci óón n

utilizando frameworks JSF, EJB 3.0 y Seamutilizando frameworks JSF, EJB 3.0 y Seam

Navegador Cliente

JSP

N. AplicaciN. Aplicaci óón (Web)n (Web)

ejb aplicación

N. ServiciosN. Servicios N. PersistenciaN. Persistencia

Servidor Web Servidor de BD

N. PresentaciN. Presentaci óónn

Servidor de componentes

BD relacional

HTML

JSP

entidades

Convenciones: interacción HTTP invocación acceso BD uso de atributos

de entidades (get y set)

servlet JSF

servlet Seam

ejb Seam

ejb aplicación

entity manager

forw

ard

frameworks

13

� Seam logra que las entidades estén asociadas directamente a las pantallas� las pantallas muestran valores de atributos de entidades� el usuario modifica o suministra valores para estos atributos

� Procesamiento de eventos de pantallas es realizado directamente por los componentes EJB de sesión

� Se eliminan intermediarios => muchos patrones se vuelven innecesarios

� Portabilidad de Seam a cualquier servidor que soporte JSF y EJB 3.0

Acople entre niveles utilizando el Acople entre niveles utilizando el framework JBoss Seamframework JBoss Seam

14

B:B:

Concepto y programaciConcepto y programaci óón n de un caso de uso de un caso de uso

(propuesta CincoSOFT)(propuesta CincoSOFT)

15

J2EE: J2EE: Arquitectura para soportar un caso de usoArquitectura para soportar un caso de uso

NavegadorCliente

PresentaciPresentacióón n AplicaciAplicacióónn ServiciosServicios PersistenciaPersistencia

Servidor Web Servidor BD Servidor de componentes

DominioDominio

VISTAS MODELO

BD

rela-

cionalJSP

pantallazo1

JSP pantallazo2

JSPtemplate

servlet controladorCONTROLADOR

WebProxy

EJB sesiónA

DAO

EJB controlador

StateMachine

XxxEjbHandler

XxxModel

ScreenFlow-Manager

XxxFlow-Handler

HTML 1

RequestProcessor

HTML 2

MainServlet

RequestToEventTrans

XxxRequest-Handler

XxxValue

EJB entidadC

DAO

16

Java EE 5: Java EE 5: Arquitectura para soportar un caso de usoArquitectura para soportar un caso de uso

Navegador Cliente

JSP 2

N. AplicaciN. Aplicaci óón (Web)n (Web) N. ServiciosN. Servicios N. PersistenciaN. Persistencia

Servidor Web Servidor de BD

N. PresentaciN. Presentaci óónn

Servidor de componentes

BD relacional

HTML

JSP 1

Entidades(compartidas por los casos de uso)

Convenciones: interacción HTTP invocación acceso BD uso de atributos

de entidades (get y set)

Ejb para el caso de uso

forw

ard

Frameworks JSF, EJB 3.0 y Seam

17

pantalla P

Concepto de un caso de usoConcepto de un caso de uso� Es un conjunto de servicios sobre entidades de nego cio,

implementado por un ejb de sesión y por un conjunto de pantallas desde donde se solicitan estos servicios

ejb de sesión

entidad A

entidad B

pantalla Q pantalla Rcampos de pantallas

asociados a atributos de entidades y

del ejb

botones de pantallas que invocan servicios del ejb

entidades compartidas por todos los casos de uso

los servicios del ejb consultan y modifican las entidades

18

� Un ejb de sesión que soporta un caso de uso puede e xponerse como Web service ofreciendo públicamente un subconj unto de sus servicios

ejb de sesión

Web service

entidad A

entidad B

19

AplicaciAplicaci óón = n = entidades + ejbs + web services + pantallasentidades + ejbs + web services + pantallas

caso de uso 1 caso de uso 2

Web service 1 Web service 2

ejb sesión caso uso 1

entidad A

entidad B

entidad C

entidad D

entidades de negocio

ejb sesión caso uso 1

ejb sesión

20

Flujo de negocio para Flujo de negocio para un nuevo caso de usoun nuevo caso de uso

� Caso de uso “inscribir nuevo hotel”� invocar servicio newHotel() para iniciar conversacion creando

nuevo objeto Hotel vacio

�mostrar pantalla "editHotel" que muestra el objeto Hotel para que el usuario de valor a sus atributos

� invocar servicio verifyNewHotel() para validar el objeto Hotel:• si hay errores de validacion volver a mostrar la pantalla "editHotel”• si no hay errores mostrar la pantalla "confirmHotel" para pedir al

usuario su confirmacion o cancelación

�cuando el usuario confirma:• invocar servicio confirm() para agregar el nuevo Hotel a la BD y

cerrar la conversacion• mostrar la pantalla "main" del sistema, la cual mostrará un mensaje

de confirmacion

�cuando el usuario cancela:• invocar servicio cancel() para cerrar conversacion• mostrar pantalla "main"

21

/hotels/editHotel.xhtmlhotels/confirmHotel.xhtml

common/main.xhtml

editHotel

newHotel()

confirmHotel

verifyNewHotel()

confirm()

Flujo de negocio:Flujo de negocio:caso de uso caso de uso ““ inscribir nuevo hotelinscribir nuevo hotel ””

ftProceed

B

Cancel

cancel()

E

main

Revise

Confirm

E

Cancel

Reglas de navegación de pantallas se describen en a rchivos de configuración: faces-config.xml, pages.xml

22

� pages.xml : reglas de navegación entre pantallas� desde cualquier pantalla con la acción newHotel se solicita ir

a la pantalla editHotel de entrada al caso de uso

� en la pantalla editHotel el usuario suministra los datos del nuevo hotel e invoca la acción verifyNewHotel ; después vaa la pantalla confirmHotel solo si el nuevo hotel es válido

<!-- reglas desde cualquier pantalla --><page view-id="*">

...<navigation from-action=" #{hotelInscription.newHotel} ">

<redirect view-id=" /pages/hotels/hotelInscription/editHotel.xhtml "/>

</navigation></page>

<!-- reglas desde pantalla editHotel --><page view-id=" /pages/hotels/hotelInscription/editHotel.xhtml "

conversation-required="true"> <navigation from-action=" #{hotelInscription.verifyNewHotel} ">

<rule if=" #{hotelInscription.hotelValid} "><redirect view-id=

" /pages/hotels/hotelInscription/confirmHotel.xhtml "/></rule>

</navigation></page>

23

Ejb de sesiEjb de sesi óón para el caso de uson para el caso de uso� Atributos:

� atributos que representan los frameworks de control� atributos que son entidades� atributo que indica el resultado de validar la nueva entidad Hotel� inyección/extracción de atributos

@Stateful@Name("hotelInscription")public class HotelInscriptionAction

implements HotelInscription {@PersistenceContextprivate EntityManager em;

@Inprivate FacesMessages facesMessages ;

@In(required=false)@Out(required=false)private Hotel hotel ;

private boolean hotelValid ;

public boolean isHotelValid (){return hotelValid;

}

@Destroy @Removepublic void destroy () {}

24

� Servicios:� servicios que inician o terminan conversación de inscribir un hotel� servicio que valida el nuevo hotel � servicio que ingresa el nuevo hotel a la BD

@Beginpublic void newHotel () {

hotel = new Hotel();}

public void verifyNewHotel () {if ( ! hotel.getCountry().equals("USA") ) {

facesMessages.add("Only accepts hotels in USA ");

return;}if ( ! hotel.getZip().matches("^\\d*$") ) {

facesMessages.add("Zipcode must be numeric");return;

}hotelValid = true;

}

@Endpublic void confirm () {

em.persist (hotel);facesMessages.add("Thank you, your inscription"

+ " of #{hotel.name} has id #{hotel.id}");}

@Endpublic void cancel (){}

}

25

Entidades que participan Entidades que participan en el caso de usoen el caso de uso

� entidad maestra Hotel @Entity@Name("hotel")@Scope(CONVERSATION)@Table(name="Lodge")public class Hotel implements Serializable {

private Long id ;private String name;...private List<Atraction> atractions

= new ArrayList<Atraction>();

public Hotel () {}

@Id @GeneratedValuepublic Long getId () {

return id;}public void setId (Long id) {

this.id = id;}

• Observar: – atributo de relación con otra entidad (detalles)– anotación indicando el atributo llave

26

@NotNull@Length (min = 1, max = 50, message = "name is required and must be at most {max} charact ers long" )

public String getName () {return name;

}public void setName (String name) {

this.name = name;}

... @OneToMany(mappedBy="hotel", cascade=CascadeType.ALL)@OrderBy("description asc")public List<Atraction> getAtractions () {

return atractions;}public void setAtractions (List<Atraction> atractions) {

this.atractions = atractions;}

}

• Observar: – anotación de validación de un atributo– anotación de relación con otra entidad

27

Pantalla Pantalla ““ editHoteleditHotel ””de edicide edici óón de una entidad Hoteln de una entidad Hotel

28

� Expone directamente los atributos de la entidad Hot el...<div class="label">Name:</div><div class="input">

<h:inputText id="name" value=" #{hotel.name} " required="true" />

<br/><span class="errors"> <h:message for="name" /> </span>

</div>

� Hay una zona para los mensajes FacesMessages<div class="entry errors">

<h:messages globalOnly="true" /></div>

� Los botones invocan servicios<div class="input">

<t:commandButton id="proceed" value="Proceed" action=" #{hotelInscription.verifyNewHotel} " styleClass="button" /> &#160;

<s:button value="Cancel" id="cancel" action=" #{hotelInscription.cancel} " styleClass="button" />

</div>

29

� Validación JSF antes de invocar servicios:

30

C:C:

Facilidades para el desarrollo de Facilidades para el desarrollo de aplicaciones Java EE 5aplicaciones Java EE 5

31

Variables en contextos Seam: Variables en contextos Seam: inyecciinyecci óón y extraccin y extracci óón (biyeccin (biyecci óón)n)

hotelbooking

hotelsatractions

hotelSearching

hotelInscription

hotelBooking

outin

entidadlista de

entidadesejb de sesión

Convenciones

� Biyección: asociación dinámica, contextual y bidireccional entre las variables de los contextos y los atributos de los componentes

32

hotelInscription

editHotel.xhtml

outin

entidadlista de

entidadesejb de sesión

Convenciones

action

� Uso de las variables por las pantallas �ej: editHotel

hotel

33

� Tipos de contextos en Seam:�StatelessContext: variables sin estado (como ejbs sin estado); en

realidad es un no contexto

�EventContext: equivale al request context, asociado a pedido JSF

�PageContext: estado asociado a una pantalla mostrada

�ConversationContext: unidad de trabajo para el usuario, puede durar varios pedidos

�SessionContext: asociada a toda la sesión de un usuario

�BusinessContext: asociado a un proceso de negocio que puede involucrar múltiples interaccionees con múltiples usuarios

�ApplicationContext: asociado al estado global del servidor

34

Servicios de persistenciaServicios de persistenciadel EntityManager (framework EJB3.0)del EntityManager (framework EJB3.0)

� Invocados desde los ejb de sesión�Obtener la referencia al EntityManager por inyección:

@PersistenceContextprivate EntityManager em;

� insert en la BD una nueva entidad :em.persist (hotel); // el objeto adquiere PK

� select en la BD una entidad existente, conociendo su PK:Hotel hotel = (Hotel)em. find (Hotel.class, hotelId);

� select en la BD una entidad existente, cancelando posibles modificaciones en memoria:

em. refresh (hotel);

� update diferido en la BD con modificaciones de una entidad existente (se difiere hasta el commit de la transacción):

hotel.setName("Hotel Rey");em.merge (hotel);

� delete en la BD de una entidad existente:em. remove (hotel);

35

� createQuery() : consulta o actualización en la BD según diversos criterios (EJB QL):

�select una entidad:Hotel hotel = (Hotel)em. createQuery(" from Hotel h where h.name=:name and h.city=:city ")

.setParameter("name", "Hotel Rey")

.setParameter("city", "Bogota")

.getSingleResult();

�select una lista de entidades:List<Hotel> theList = em. createQuery

(" from Hotel h where h.city = :city ").setParameter("city", ”Bogota").getResultList();

�update una o varias entidades:em.createQuery(" update Hotel h set h.city = :city ")

.setParameter("city", "Bogota")

.executeUpdate();

�delete una o varias entidades:em.createQuery("delete from Hotel h where h.city = :city")

.setParameter("city", ”Bogota")

.executeUpdate();

36

Otras facilidades importantesOtras facilidades importantes

� Facilidades de Log proporcionadas por Seam�permite mostrar banderas que combinan texto parametrizado y

variables de contextos:log.info("Cancel booking: #0 for #{user.username} ",

booking.getId());

� Seguridad por roles�por anotaciones se puede proteger un ejb o un servicio particular

para que solo pueda ser invocado por un rol particular�Cada botón de una pantalla se puede habilitar o mostrar solo para

un rol particular

� Internacionalización: se pueden lograr las siguiente s características:�el usuario escoge el idioma de su preferencia�existe idioma por defecto según localización del usuario� los letreros de las pantallas salen en el idioma vigente� los mensajes de errores de validación salen en el idioma vigente

37

D:D:

Elementos JSF para pantallas Elementos JSF para pantallas

38

Pantallas Pantallas ““ faceletsfacelets ””construidas con templates y <div>construidas con templates y <div>

� Concepto de template :� pantalla base que define estructura común de las pantallas reales� contiene partes fijas y partes que deben ser redefinidas por cada pantalla� ejemplo de estructura de pantalla:

banner

contentsidebar

footer

39

� Ejemplo de template: template.xhtml

<!-- librerias de etiquetas --><html xmlns="http://www.w3.org/1999/xhtml"

xmlns:ui="http://java.sun.com/jsf/facelets"xmlns:h="http://java.sun.com/jsf/html"xmlns:f="http://java.sun.com/jsf/core"xmlns:s="http://jboss.com/products/seam/taglib"xmlns:t="http://myfaces.apache.org/tomahawk">

<!-- referencia al archivo que define estilos de los div --><head>

<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1" />

<title>Hotels reservation system</title><link href="../css/ screen.css " rel="stylesheet" type="text/css"/>

</head>

40

<body><!-- div que define la estructura global de toda pan talla --><div id="document" >

<!-- toda pantalla tiene un banner fijo --><div id="headerMenu">

<div id="titleMenu"><h4>CincoSOFT framework</h4></d iv><div id="statusMenu">

<t:jscookMenu layout="hbr" theme="ThemeIE"><t:navigationMenuItems value="#{login.menu}" />

</t:jscookMenu></div>

</div>

<!-- toda pantalla tiene un contenido variable: las partes sidebar y content deben ser definidos por c/pantall a real-->

<div id="container"><div id="sidebar" style=" width : 150px;">

<ui:insert name=" sidebar " /></div>

<div id="content" style="width : 500px;"><ui:insert name=" content " /><ui:include src=" footer.xhtml " />

</div></div>

</div></body></html>

41

� Pantalla real que se basa en el template:� la etiqueta más externa <ui:composition> indica que se usa un template� la etiqueta <ui:define> redefine partes variables del template� se diseña con <div> que tienen estilos asociados� ejemplo: password.xhtml :

<!-- librerias de etiquetas e indicacion del templat e utilizado --><ui:composition xmlns="http://www.w3.org/1999/xhtml"

xmlns:ui="http://java.sun.com/jsf/facelets"xmlns:h="http://java.sun.com/jsf/html"xmlns:f="http://java.sun.com/jsf/core"xmlns:t="http://myfaces.apache.org/tomahawk"xmlns:s="http://jboss.com/products/seam/taglib"template="../common/template.xhtml" >

<!-- definicion de la parte content --><ui:define name=" content " >

<div class="section"> <h1>Change Your Password</h1> </div><div class="section">

...</div>

</ui:define>

<!-- definicion de la parte content --><ui:define name=" sidebar " >

<h1>changePassword use case</h1></ui:define>

</ui:composition>

42

Elementos avanzados de JSFElementos avanzados de JSF� Menú jerárquico dinámico: etiqueta <t:jscookMenu>

43

� Calendario: etiqueta <t:inputCalendar>

44

� Tabla con scroll y ordenable por columnas : etiqueta <t:dataTable>

45

� Tabla editable con validación por celda : etiqueta <t:dataTable>

46

� Tablas anidadas : etiqueta <t:dataTable>

47

E:E:

MetaMeta--framework para acelerar el framework para acelerar el desarrollo en Java EE 5 desarrollo en Java EE 5

(experiencia CincoSOFT)(experiencia CincoSOFT)

48

� Su control se apoya en frameworks: JSF, EJB3.0, Seam

� Debe contener un módulo de seguridad:� basado en roles JEE para autenticación y autorización� entidades y casos de uso para: cambiar password, manejar perfiles

de seguridad (basados en roles), manejo de usuarios e inscripción en perfiles ,...

� Debe contener los descriptores correctamente config urados

� Debe disponer de un menú jerárquico que se carga de la BD según perfil del usuario

� Sus fuentes deben estar organizados por módulos y d entro de cada módulo por casos de uso� inicialmente nace solo con el módulo de seguridad

� Debe disponer de un ANT para compilación, empaque y despliegue

� Debe manejar logs

El esqueleto de una aplicaciEl esqueleto de una aplicaci óón Java EE 5n Java EE 5

49

� Genera el esqueleto de una aplicación Java EE 5� se apoya en frameworks estándares JEE5:

� JSF: implementado por Apache Myfaces

� EJB 3.0: implementado por el servidor JBoss; en el futuro debe operar también con otros servidores (BEA, IBM WebSphere, …)

� JBoss Seam: acopla JSF y EJB 3.0 � JBoss jBPM: workflow� otros: Log4j, Quartz, Jasper, ….

� Además ofrece generadores de esqueletos para agrega r a la aplicación:� una nueva Entidad� un nuevo EJB� un nuevo Web-Service� una nueva pantalla� un nuevo Caso de Uso� un nuevo Módulo

� El Meta-Framework de CincoSOFT no amarra a la aplic ación a utilizar permanentemente el Meta-Framework� el código generado es claro y documentado� organizado según el estándar: por módulos y casos de uso� indica secciones que deben ser llenadas por el programador

MetaMeta--framework de CincoSOFTframework de CincoSOFT

50

Esqueleto inicial de una aplicaciEsqueleto inicial de una aplicaci óón Java EE 5 n Java EE 5 generado por el Metagenerado por el Meta --framework de CincoSOFTframework de CincoSOFT

Navegador Cliente

N. AplicaciN. Aplicaci óón (Web)n (Web) N. ServiciosN. Servicios N. PersistenciaN. Persistencia

Servidor Web Servidor de BD

N. PresentaciN. Presentaci óónn

Servidor de componentes

BD relacional

HTML

password.xhtml

Module, Usecase, Service, Profile, ProfileService,

User, UserProfile,Menu

Convenciones: interacción HTTP invocación acceso BD uso de atributos de entidades (get y set)

Ejb ChangePassword

forw

ard

Frameworks JSF, EJB 3.0 y Seam

acople mediante descriptores generados por el meta-framework CincoSOFT

users.xhtml

profiles.xhtml

Ejb UserGestion

Ejb ProfileGestion

ENTIDADES

51

ConclusionesConclusiones� Atractivos de Java EE 5:

�Conciso y eficiente; reduce código a la tercera parte�Desaparece JDBC (código burocrático SQL) y varios patrones� Integración de múltiples frameworks que ofrecen muchas

facilidades: persistencia, seguridad, logs, internacionalización, BPM, testing, ...

�Pantallas con elementos ricos de interfaz y relativa facilidad de uso: múltiples implementaciones de JSF por Apache MyFaces, Oracle ADF, …

� Dificultades planteadas por Java EE 5:�comenzar de nuevo ….�Pérdida del control a un nivel fino de detalle porque los

frameworks actúan como cajas negras => dificultad de depurar�Actualmente no es soportado por todos los proveedores de la

tecnología Java

� Utilidad de un meta-framework�disminuir sustancialmente la curva de aprendizaje�acelera el proceso de desarrollo

52

ReferenciasReferencias

� Libros sobre Java EE 5:• “JavaServer Faces: The Complete Reference”, Mc Graw Hill,

2007.• “Pro EJB 3: Java Persistence API”, Apress, 2006.

� Fuentes en internet:• http://java.sun.com/javaee/5/docs/tutorial/doc : "The Java EE 5

Tutorial " es el tutorial oficial de Sun (versiones HTML y PDF)

• http://labs.jboss.com/portal/jbossseam/docs: Manuales de referencia de JBoss Seam

• http://java.sun.com/javaee/technologies/javaee5.jsp: “Get Started with the Java EE 5 SDK": son tutoriales y demos para comenzar

• http://java.sun.com/reference/blueprints: Patrones y guías para el desarrollo de aplicaciones Java EE en general