Fwpa Doc Desarrollo

Embed Size (px)

Citation preview

Manual de Desarrollo de Aplicaciones J2EE

Manual de Desarrollo de Aplicaciones J2EEVersin 1.5 publicado 26-Junio-2006 Copyright Gobierno del Principado de Asturias 2005

Tabla de contenidos1. Presentacin de openFWPA .............................................................................................. 1 Introduccin .............................................................................................................. 1 Visin General de openFWPA ...................................................................................... 2 Empaquetamiento de openFWPA .......................................................................... 4 Requerimientos tcnicos y de sistema ..................................................................... 5 Lista completa de funcionalidades ......................................................................... 5 Lista de componentes de terceras partes .................................................................. 6 Arquitectura de referencia ............................................................................................ 8 Desarrollo de aplicaciones .......................................................................................... 10 Estructura de directorios ..................................................................................... 10 Compilacin y despliegue del sistema ................................................................... 11 Pruebas unitarias ............................................................................................... 11 Instalacin de la aplicacin de ejemplo (Sample App) .............................................. 11 2. Arquitectura Modelo -Vista- Controlador con openFWPA ..................................................... 13 MVC ...................................................................................................................... 13 Desarrollo de la Vista ................................................................................................ 14 Aspecto corporativo de las aplicaciones del Principado de Asturias ............................. 14 Cascading Style Sheets (CSS) ............................................................................. 14 Desarrollo del Controlador ......................................................................................... 16 Declaracin de Actions ...................................................................................... 16 Jerarqua de Actions .......................................................................................... 17 Action Forms ............................................................................................. 29 Desarrollo de lgica de negocio .................................................................................. 31 Service Locator ................................................................................................ 31 Session EJBs .................................................................................................... 31 Value Objects .................................................................................................. 31 Excepciones ..................................................................................................... 32 Utilidades ........................................................................................................ 33 Otras clases de utilidad .............................................................................................. 33 PrincastMessageFmtter ............................................................................ 33 PrincastUtils ............................................................................................ 33 ParameterCaster ........................................................................................ 33 ServletPathUtils ...................................................................................... 33 DateDecorator ............................................................................................ 34 PrincastPathResolver .............................................................................. 34 PrincastOSCacheInterceptor .................................................................. 35 Providers ......................................................................................................... 35 3. Implementacin de la Arquitectura de Referencia con openFWPA .......................................... 37 Inversin de Control en la Arquitectura de Referencia ..................................................... 37 Introduccin al manejo de la Arquitectura con Spring ...................................................... 37 Estableciendo el Datasource ........................................................................................ 38 Enlazando con los DAOs ........................................................................................... 39 Enlazando con los Managers ....................................................................................... 40 Gestin de transacciones ............................................................................................ 41 Enlazado con los Delegates ........................................................................................ 42 Enlazado con las Actions ........................................................................................... 42 Acceso directo al ApplicationContext ................................................................. 43 BeanDoc para obtener la grfica de arquitectura ............................................................. 43 Plugin SpringIDE para Eclipse .................................................................................... 43 4. Componentes para acceso a datos ..................................................................................... 45 Acceso a Bases de Datos Relacionales .......................................................................... 45

iv

Manual de Desarrollo de Aplicaciones J2EE El patrn DAO ................................................................................................. 45 Loggeo de las Excepciones en los DAO ................................................................ 47 Listas clave/valor .............................................................................................. 47 LookupPropertyBean .................................................................................. 49 Providers ......................................................................................................... 49 Generadores de Secuencia .................................................................................. 49 Pools de conexiones .......................................................................................... 50 Construccion de informes con openFWPA ......................................................................... 51 Generacin de Informes ............................................................................................. 51 Creacin de los diseos XML. ............................................................................ 51 Clases en el openFWPA para la renderizacin de informes. ...................................... 57 Operaciones ................................................................................................................. 61 Sistema de Inicializacin y Arranque ............................................................................ 61 Declaracin de objetos inicializables .................................................................... 61 Desarrollo de objetos inicializables ...................................................................... 62 Arranque de aplicaciones web ............................................................................. 63 Arranque manual .............................................................................................. 63 Sistema de Configuracin de Aplicaciones .................................................................... 63 Implementacin de objetos configurables .............................................................. 64 Plugins de Configuracin ................................................................................... 66 Logging .................................................................................................................. 72 Log4J. Componentes ......................................................................................... 72 Configuracin ................................................................................................... 74 Componentes del openFWPA para Logging. .......................................................... 75 Pista de auditora .............................................................................................. 76 Pista de Rendimiento ......................................................................................... 77 Ficheros de Configuracin .......................................................................................... 77 web.xml ........................................................................................................ 77 struts-config.xml .................................................................................... 79 Filtros web .............................................................................................................. 83 Filtros del openFWPA. PrincastFilter. ......................................................... 83 Configuracin del filtro GZIPFilter ................................................................. 85 Configuracin del filtro SecurityFilter ......................................................... 85 Filtro de navegacin .......................................................................................... 85 Filtro de activacin ........................................................................................... 86 Filtros de Activacin ......................................................................................... 87 Consola de gestin .................................................................................................... 88 Seguridad en aplicaciones con openFWPA ......................................................................... 90 Seguridad ................................................................................................................ 90 Autentificacin bsica ........................................................................................ 90 Autentificacin basada en formulario .................................................................... 90 Autentificacin basada en el Filtro de Seguridad del openFWPA ............................... 90 Single Sign On ............................................................................................... 103 Integracin de Sistemas ................................................................................................ 104 Tecnologas de Integracin ....................................................................................... 104 XML Genrico: Configuracin .......................................................................... 104 Pruebas ...................................................................................................................... 106 Pruebas unitarias ..................................................................................................... 106 Jerarqua de clases para las pruebas unitarias ........................................................ 106 Convenciones a seguir ..................................................................................... 107 Ejecucin de las pruebas unitarias ...................................................................... 107 Consultando los resultados de los tests ................................................................ 107 Pruebas unitarias de objetos que acceden a bases de datos. ...................................... 108 Pruebas unitarias de Spring Beans ...................................................................... 112

5.

6.

7.

8.

9.

v

Manual de Desarrollo de Aplicaciones J2EE Pruebas unitarias de objetos Configurables .................................................... Pruebas unitarias en contenedor ......................................................................... Pruebas unitarias de informes ............................................................................ Ms informacin sobre la implementacin de pruebas unitarias ................................ Pruebas de Rendimiento ........................................................................................... Modo de Prueba de Rendimiento ....................................................................... 112 113 114 115 116 116

vi

Lista de figuras1.1. Estructura de openFWPA ............................................................................................... 2 1.2. Arquitectura de Referencia ............................................................................................. 8 1.3. Estructura de directorios del proyecto Sample App. ........................................................... 10 2.1. Modelo Vista Controlador ............................................................................................ 13 2.2. Ciclo peticin-accin-jsp de Struts ................................................................................. 13 2.3. Estructura de capas de las aplicaciones web con openFWPA ............................................... 14 2.4. Aspecto corporativo del portal princast.es ................................................................ 14 2.5. Aspecto de la aplicacin de ejemplo (Sample App) ........................................................... 14 2.6. Jerarqua de Actions .................................................................................................... 17 2.7. Maquinaria de Estados de PrincastAction ................................................................ 18 2.8. Almacenamiento de la Action .................................................................................... 21 2.9. Esquema de la PrincastDispatchAction del ejemplo ............................................... 25 2.10. Esquema de las Actions para listados ............................................................................ 28 2.11. Estructura de la capa Modelo ...................................................................................... 31 2.12. Diagrama de Value Objects ........................................................................................ 32 2.13. Jerarqua de Excepciones ............................................................................................ 32 3.1. Ficheros de configuracin de Beans ............................................................................... 37 3.2. Ejemplo de grfica generada con BeanDoc ...................................................................... 43 3.3. Spring IDE para visualizar ficheros de Spring .................................................................. 44 4.1. Ejemplo de necesidad de lookup .................................................................................... 49 4.2. Navegacin de una relacin en BD con un LookupPropertyBean ......................................... 49 5.1. Proceso de generacin de informes ................................................................................ 51 6.1. Estructura del sistema de configuracin .......................................................................... 64 6.2. Jerarqua de Plugins .................................................................................................... 68 6.3. Estados del Sistema de Logging .................................................................................... 74 7.1. Esquema del sistema de autenticacin ............................................................................ 91 9.1. Set de pruebas unitarias disponibles .............................................................................. 106 9.2. Autowiring de DAOs y DataSources ............................................................................ 110

vii

Lista de tablas1.1. Componentes necesarios para la ejecucin del openFWPA ................................................... 7 1.2. Capas de la Arquitectura de Referencia de openFWPA ........................................................ 9

viii

Captulo 1. Presentacin de openFWPAIntroduccinopenFWPA es el framework de desarrollo libre para sistemas de administracin electrnica y gobierno electrnico desarrollado por el Gobierno del Principado de Asturias. Est basado en la tecnologa J2EE y su objetivo es facilitar el diseo, implementacin, implantacin y mantenimiento de las aplicaciones. openFWPA es Software Libre / Open Source y est publicado bajo una doble licencia: LGPL 3.0 (o superior) y EUPL 1.0 (o superior). La Licencia Pblica General Menor del proyecto GNU (LGPL) es una de las licencias desarrolladas y promovidas por la Free Software Foundation (FSF), y da permisos de reproduccin, distribucin, modificacin y redistribucin con copyleft, aunque no se impide la utilizacin de componentes privativos dentro del sistema. La Licencia Pblica de la Unin Europea (EUPL) es una licencia de software libre con copyleft creada y apoyada por la Unin Europea para el impulso del Software Libre en las administraciones pblicas. Los dos grandes objetivos del framework son: Simplificacin y homogeneizacin del proceso de desarrollo de aplicaciones. Para ello openFWPA proporciona una arquitectura reutilizable y un conjunto de herramientas y libreras que implementan algunos de los componentes ms habituales, y de escritura ms tediosa, en aplicaciones web. Todo ello debiera redundar en un menor coste total de propiedad (TCO) de las soluciones desarrolladas sobre openFWPA. Definicin de estndares de desarrollo, calidad y aceptacin. Se trata de un conjunto de directrices, de obligado cumplimiento, para exigir y garantizar unos niveles mnimos de calidad en las aplicaciones J2EE [1]. Estos estndares son internos al Principado de Asturias, y son por tanto aplicables solamente dentro de aquellos proyectos desarrollados dentro del Principado de Asturias. El openFWPA posee las siguientes caractersticas: Uso de software libre. Hay una serie de proyectos del mundo del software libre que poseen una excelente calidad, lo que los habilita para participar en aplicaciones de misin crtica. Uso de patrones de diseo. El openFWPA promueve el uso de patrones de diseo, en dos sentidos importantes. En primer lugar, el framework est diseado y construido sobre patrones. Por otro lado, las aplicaciones que se desarrollan sobre el framework hacen uso asimismo de patrones. Entre otros, las aplicaciones desarrolladas sobre openFWPA siguen una arquitectura Modelo2 , el estndar en aplicaciones web (se trata de una adaptacin del famoso MVC). Uso de estndares. En el diseo del openFWPA se ha promovido la utilizacin e incorporacin de estndares (por ejemplo, XHTML [4] + CSS [14], etc.). El uso tanto de patrones de diseo como de estndares proporciona importantes ventajas en cuanto a la adaptabilidad y longevidad de las aplicaciones que los utilizan, al ser ms fcilmente mantenidas, extendidas o reutilizadas. Aspecto corporativo. Otra caracterstica importante es que las aplicaciones deben integrarse con el resto de aplicaciones del Principado de Asturias, tanto a nivel funcional como de aspecto (look & feel). El openFWPA incluye un conjunto de plantillas y componentes para construir la capa de presentacin de acuerdo a las guas de estilo corporativo del Principado de Asturias. En la versin publicada en portal, estas plantillas pueden modificarse de acuerdo a las necesidades de cada proyecto. Sin embargo, los proyectos internos han de seguir las directrices de estilo corporativo. Integracin de aplicaciones. La nueva funcionalidad, aadida al openFWPA en las ltimas versiones, facilita la integracin de las aplicaciones con otros sistemas del Principado de Asturias (sistema de seguridad, comunicaciones, bases de datos corporativas, sistemas de seguridad, sistemas de CRM, etc.).

1

Presentacin de openFWPA

Esta funcionalidad solo est disponible para los proyectos internos, al carecer de inters en aplicaciones desarrolladas fuera de la organizacin. Ciclo de vida. Las aplicaciones poseen un ciclo de vida ms all de su desarrollo y puesta en produccin. stas han de ser configuradas, migradas y operadas en los diversos entornos. Por ejemplo, el framework proporciona piezas con una funcionalidad importante que facilita el soporte a la operacin. Los componentes del framework estn preparados para ser gestionados en caliente desde una consola de operaciones, y ofrece componentes para aspectos crticos de operacin (como gestin adecuada de logging, pistas de auditora, estadsticas de rendimiento y uso). En general, estos aspectos se incorporan al framework de manera transparente a las aplicaciones. Asimismo, se ofrece (opcionalmente) una serie de APIs avanzadas que permiten a las aplicaciones publicar funcionalidad en la consola de operaciones.

Visin General de openFWPAEl framework de desarrollo J2EE del Principado de Asturias posee la siguiente estructura. Dentro de cada elemento se muestran los artefactos ms relevantes:

Figura 1.1. Estructura de openFWPA

A continuacin, se muestran en ms detalle los diversos elementos que lo componen. Aceptacin Las aplicaciones desarrolladas con el framework para uso interno del Principado de Asturias deben pasar por una serie de controles de calidad. A tal efecto, se han desarrollado una serie de guas que deben seguirse para el desarrollo de estas aplicaciones. Dentro de esta gua de aceptacin se define una arquitectura reutilizable que debieran seguir las aplicaciones. El framework de desarrollo es agnstico en cuanto al entorno de desarrollo. ste debiera poseer los siguientes elementos: Entorno Integrado de desarrollo. Ofrece un entorno donde los desarrolladores pueden desarrollar, compilar, depurar y probar el software en construccin. Herramientas de despliegue. Permite el despliegue de las aplicaciones en los distintos entornos (mquina local, mquinas del entorno de desarrollo, etc.). Diseo de informes. Permite la construccin de informes en distintos formatos. Gestin de la configuracin. Permite la gestin del cambio de los distintos elementos del sistema (cdigo fuente, scripts de construccin, pruebas, etc.). Se trata de un sistema de control de versiones. Entorno de integracin (semi) continua. El entorno de desarrollo debiera ofrecer funcionalidad avanzada de integracin continua o semi-continua. Los proyectos arrancados dentro del Principado de Asturias deben poseer las herramientas definidas en el puesto estndar. Estas

Entorno de desarrollo

2

Presentacin de openFWPA

herramientas deben instalarse y configurarse de manera estndar (igual para todas las estaciones de trabajo). Software Libre Tras la definicin de los requisitos del framework en trminos de herramientas necesarias para el entorno de desarrollo, directrices de aceptacin y diseo del runtime del framework, se realiz la seleccin de distintos componentes del mundo del cdigo abierto o gratuito para su inclusin. Por ejemplo, se seleccion Eclipse como Entorno Integrado de Desarrollo, o CVS para el Control de Versiones. Como elementos ms relevantes, destaca el uso de Eclipse, Spring o Struts. El sistema de tiempo de ejecucin es un conjunto de ficheros .jar que se despliegan con cada una de las aplicaciones del framework. Este sistema sigue las directrices de construccin de aplicaciones, y ofrece componentes reutilizables y una base extensible para el desarrollo basado fuertemente en patrones de diseo. De esta manera, las aplicaciones se reducen en tamao y complejidad, teniendo todas la misma estructura interna (basada en una adaptacin del patrn MVC llamada Modelo2). El sistema de tiempo de ejecucin emplea diversos componentes del mundo de cdigo abierto, usando lo mejor de cada uno de ellos e integrndolos. Esta aproximacin ha facilitado enormemente el desarrollo, y emplea internamente dos frameworks Struts y Spring. Mdulos de integracin Los sistemas a construir dentro del mbito de la Administracin del Principado de Asturias presentan una fuerte componente de integracin con otros sistemas. Se han escrito adaptadores para los distintos sistemas corporativos existentes dentro de la organizacin, de manera que se simplifica y homogeneza enormemente las tareas de integracin siguiendo un patrn proxy. Estos mdulos solo estn disponibles para aquellos proyectos realizados para el Principado de Asturias. Es crucial que las aplicaciones desarrolladas posean un nivel de seguridad suficiente, y que esta seguridad pueda gestionarse centralmente desde los sistemas corporativos de seguridad. A este fin, se ha desarrollado toda una infraestructura de seguridad sobre estndares (X509, Java Authentication and Authorization Service, Web Services, etc.). Desde el punto de vista de la aplicacin, se trata de realizar una parametrizacin. Toda esta infraestructura es extensible. Dado que determinados proyectos se desarrollan por equipos externos sin acceso a la infraestructura del Principado de Asturias, se incluye un simulador de autenticacin, de manera que determinados escenarios pueden ejecutarse empleando un documento XML en local como repositorio de credenciales. Asimismo, esta infraestructura es extensible, de manera que pueden desarrollarse adaptadores a otros repositorios (LDAP, etc) en proyectos ajenos al Principado de Asturias. Las aplicaciones han de ser operadas en los distintos entornos, de manera que el personal de operaciones pueda mantener la

Sistema de tiempo de ejecucin

Seguridad

Operacin

3

Presentacin de openFWPA

aplicacin en funcionamiento. El framework posee una serie de herramientas que facilitan esta operacin, como pueden ser: Filtro de compresin. El framework proporciona un filtro de compresin de las comunicaciones, de manera que se minimice la comunicacin entre el servidor y el cliente. Manual de Operaciones. En este documento se describen las operaciones que pueden realizarse sobre la aplicacin desplegada. Configuracin. El framework posee un subsistema flexible de configuracin, de manera que las aplicaciones se aislan de los repositorios de configuracin. Auditora. Se proporciona funcionalidad para la generacin de pistas de auditora. Gestin de logs. El framework proporciona un potente sistema de logs, de manera que (por configuracin) puede enviarse los mensajes a una BD, a ficheros de texto, XML, HTML, etc. Esta configuracin puede cambiarse en caliente. Consola de Administracin. Las aplicaciones desarrolladas con el framework poseen una consola de administracin web para la modificacin de los distintos componentes. Mtricas de uso. Pueden habilitarse diversas mtricas de uso de la aplicacin, de manera transparente para las aplicaciones. Documentacin Con el framework se entrega toda la documentacin necesaria para el desarrollo y operacin de aplicaciones. Se entregan una aplicacin de ejemplo (con sus pruebas de rendimiento correspondientes) y una aplicacin en blanco, con la estructura de directorios creada. Existe un sitio de soporte para la resolucin de dudas, incidencias, etc. Este sitio web de soporte permite comunicar al equipo de mantenimiento del framework bugs detectados, etc. de manera que se pueda liberar una nueva entrega (release) con los defectos corregidos. A tal efecto, se crea un usuario para cada equipo de desarrollo que demande soporte, para que puedan realizar un seguimiento consistente de las incidencias que puedan surgir.

Soporte

Empaquetamiento de openFWPAEl conjunto completo de entregables que puede acompaa al openFWPA es el que sigue. En algunas distribuciones, pueden no estar disponibles determinados elementos: Manual del desarrollador. (Este documento). Manual de operaciones. Manual de configuracin de la seguridad. Directrices de aceptacin de aplicaciones J2EE del Principado de Asturias.

4

Presentacin de openFWPA

Herramientas del desarrollador. Gua de estilo del lenguaje Java Gua de estilo del lenguaje JSP. openFWPA. (binarios) Aplicacin de ejemplo: SampleApp (binarios y fuentes) Aplicacin en blanco: App Blank (binarios y fuentes)

Requerimientos tcnicos y de sistemaPara la correcta ejecucin de las aplicaciones que utilizan el openFWPA es necesario disponer de los siguientes elementos: Libreras de soporte (Ver Lista de componentes de terceras partes) Servidor de aplicaciones Oracle10G OC4J (versin 10.1.2) con Java JRE 1.4.2 Determinadas partes de la aplicacin requieren adems, los siguientes componentes: a. Seguridad: Certificado Raz de la Fabrica Nacional de Moneda y Timbre (FNMT) Fichero de certificados (cacerts) en la mquina virtual

Lista completa de funcionalidadesLas funcionalidades soportadas por el openFWPA son las siguientes: Extensin del framework Struts [8] con una coleccin propia de clases Action. Acceso a datos a travs de objetos DAO. Automatizacin de la carga de consultas SQL desde ficheros de propiedades. Plantillas (Tiles) para la creacin rpida de pginas JSP. Hojas de estilos con el look & feel del Principado de Asturias. Facilidades para la generacin de informes en formato PDF. Etiquetas JSP para la inclusin de listas, barras de navegacin, fechas y calendarios en las pginas web. Integracin de formularios (ActionForm) con entidades (ValueObject) de la aplicacin. Utilidades para la gestin de tablas de datos en formato {atributo, valor}. Facilidades para la obtencin de listas paginadas como resultado de consultas. Herramienta para la generacin automtica de mens. 5

Presentacin de openFWPA

Infraestructura para pruebas unitarias. Infraestructura para pruebas unitarias en contenedor. Integracin de una consola de monitorizacin y gestin basada en el estndar JMX [19]. Jerarqua propia de excepciones. Monitorizacin y control integrado de errores Sistema de configuracin centralizado. Sistema de inicializacin y arranque configurable. Componentes para el acceso a pools de conexiones. Sistema de logging con varios niveles. Gestin de logging desde la consola de administracin. Monitor de rendimiento. Sistema de monitorizacin para las clases Action. Generacin de estadsticas de acceso a las aplicaciones. Generacin de estadsticas de excepciones no controladas en las aplicaciones. Componente para monitorizar el estado del sistema sobre el que corre la aplicacin. Infraestructura para filtros gestionados en caliente. Filtro para compresin GZIP. Inicializacin de componentes configurables. Filtro de seguridad para integracin con el Mdulo de Autenticacin del SAC del Principado de Asturias. Conexin con backends del Principado de Asturias (Claves, Terceros, Siebel, Mdulo Comn de SMS).

Lista de componentes de terceras partesEl framework de desarrollo del Principado de Asturias incorpora componentes de terceras partes. Las aplicaciones que se construyan sobre el framework han de utilizar las versiones enumeradas en

6

Fundacin Apache. Struts Menu sourceforge.net struts-menu.jar struts-menu.tld struts-menu-el.tld Presentacin de openFWPA 2.2 Librera para facilitar el desarrollo de mens en aplicaciones web. para la automatizacin de las operaciones de compilacin, construccin y despliegue de proyectos. Conjunto herramientas libreras Java. Servidor aplicaciones Oracle. de y de de

Tabla 1.1. Componentes necesarios para la ejecucin del openFWPA Apache Ant ASF 1.6.1 Herramienta

Java SDK

Sun Microsystems

1.3.1_11 - 1.4.x

Oracle AS9i

Oracle

oc4.jar admin.jar

9.0.3.0.0 - 10.1.2

JMX Reference Sun Microsystems jmxri.jar Implementation jmxgrinder.jar jmxtools.jar

1.0

Librera para la gestin dinmica de aplicaciones Java (slo es necesaria con OC4J 9.0.3). Sistema de Gestin de Bases de Datos. Herramienta para la generacin de informes en diferentes formatos: PDF, HTML, XLS, CSV y XML. Proporciona soporte para la conexin bajo protocolo SSL. Proporciona soporte para autentificacin y autorizacin. Proporciona soporte para uso de protocolos de encriptacin. Extensiones JDBC para la compilacin con versin 1.3.1_11 de la JDK. Framework IoC. Librera de monitorizacin y medicin de tiempos Librera de AJAX

Base de Oraclae

Datos Oracle sourceforge.net jasperreports.jar

8.1.7.3 0.6.0

Jasper Reports

JSSE

Sun Microsystems jsse.jar

1.0.3_03

JAAS

Sun Microsystems jaas.jar

1.0

JCE

Sun Microsystems jce.jar 1.2.2 local_policy.jar sunjce_provider.jar US_export_policy.jar Sun Microsystems jdbc2_0-stdext.jar 2.0

JDBC

Spring Java Monitor API

Spring Framework spring.jar JAMon API JAMon.jar

1.2.6 1.1.2

Direct Web Get Ahead Remoting (DWR)

dwr.jar

1.0

7

Presentacin de openFWPA

Arquitectura de referenciaEl framework de desarrollo del Principado de Asturias hace un uso intensivo de Patrones de Diseo. A fin de lograr una homogeneidad efectiva en las aplicaciones realizadas en el marco del Principado de Asturias, se propone una Arquitectura de Referencia que describe la arquitectura de las aplicaciones desarrolladas con el openFWPA. El uso de esta arquitectura de referencia es obligatorio, al ser parte de las Directrices de Aceptacin de aplicaciones. Una arquitectura de referencia es una descripcin de los elementos de los que se compone una aplicacin, y de las relaciones entre estos elementos. Manejar arquitecturas de referencia es tremendamente beneficioso, ya que permite: Homogeneizar las aplicaciones. Al usar la arquitectura de referencia, las aplicaciones son estructuralmente iguales, cambiando slo los elementos en concreto, pero no la forma que tienen de relacionarse. Esto tiene un impacto directo en el esfuerzo en desarrollo y mantenimiento. Extender las mejores prcticas y tecnologas. La arquitectura de referencia ha de mantenerse, de manera que se vayan introduciendo cambios basados en cambios tecnolgicos o en el establecimiento de mejores prcticas. La arquitectura de referencia J2EE propuesta se basa en el patrn Modelo2 sobre una disposicin en capas, y puede verse en el siguiente diagrama:

Figura 1.2. Arquitectura de Referencia

El concepto de separacin en capas est claramente definido en esta arquitectura de referencia: La comunicacin entre capas slo puede existir a travs de a) interfaces, b) Objetos de Datos (Value Objects). Los elementos de la arquitectura de referencia pueden verse en la siguiente tabla:

8

Presentacin de openFWPA

Tabla 1.2. Capas de la Arquitectura de Referencia de openFWPAElemento Capa de Acceso a Datos Descripcin Patrones relevantes

Encapsula toda la lgica de acceso Data Access Object Proxy Value a datos. Asimismo, encapsula los Object Absctract Factory accesos a sistemas remotos. Representa las entidades del Value Object modelo, como objetos JavaBean y sin lgica de negocio. Implementa toda la lgica de Business Delegate Faade negocio, implementada como procesos sobre la capa de Acceso a Datos. Oculta toda la comlejidad a la capa superior. Transforma eventos en la vista a MVC Command eventos en el modelo, y viceversa. Presenta el modelo al usuario, MVC y comunica sus acciones al controlador Permiten filtrar las peticiones de Chain Of Responsibility los clientes, a fin de propor-cionar autenticacin, asertos a toda la aplicacin, compresin de datos, etc. Gestiona pools de conexiones, a fin de no crear una conexin por cliente a Base de Datos u otros repositorios. Gestiona la sesin de los clientes, de manera que desconecta a los inactivos. Representa cualquier sistema a integrar a travs de un interfaz bien definido.

Capa de Objetos de Datos

Capa de Negocio

Capa de Controlador Capa de Vista

Filtro web

Datasource

Gestin de sesin

Sistema externo

Dado el nmero de libreras que implementan el patrn MVC, tiene todo el sentido usar alguna de ellas en vez de implementarlo para un proyecto. El openFWPA da soporte para este patrn. Caso de ser una aplicacin J2EE no construida sobre el openFWPA, debiera hacer uso del framework Struts. Una vez fijada la arquitectura de referencia, se ha acudido al mundo del software libre buscando implementaciones de los elementos reseados en ella. Por ejemplo, para la capa del controlador se ha optado por usar una implementacin de un proyecto del software libre en vez de proceder a realizar una implementacin propia. Asimismo, el openFWPA ofrece soporte en la implementacin de todas las capas, desde acceso a datos hasta presentacin. En general, prcticamente todas las libreras utilizadas por el openFWPA provienen de la Apache Software Foundation (ASF) [5] y tambin pueden ser consideradas como estndares de facto en sus respectivas reas. Las libreras proporcionadas por la ASF, son de cdigo libre y abierto, estn mantenidas por un nutrido grupo de desarrolladores de todo el mundo y son muy habituales en proyectos de desarrollo (principalmente Java) de cualquier ndole.

9

Presentacin de openFWPA

Desarrollo de aplicacionesAntes de comenzar el desarrollo de una aplicacin web con el openFWPA, es importante tener en cuenta las directrices y recomendaciones que se indican en este apartado.

Estructura de directoriosLas aplicaciones definirn una estructura de directorios siguiendo la plantilla: build, target: Contendr los .class generados para el proyecto. db: Contendr los scripts de creacin de la base de datos o la propia base de datos. En caso de darse soporte a ms de una base de datos o ms de una versin, ha de crearse un directorio para cada una de las BD. config: Contendr los ficheros necesarios para la creacin del fichero EAR necesario para desplegar la aplicacin en el contenedor J2EE (como por ejemplo application.xml), as como los ficheros con la informacin necesaria para la configuracin de recursos que necesitar la aplicacin (por ejemplo DataSources. En este caso podra incluirse un fichero data-sources.xml con la informacin a aadir al fichero data-soruces.xml del contenedor J2EE para la definicin de los mismos). src: Este directorio contendr dos subdirectorios: java: Contendr los ficheros de cdigo fuente Java y de recursos de la aplicacin, y el fichero build.xml. webapp: pages: Contendr el resto de ficheros de la aplicacin: pginas HTML, JSP, imgenes, hojas de estilo CSS, etc. WEB-INF: Contendr los ficheros de configuracin XML (web.xml, struts-config.xml, validation.xml, etc.), DTDs y TLDs. lib: Contendr las libreras que ser necesario distribuir con la aplicacin, puesto que no estarn incluidas en el contenedor J2EE. ejbApp: META-INF: Contendr el fichero de MANIFEST.MF, as como los ficheros necesarios para el despliegue de EJBs en caso de que sean utilizados en la aplicacin. Estos ficheros sera ejbjar.xml, orion-ejb-jar.xml, y cualquier otro fichero que fuera necesario. dist: Se trata de un directorio temporal empleado para la generacin de los jars, ears, necesarios para el proyecto. javadoc: Contiene el javadoc generado con el target de Ant incluido al efecto. Como ejemplo se muestra la estructura de la aplicacin de ejemplo (Sample App):

Figura 1.3. Estructura de directorios del proyecto Sample App.

10

Presentacin de openFWPA

Compilacin y despliegue del sistemaPara la compilacin y el despliegue de aplicaciones se utilizar la herramienta Ant [10] (http:// ant.apache.org). Ant es una herramienta de construccin basada en Java similar al clsico Make. Los ficheros de configuracin de Ant estn escritos en XML y tienen por nombre build.xml. Cada uno de ellos contiene un project y al menos un target (el default, que ser el que se ejecutar si no se especifica ningn otro en la llamada a Ant). Cada uno de ellos ser el encargado de la compilacin, empaquetado, despliegue en el contenedor J2EE, etc. de la aplicacin. Con las aplicaciones en blanco (Blank App) de ejemplo (Sample App) de distribuye un fichero build.xml. Los targets ms relevantes son los siguientes: all (default): Realiza lo mismo que make-ear. compile: Compila los ficheros fuente Java de la aplicacin. javadoc: Genera la documentacin Javadoc. test.unit: Lanza las pruebas unitarias utilizando JUnit [11]. Busca en los paquetes de cdigo fuente las clases cuyo nombre termine en Test (segn el convenio de nombrado de JUnit), ejecuta las pruebas y genera informes con los resultados de las mismas en formato HTML. make-war: Genera un fichero WAR (Web Application Archive) con la aplicacin, necesario para la posterior generacin del fichero EAR. make-ear: Genera un fichero EAR (Enterprise Application Archive) con la aplicacin, que podr ser desplegado en un contenedor J2EE. deploy.localhost: Despliega la aplicacin en el contenedor J2EE instalado en la mquina local. undeploy.localhost: Desinstala la aplicacin del contenedor J2EE instalado en la mquina local. deploy.desa: Despliega la aplicacin en el contenedor J2EE instalado en la mquina cuya IP est contenida en la variable desa.test.host. undeploy.desa: Desinstala la aplicacin del contenedor J2EE instalado en la mquina cuya IP est contenida en la variable desa.test.host. new: Crea un nuevo proyecto a partir del proyecto actual, para ello es necesario pasarle el nombre del proyecto nuevo mediante el parmetro -Dapp.name=proyectoNuevo. Esto copiar el proyecto actual, al mismo nivel de directorio y sustituye el nombre del proyecto en los ficheros de configuracin que sea posible.

Pruebas unitariasEs muy recomendable la implementacin de pruebas unitarias, al menos para todos los componentes crticos de la aplicacin. Es tambin recomendable, en aplicaciones web, implementar pruebas unitarias para todos los objetos de acceso a datos (DAO). Para facilitar esta tarea se puede utilizar la librera dbUnit y la clase PrincastDatabaseTestCase, suministrada en el openFWPA.

Instalacin de la aplicacin de ejemplo (Sample App)Para instalar la aplicacin de ejemplo (Carrito) se deben seguir los pasos descritos en los siguientes apartados.

11

Presentacin de openFWPA

Configuracin de la seguridadPara habilitar la seguridad en la aplicacin de ejemplo deben seguirse los pasos especificados en el documento [Manual de Operaciones].

Configuracin de la base de datosEsta aplicacin utiliza una base de datos MySQL. Se ha de copiar el driver JDBC para MySQL (mysqlconnector-java-3.0.12-production-bin.jar) en el directorio {OC4J_HOME}/j2ee/ home/applib. Para instalar la base de datos es necesario ejecutar la tarea ANT createdb incluida en build.xml (quiz sea necesario cambiar el usuario y contrasea para conectarse a MySQL). A continuacin se edita el fichero data-sources.xml, que se encuentra en el directorio {OC4J_HOME}/j2ee/home/config, y se le define un nuevo origen de datos para la aplicacin aadindole el siguiente cdigo al fichero: Si el servidor de base de datos no se encuentra en la misma mquina que OC4J, sustituir localhost por el nombre o la direccin a dicha mquina. Hacer que los campos username y password coincidan con los de algn usuario de MySQL con privilegios para acceder a la base de datos. Llegados a este punto es necesario re iniciar el OC4J. Una vez re iniciado ejecutar el target deploy.localhost del fichero build.xml, si se ejecuta desde la mquina donde est instalado OC4J, o deploy.desa si se trata de una mquina remota (en este caso cambiar la variable desa.test.host del fichero build.xml debe apuntar a la IP del servidor). Una vez completado el proceso de instalacin, la aplicacin estar disponible desde la direccin http:// localhost:8888/carrito. Para tener acceso al sistema puede utilizar como parmetros de autenticacin los siguientes: Identificador de usuario: cliente. Contrasea: cliente.

12

Captulo 2. Arquitectura Modelo -VistaControlador con openFWPAMVCEl patrn MVC Model 2 puede ser visto como una implementacin del lado del servidor del patrn de diseo Modelo-Vista-Controlador (MVC). Este patrn describe cmo debe implementarse una aplicacin con tres elementos bsicos: Modelo Vista (Presentacin) Se trata de las entidades del dominio del problema, implementadas con total independencia de su presentacin. Esta capa se encarga de mostrar las entidades del modelo al usuario. En el openFWPA, se implementa esta capa sobre la tecnologa JSP. En esta capa, no hay lgica de negocio Traduce eventos/operaciones realizadas sobre la vista a invocaciones de mtodos en el modelo. En el openFWPA se emplean servlet para esta capa. Bsicamente, en esta capa se procesa la peticin de entrada de un cliente, se accede a las entidades del modelo y se coloca cualquier elemento a pasar a la vista en algn mbito de aplicacin (request, session, etc.). Asimismo, dispara un evento que se mapear a una pgina jsp que mostar los resultados.

Controlador

Esta estrategia da lugar a una separacin entre presentacin y contenido, producindose una clara definicin de los roles y responsabilidades de los desarrolladores y diseadores de pginas, en los equipos de programacin. De hecho, cuanto ms compleja sea la aplicacin, mayores son los beneficios de utilizar la arquitectura de Modelo 2.

Figura 2.1. Modelo Vista Controlador

El proyecto Struts de la Apache Software Foundation es una implementacin del MVC Modelo 2. El ncleo del framework Struts es una capa de control flexible basada en tecnologas estndar como servlets, JavaBeans, ResourceBundles y XML, as como varios paquetes del proyecto Jakarta Commons. (http://jakarta.apache.org/commons). Struts suministra su propio componente controlador (Controller) y se integra con otras tecnologas para proporcionar el Modelo y la Vista. Para el Modelo, Struts puede interactuar con tecnologas de acceso a datos estndar, como JDBC y EJB, as como con la mayora de paquetes de terceras partes, como Hibernate, iBATIS, u Object Relational Bridge. Para la Vista, Struts trabaja bien con JSPs, incluyendo JSTL y JSF, as como con Velocity, XSLT y otros sistemas de presentacin. Actualmente, el framework del Principado de Asturias slo da soporte a JDBC y JSP. La figura siguiente muestra como es el ciclo peticin-accion-jsp del framework Struts:

Figura 2.2. Ciclo peticin-accin-jsp de Struts

Para obtener informacin ms detallada sobre Struts consultar el tutorial que se adjunta en la documentacin de openFWPA.

13

Arquitectura Modelo -VistaControlador con openFWPA

Figura 2.3. Estructura de capas de las aplicaciones web con openFWPA

Desarrollo de la VistaAspecto corporativo de las aplicaciones del Principado de AsturiasLas aplicaciones construidas bajo los estndares del openFWPA de desarrollo J2EE se integrarn en el portal del Principado de Asturias ya existente (http://www.princast.es) tanto en internet como intranet. Por lo tanto debe respe-tarse el look & feel del portal en la medida de lo posible. Se establece como premisa la construccin de un look & feel ligeramente diferenciado, pero que a su vez respete la imagen corporativa del Principado de Asturias. Para lograr este objetivo, se ha partido de la hoja de estilos general.css propiedad del Principado de Asturias, y en base a ella se han desarrollado nuevas hojas de estilos que establezcan el aspecto de la vista de las aplicaciones construidas bajo el framework. Estas hojas de estilo permiten separar las instrucciones de formateo (posicin, color, tamao, etc) del cdigo HTML generado por la aplicacin. Esto ofrece una mayor sencillez al desarrollo y una mayor adaptabilidad al cambio - en caso de ocurrir cambio de imagen corporativa, se minimiza el mbito del cambio unas pocas hojas de estilo CSS.

Figura 2.4. Aspecto corporativo del portal princast.es

Figura 2.5. Aspecto de la aplicacin de ejemplo (Sample App)

Cascading Style Sheets (CSS)La aplicacin ejemplo (Sample App) maneja 5 hojas de estilos CSS. Debe tomarse esta implementacin como referencia de posicionamiento y formateo de textos, bloques, prrafos, etc. En general, se prohbe el uso de directrices de estilo dentro del cdigo HTML. Cualquier estilo o posicionamiento de bloques deber ir contenido en una hoja de estilos CSS.

Hojas de estilo en la aplicacin de ejemplo (Sample App)Las hojas de estilo son enlazadas a travs de la pgina head.jsp. En caso de necesitar nuevas hojas de estilo, se utilizar este componente para hacerlo, de forma que esta tarea quede totalmente centralizada. El cdigo actual de la pgina head.jsp es:

14

Arquitectura Modelo -VistaControlador con openFWPA

Las hojas de estilo manejadas por la aplicacin de ejemplo SampleApp son: general.css proviene de la hoja de estilos de referencia con el mismo nombre, incluida en el portal princast.es. Ha sufrido ligeras modificaciones para adaptarse a las necesidades del framework PA. Establece los estilos para los elementos ms comunes de una pgina HTML (enlaces, tablas, celdas, prrafos, listas, textos) define el posicionamiento de los bloques dentro de la pgina. La estructura de una pgina se ha definido en base a bloques, de los cuales no todos tienen porque aparecer, segn las necesidades de pgina. Para ms informacin, vase los apartados correspondientes a los layouts tiles. hoja de estilos para el estilo de los componentes de las etiquetas de princast para las pginas hoja de estilos para el tabbed menu. hoja de estilos exclusiva para el aspecto de las tablas generadas por el tag displaytag (Ver ???). El displaytag genera listas paginadas. Hoja de estilo para la ubicacin y formato de componentes especficos de la aplicacin de ejemplo.

position.css

princast-ui.css

tabs.css displaytag.css

carrito.css

Estos ficheros CSS definen los estilos para aplicaciones de tramitacin. Adems de estas hojas de estilo, se incluyen en el openFWPA ficheros CSS que definen estilos para aplicaciones de portal. Estas hojas de estilo son: componentsPortal.css, displaytagPortal.css y carritoPortal.css. Segn lo expuesto, el cdigo de las pginas JSP debe reducirse al mnimo imprescindible, obteniendo as un cdigo mucho ms claro y mantenible. Ejemplo: cdigo JSP del cuerpo de una pgina de la aplicacin Sample App: 2. En el mapeo de la action compuesta (DispatchAction) que tiene ms de una entrada, dejar la definicin de input vaca. 3. Para cada mtodo de la Action, definir un forward utilizando el siguiente convenio de nombrado: Input. Actions para Listados Un subconjunto especial de Actions son aquellas que no tienen ninguna lgica de negocio especial. Su nico objetivo es obtener un conjunto de objetos para ser mostrados. En funcin de si el listado se mostrar en una pgina HTML o en un PDF, se utilizar la PrincastListAction o la PrincastPDFReportAction.

Figura 2.10. Esquema de las Actions para listados

PrincastListAction Si una Action tiene nicamente como propsito obtener un listado, se puede utilizar la PrincastListAction. No hace falta sobrescribir ningn mtodo del ciclo de vida de esta Action, basta con implementar el mtodo getContentList() y devolver el objeto (o coleccin de objetos) que sern mostrados. El objeto devuelto quedar registrado en sesin, bajo la clave que se especifique en el atributo parameter, en el mapeo de ese action, en el fichero struts-config.xml.

28

Arquitectura Modelo -VistaControlador con openFWPA En caso de que no se especifique ningn valor para el atributo parameter se disparar una excepcin de tipo PrincastActionProcessException Esta Action permite realizar paginacin sin necesidad de reejecutar la lgica de negocio (Ver Paginacin sin reejecucin de la lgica de negocio.). PrincastPDFReportAction Esta Action permite obtener un listado en formato PDF utilizando las utilidades para generacin de informes de openFWPA (Ver Generacin de Informes). Para implementar una Report Action, basta con redefinir el mtodo getReport(), devolviendo un objeto proveedor de contenido PDF (PDFProvider), por ejemplo, un objeto PrincastReport o PrincastMultiReport. Habitualmente, los informes compilados (en formato .jasper) se almacenan juntos en una misma carpeta. Para facilitar la carga de los ficheros .jasper, la clase PrincastPDFReportAction implementa el mtodo loadReport() que devuelve el InputStream correspondiente al fichero del informe. Este mtodo, supone que todos los informes se encuentran en la misma carpeta (por defecto: / WEB-INF/reports). Para buscar los informes en una carpeta distinta, se debe sobrescribir el mtodo getRelativePathToReportFolder(). PrincastDispatchPDFReportAction Este Action es la versin dispatch de la PrincastPDFReportAction, permite definir varios mtodos para obtener el PDFProvider, por ejemplo, si el parmetro pasado al Action es myMethod se ejecutara el mtodo myMethodGetReport. Para ms informacin, consultar el Javadoc de la clase y la Actions Compuestas (Dispatch). PrincastXMLAction Este Action permite servir contenido XML. Para servir una respuesta XML, basta con implementar el mtodo getXMLProvider, que retorna un proveedor de contenido XML. El proveedor de contenido XML, ser una clase que implemente el interfaz XMLProvider, el cual, obliga implementar el mtodo writeXML(Writer writer). Donde simplemente se escribir el XML, a servir. PrincastDispatchXMLAction Este Action es la versin dispatch de la PrincastXMLAction, permite definir varios mtodos para obtener el XMLProvider, por ejemplo, si el parmetro pasado al Action es myMethod se ejecutara el mtodo myMethodGetXMLProvider. Para ms informacin, consultar el Javadoc de la clase y la Actions Compuestas (Dispatch).

Action FormsEl openFWPA dispone de una clase base para el desarrollo de los beans de formulario. Se trata de la clase PrincastActionForm. Entre las propiedades destacables de esta clase se encuentran: mutable Para evitar que una PrincastActionForm sea rellenada de forma automtica al hacer un forward entre diferentes acciones, establezca el valor de mutable a true y asegrese de que todos los setters comprueban el valor de dicha propiedad (if (isMutable()) this.field = field;). propiedad de la clase Locale. Si la instancia de la form es mutable, se le asigna la locale de sesin de Struts siempre que se llame a reset(). Para actualizar el locale de la sesin debe usarse putSessionLocale().

locale

29

Arquitectura Modelo -VistaControlador con openFWPA En cuanto a los mtodos: setSessionLocale(Locale) getSessionLocale() setMutable(boolean) isMutable() reset(ActionMapping, HttpServletRequest) Establece el atributo locale. Devuelve el atributo locale. Establece el valor del atributo mutable. Devuelve el valor del atributo mutable. Las subclases que deseen resetear el valor de sus atributos deben comprobar el valor de ste atributo (if (isMutable()) ...)

resetSessionLocale(HttpServletRequest) locale al valor que tenga el objeto locale Cambia el atributo almacenado en la sesin e la peticin en curso bajo la clave Globals.LOCALE_KEY. putSessionLocale(HttpServletRequest) Cambia el atributo Globals.LOCALE_KEY de la sesin por el atributo locale o por el Locale por defecto si el atributo locale es null. getLocaleDisplay() setLocaleDisplay(String) Devuelve el Locale del usuario o el Locale por defecto. Cambia el atributo locale a un cdigo de lenguaje ISO dado. Recibe como atributo un String con el cdigo del pas. Comprueba si el String que se le pasa es null o la cadena vaca. Devuelve un Map con las propiedades de esta PrincastActionForm. Se usa el mtodo PropertyUtils.describe(). Sobrescriba el mtodo si considera que alguna propiedad no debera ser mostrada de este modo, o si un nombre de una propiedad debera ser cambiado. Este mtodo devuelve las propiedades pblicas. Rellena las propiedades de la clase con las del PrincastValueObject que se le pasa como parmetro. Se proporciona una implementacin vaca de este mtodo para que sea sobrescrito.

isBlank(String) describe()

set(PrincastValueObject)

populate(PrincastValueObject) cargar los datos del formulario sobre un Value Object. Este Permite mtodo recibe como parmetro el Value Object sobre el que se van a cargar los datos. Devuelve una referencia al objeto que contiene todos los datos del formulario. Para la definicin de ActionForms dinmicos, se incluye en el openFWPA una clase base: PrincastDynaActionForm. Se incluye adems una clase base para los formularios que van a ser utilizados por dispatch actions: PrincastDispatchActionForm. Este tipo de formularios incluyen un campo (method) para seleccionar el mtodo de dispatch que se ejecutar para procesarlo. Las clases para la implementacin de formularios se encuentran en el paquete: es.princast.framework.web.form. La clase LookupDispatchForm permite disponer de formularios con ms de un botn de submit. Para obtener ms informacin acerca de este tipo de forms, vase el apartado PrincastLookupDispatchAction en la seccin dedicada a las Actions.

30

Arquitectura Modelo -VistaControlador con openFWPA

Desarrollo de lgica de negocioEs importante disponer de un buen diseo tcnico antes de programar la lgica de negocio. En este rea intervienen dos tipos de objetos: Business Delegates y Business Managers. Los objetos Delegate se encargarn de crear y gestionar los objetos de lgica de negocio y proporcionarn un interfaz, para la aplicacin web, de los mtodos de negocio. Los objetos "Manager", se encargarn de implementar la propia lgica de negocio.

Figura 2.11. Estructura de la capa Modelo

Utilizando esta estructura, se puede modificar la implementacin del servicio sin que sea necesario modificar el resto de la aplicacin. Un ejemplo de implementacin puede verse en la aplicacin de ejemplo (Sample App). En ningn caso la lgica de negocio ha de tener dependencias con el protocolo http (como por ejemplo hacer uso de la sesin), ya que sus servicios han de poder reutilizarse desde cualquier otro entorno (como Web Services, JMS, etc.). Las nicas dependencias al protocolo concreto de acceso han de estar en las acciones (View Adapters y Actions).

Service LocatorEl patrn de diseo Service Locator permite encapsular, en una clase, la localizacin y acceso a objetos de servidor. El openFWPA incluye un componente que implementa este patrn: la clase ServiceLocator. El ServiceLocator proporciona los siguientes mtodos para la bsqueda de objetos: getDataSource() Permite instanciar un DataSource definido en el servidor (En OC4J, en el fichero data-sources.xml) Obtiene un interfaz ejbHome (local) para la creacin de un EJB. Obtiene un interfaz ejbHome (remoto) para la creacin de un EJB. Obtiene una cola de mensajes JMS.

getLocalHome() getRemotelHome() getQueue()

getQueueConnectionFactory() Obtiene una factory de conexiones a colas de mensajes JMS. getTopic() Obtiene un Topic JMS.

getTopicConnectionFactory() Obtiene una factory de conexiones a Topics JMS

Session EJBsHabitualmente, es necesario, cuando se trabaja con Session EJBs, gestionar, para cada uno de ellos, de forma especfica el mantenimiento del contexto de la sesin (SessionContext). Para evitar la obligacin de implementar los mtodos de mantenimiento de la sesin, se ha incluido en el openFWPA, una clase base para los Session EJBs: PrincastSessionEJBTemplate. Esta clase implementa los mtodos setSessionContext() y unsetSessionContext(), dejando la instancia del contexto en la variable protegida context.

Value ObjectsLos objetos de datos (Patrn Value Object), en las aplicaciones desarrolladas sobre el openFWPA, deben implementar el interfaz PrincastValueObject.

31

Arquitectura Modelo -VistaControlador con openFWPA

Figura 2.12. Diagrama de Value Objects

Esta interfaz define el mtodo toXML() que permite ver una descripcin del objeto en formato XML. Para facilitar la implementacin de Value Objects, se han includo dos clases base: BasePrincastVO, que realiza una implementacin por defecto para el mtodo toXML() basada en reflectividad, y BasePrincastLazyLoadingVO, que debe ser utilizada si los Value Objects de la aplicacin se van a usar en conjuncin con Lazy loading de los Value Objects. Ambas clases extienden la clase AbstractBasePrincastVO, que define otro mtodo de utilidad: toPropertyBeans(). En la clase BasePrincastVO, este mtodo permite "desmenuzar" un VO, mapendolo a una lista de objetos de tipo PropertyBean. El nombre de la propiedad se asignar al campo "value" del PropertyBean. El valor se asignar al campo "label". Si alguna de las propiedades del VO es un objeto compuesto (una lista, una tabla, un array u otro VO) estos sern, a su vez, descompuestos. Se seguir el siguiente convenio de nombrado para las propiedades: Propiedades de tipo VO (PrincastValueObject) Si una propiedad es de tipo PrincastValueObject, el nombre de cada una de sus propiedades se mapear siguiendo el patrn: . El nombre de este tipo de propiedades se compone como sigue: [] El nombre de este tipo de propiedades se compone como sigue: ().

Propiedades de tipo List o arrays

Propiedades de tipo Map

Tambin se ha empaquetado en el Framework un tipo de Value Object muy habitual: PropertyBean. Este objeto es un Value Object que almacena pares {valor-etiqueta}. La clase PropertyBean tambin dispone de un mtodo esttico: pupulateList() que recibe como parmetro un Map y lo transforma en una lista de PropertyBeans. Debe tenerse en cuenta que la clase BasePrincastLazyLoadingVO tiene implementaciones vacas para los mtodos toPropertyBeans() y toXML(), por lo que debern ser sobreescritos por los Value Objects de la aplicacin en caso de necesitar un comportamiento diferente.

ExcepcionesEl openFWPA dispone de su propia jerarqua de excepciones. La poltica general de manejo de excepciones en el openFWPA es que se utilicen excepciones Runtime (no manejadas estticamente).

Figura 2.13. Jerarqua de Excepciones

La clase base para la creacin de excepciones es PrincastException. Existen dos ramas en esta jerarqua de excepciones runtime: excepciones de sistema (PrincastSystemException), reservadas para el openFWPA y sus componentes y excepciones de modelo (PrincastModelException), que son disparadas por las excepciones.

32

Arquitectura Modelo -VistaControlador con openFWPA Como norma general, las aplicaciones no berin nunca extender las excepciones del sistema. Siempre deben extender PrincastModelException. Adems, el openFWPA tambin tiene una clase base para la creacin de excepciones gestionadas: PrincastRequiredHandlingException. La excepcin DeprecatedAPIException se reserva para ser disparada desde mtodos deprecados en los que no sea posible implementar una lgica alternativa.

UtilidadesJunto con las excepciones, se incluye una clase (ToXMLExceptionHelper) auxiliar para facilitar el fromateo de las mismas y su traduccin a XML.

Otras clases de utilidadJunto a las Actions, en el paquete web se incluyen algunas clases de utilidad para los componentes de la capa de aplicacin.

PrincastMessageFmtterClase para facilitar el formateo de cadenas de caracteres (mensajes, etc). Esta clase permite: Reemplazar tokens en un String. Mtodo replace(). Formatear un mensaje, siendo ste una cadena con parmetros del tipo {0}, {1}, {n}. Este mtodo (format()) recibir como parmetros una cadena de texto y un array de objetos. El objeto en la posicin 0 se introducir en lugar de la subcadena {0} y as sucesivamente.

PrincastUtilsContiene mtodos de utilidad general. Actualmente nicamente implementa el mtodo normalizePath() que tiene como objetivo normalizar los paths en los distintos sistemas operativos.

ParameterCasterClase de utilidad para la capa web. Permite traducir el tipo (casting) de los parmetros que se reciben de una request http.

ServletPathUtilsClase de utilidad del paquete web que permite gestionar paths de peticiones http. Los mtodos que define son: match() Valida si un path se ajusta a un patrn URL (url-pattern) determinado. Obtiene el path relativo a partir de un path absoluto. A partir de una request, obtiene la URL solicitada completa, incluyendo los parmetros GET.

extractRelativePath() getCompleteURL()

getURLParametersSeparator() partir de una URL, determina si los parmetros que se vayan A a aadir a continuacin se preceden de un carcter ? &,

33

Arquitectura Modelo -VistaControlador con openFWPA en funcind e si dicha URL ya tena, o no, parmetros GET anteriormente.

DateDecoratorClase que facilita la escritura de fechas y horas con un formato determinado. Esta clase implementa el patrn Decorator sobre la clase java.util.Date, sobrescribiendo su mtodo toString(). La clase es.princast.framework.core.util.DateDecorator permite definir el patrn de formato que se aplicar al obtener la representacin textual de la fecha utilizando el mtodo Date.toString(). Adems, tambin define los patrones para los formatos de fecha ms comunes: /** * Formato corto para las fechas tomando como separador el caracter /. */ public static final String SHORT_DATE = "dd/MM/yyyy"; /** * Formato corto para las fechas tomando como separador el caracter -. */ public static final String SHORT_DATE_DASH = "dd-MM-yyyy"; /** * Formato para mostrar slo horas, minutos y segundos. Las horas varan en * el rango 0..24. */ public static final String ONLY_TIME = "HH:mm:ss"; /** * Formato largo para la fecha, tomando como caracteres de separacin el * caracter / para da, mes, ao y el caracter : para horas, minutos y * segundos. */ public static final String LONG_DATE = "dd/MM/yyyy HH:mm:ss"; /** * Formato largo para la fecha, tomando como caracteres de separacin el * caracter - para da, mes, ao y el caracter : para horas, minutos y * segundos. */ public static final String LONG_DATE_DASH = "dd-MM-yyyy HH:mm:ss";

PrincastPathResolverEl objetivo del PrincastPathResolver es ofrecer, al programador de aplicaciones, un punto centralizado para resolver paths (a recursos) uniformemente. Este objeto (que implementa el patrn Singleton) define los siguientes mtodos: resolvePath(path) resolveToFile(path) Resuelve un path, que se especifica por parmetro, devolviendo el path absoluto. Resuelve un path, devolviendo el objeto File correspondiente.

34

Arquitectura Modelo -VistaControlador con openFWPA resolveToStream(path) Resuelve un path, devolviendo un stream de lectura sobre el recurso que se halle en dicho path. Si no encuentra ninguno, dispara una FileNotFoundException.

Existen varios tipos de "path resolvers" en el openFWPA, en funcin del tipo de aplicacin. En general, se puede asignar cualquier tipo de "path resolver" definido por el usuario. Para ello, basta con extender la clase PrincastPathResolver y utilizar el mtodo PrincastPathresolver.registerResolver(). Los resolvers implementados en el openFWPA son: DefaultPathResolver Implementacin por defecto. Resuelve paths absolutos y relativos al classpath y al "working dir" de la aplicacin. Implementacin por defecto en aplicaciones web (siempre que utilicen el PrincastStartupListener). Resuelve paths absolutos y relativos al classpath y al directorio de despliegue de la aplicacin.

WebAppPathResolver

PrincastOSCacheInterceptorEsta clase permite a travs de Spring y OSCache, realizar cacheos transparentes de las llamadas a cualquier mtodo de cualquier bean de Spring. Esto es til, por ejemplo para cachear las llamadas al sistema de Genricos del Gobierno del Principado de Asturias. El uso de esta clase est documentado en la Javadoc. La funcionalidad por defecto establece una cach por mtodo cacheado, donde la clave para buscar en la cache es la concatenacin del toString, de los argumentos. Si dos llamadas al mismo mtodo tienen el mismo toString concatenado de los argumentos se devuelve el resultado cacheado. Este comportamiento se puede sobreescribir heredando de la clase. El tiempo de refresco se establece en la definicin de bean, por defecto son 600 segundos se recomienda ver la Javadoc, para ver la sintxis de los tiempos de refresco en funcin del mtodo.

ProvidersPara aislar la capa de acceso a datos de otras capas de la aplicacin, habitualmente es buena idea definir interfaces providers. Estos interfaces proporcionan datos a la capa del controlador, o directamente a la vista, sin indicar donde ni cmo se obtienen esos datos. El controlador (o la vista) pueden manipular los providers directamente sin preocuparse de cmo stos se han obtenido. Desde la versin 1.5 del openFWPA, los providers es.princast.framework.facilities.providers. El openFWPA define un conjunto de providers habituales: EntityContentProvider Se trata de un proveedor de entidades. Este interfaz devuelve una sola entidad que puede ser utilizada directamente. Por ejemplo, para mostrar sus datos en un formulario. Provee conjuntos de entidades. Este interfaz devuelve listas de entidades. Se pueden utilizar para listados. Provee listas paginadas de entidades. Este interfaz proporciona listas que pueden recorrerse de forma paginada. Se pueden utilizar en listados en los cuales toda la lista no cabe en una sola pgina HTML se encuentran en el paquete:

ListContentProvider

PaginatedContentProvider

35

Arquitectura Modelo -VistaControlador con openFWPA PDFProvider Provee documentos en formato PDF. Este interfaz proporciona un array de bytes que contienen un documento PDF. Se puede utilizar para la realizacin de informes o documentos. Provee contenido en formato XML. Este interfaz proporciona un mtodo writeXML(Writer writer), donde se escribir directamente el XML. Se puede utilizar para servir contenido XML, junto con la PrincastXMLAction . Un ejemplo de este tipo de Provider, incluido en el openFWPA, es el PrincastVelocityXMLProvider que provee contenido, a travs del motor de plantillas Velocity. Su principal objetivo es la generacin de contenido XML basado en plantillas, aunque se puede usar para generar cualquier tipo de contenido. Para mayor informacin acerca de su uso, se recomienda leer la Javadoc PropertyBeansProvider Es una implementacin del ListContentProvider que provee a la aplicacin de beans de propiedades (PropertyBean). El provider puede cargar estos beans de objetos Map o de ficheros de properties (.properties).

XMLProvider

Para conocer con mayor detalle el interfaz de cada uno de los providers, consltese la documentacin Javadoc del openFWPA.

36

Captulo 3. Implementacin de la Arquitectura de Referencia con openFWPAInversin de Control en la Arquitectura de ReferenciaA partir de la versin 1.5 de openFWPA, se hace un uso intensivo de la inversin de control (IoC), para implementar la arquitectura de referencia, en las aplicaciones realizadas con el openFWPA. Para ello, se hace uso de Spring Framework, que ofrece la implementacin del patrn AbstractFactory basado en ficheros XML. Esto permite, eliminar los elementos de unin en las aplicaciones, como las factoras, y singletons. Adems, permite tener la arquitectura modularizada en "piezas", que por estar definidas en un fichero XML, son intercambiables. Lo que deriva, en un sistema dbilmente acoplado, ms tolerable a cambios y modificaciones.

Introduccin al manejo de la Arquitectura con SpringPara manejar la Arquitectura de referencia con Spring, se hace uso de una serie de ficheros XML, donde se definen los beans que forman parte de la arquitectura del sistema. Estos ficheros estn ubicados en src/ java/beans y sigue la estructura de directorios, propuesta para la arquitectura.

Figura 3.1. Ficheros de configuracin de Beans

Los ficheros siguen la sintaxis de definicin de beans de Spring, al igual que el fichero de inicializacin de openFWPA (princast-init-script.xml). Para hacer uso de la inversin de control, es necesario seguir una serie de pasos. Como ejemplo, se va a ver cmo se construye una clase Action dependiente de una clase Delegate desde cero. El proceso de inyectar la dependencia se ha denominado "enlazado", tomndolo como traduccin libre del trmino "wiring", utilizado en el manual de referencia de Spring. La primera tarea que hay que hacer, es implementar el Action. Como se tiene una dependencia, con un Manager, se introduce un campo o propiedad (privado o protegido), en la clase Action. Adems, se define un setter para ese campo, de esta forma se puede inyectar esa dependencia. A la hora de usar el objeto Delegate se utiliza normalmente, aunque parezca que al usarlo apunta a un valor nulo, el motor de inversin de control se encarga de inicializarlo. public class GetListaProductoAction extends PrincastListAction { // inyeccion de dependencia (/beans/web/action-beans.xml) protected CarritoDelegate carritoDelegate;

37

Implementacin de la Arquitectura de Referencia con openFWPA public void setCarritoDelegate(CarritoDelegate carritoDelegate) { this.carritoDelegate = carritoDelegate; }

protected Object getContentList(ActionMapping mapping, ActionForm form, HttpServle //Llamamos al delegate para obtener la lista de productos. return carritoDelegate.getListaProducto(); } } Una vez programada la clase, se debe registrar en el fichero de beans correspondiente, en este caso, como se trata de un action, se registra en el fichero actions-beans.xml. Para ello se le da un identificador mediante el atributo id. Un nombre de clase con el atributo class, y mediante el atributo singleton, se especifica si se quiere que la clase sea un singleton o no (si no se especifica ese atributo, por defecto, ser un singleton).