Você está na página 1de 10

BPM4STRUTS: Generacin de cdigo en el desarrollo de aplicaciones Web J2EE con enfoque MDA.

Orlando Jess Rubiera Hernndez, Luis Victor Hernndez Valds, Alejandro Gmez Fagundo, Yoelys Ronda
Resumen El proceso de desarrollo de software requiere de un gran esfuerzo por parte de todo el equipo involucrado. Actualmente han proliferado en el mercado herramientas que ofrecen facilidades innegables en la etapa de implementacin, tal es el caso de los marcos de trabajo de desarrollo en la Web, que incluyen extensiones para generar cdigo en las capas de presentacin y manipulacin de datos. El presente artculo brinda una detallada explicacin de los distintos artefactos UML que se utilizan para la modelacin y posterior generacin de cdigo para la capa de presentacin con el uso del cartucho BPM4Struts. Se proponen buenas prcticas y algunos consejos a seguir para el trabajo con esta herramienta. Para esto se exponen los elementos que deben ser manipulados con el objetivo de lograr una adecuada personalizacin del cdigo generado por AndroMDA, agilizando as el trabajo del desarrollador del cliente.

generador de cdigo para distintas tecnologas de la capa de persistencia, lgica de negocio y presentacin (Hibernate, EJB, Spring, Servicios Web, Struts y JSF) e incluye un conjunto de cartuchos que se especializan en cada una de estas tecnologas. Genera componentes desplegables en algunos lenguajes a partir de modelos que determinadas herramientas CASE son capaces de exportar en formato XMI. Se apoya en Maven como administrador de proyectos con el cual se comunica a travs de un componente que proporciona las tareas necesarias para la generacin automtica de cdigo y creacin y actualizacin de la base de datos [1]. Como caractersticas ms importantes de AndroMDA, se pueden destacar las siguientes [1]: Elimina la necesidad de escribir cdigo redundante. Los modelos empleados reflejarn el estado del cdigo. El proyecto queda documentado a travs de un diagrama en una plataforma estndar, lo que ayuda a una fcil y rpida adaptacin al cambio de tecnologas. El modelo permite tener una comunicacin ms rpida y eficiente con los artefactos de negocio. Las aplicaciones empresariales modernas son construidas usando varios componentes conectados unos con otros, cada uno brindando una funcionalidad especfica. Los componentes que efectan funciones similares son generalmente agrupados en capas. Estas capas se organizan como un conjunto de componentes, donde la capa superior usa los servicios de la capa inferior. Esta forma de construir aplicaciones facilita el poder distribuir las diferentes capas de la aplicacin en distintas mquinas [1].

I. INTRODUCCIN Actualmente, en el mundo del desarrollo de software, las aplicaciones web son las ms demandadas, esto se debe al auge de Internet la cual brinda grandes posibilidades de gestionar informacin de forma instantnea entre lugares geogrficamente distantes. Es verdico que en las arquitecturas cliente-servidor el mayor esfuerzo de desarrollo se encuentra en la capa de presentacin, comnmente con tareas repetitivas y engorrosas que nada tienen que ver con la lgica de negocio a implementar [1]. Con el surgimiento del paradigma MDA se ha logrado minimizar los tiempos y las dificultades al desarrollar aplicaciones con alto nivel de complejidad. En el presente documento se exponen las experiencias alcanzadas al incorporar el cartucho BPM4Struts para la generacin de cdigo en la capa de presentacin y de esta forma aligerar los esfuerzos de desarrollo. AndroMDA Es el marco de trabajo de cdigo abierto ms popular para el desarrollo de aplicaciones JEE capaz de funcionar como

CCIA2008 AndroMDA implementa este modo de desarrollar aplicaciones empresariales y propone una arquitectura de varias capas con cartuchos asociados a las mismas [1]: Capa de Presentacin: Ofrece dos tecnologas para construir capas de presentacin web: Struts y JSF. Acepta como entrada diagramas de actividades UML donde se define el flujo de las pginas y los componentes web que aportan los marcos de trabajo Struts y JSF. Capa de Lgica de Negocio: La capa de lgica del negocio generada por AndroMDA consiste, sobre todo, en servicios que son configurados usando el marco de trabajo de Spring. Estos servicios generados pueden ser enlazados con EJB. Los servicios tambin pueden ser expuestos como Servicios Web, una forma independiente de la plataforma para el acceso a sus funcionalidades. Capa de Acceso a Datos: AndroMDA utiliza el popular marco de trabajo de Mapeo ObjetoRelacional Hibernate o EJB para generar la capa de acceso a datos. Se generan objetos de acceso a datos por cada entidad definida en el modelo UML. Almacenamiento de Datos: Como AndroMDA genera las aplicaciones utilizando Hibernate para el acceso a datos, se puede emplear cualquier base de datos compatible con Hibernate.

Objetivos BPM4Struts posibilita la generacin de cdigo a partir de diagramas UML mediante el uso de plantillas que pueden ser modificadas con el objetivo de cumplir requerimientos tanto funcionales como de presentacin. Las plantillas garantizan que la transformacin de UML a componentes de Struts sea lo suficientemente abierta para permitir a cualquiera personalizar el proceso. El cdigo generado est acorde con los estndares ms usados en el desarrollo web y da libertades de implementar la lgica del negocio sin la necesidad de conocer a profundidad la tecnologa Struts, aunque esto es aconsejable si se quiere aprovechar al mximo las potencialidades del cartucho [1]. Caractersticas Los componentes que forman parte de la tecnologa y que son generados por el cartucho a partir del modelo son [1]: struts-config.xml. Pginas JSP. Pginas de error. Clases Action. Clases de mapeo de formularios. Fichero de recursos. web.xml. validation.xml. validator-rules.xml. Funciones JavaScript para validacin. tiles-defs.xml. Pginas de ayuda. Ventanas emergentes para seleccionar fechas a travs de un calendario.

BPM4Struts BPM4Struts (del ingls Business Process Modeling for Struts) es el cartucho que brinda AndroMDA especializado en Struts para la construccin de aplicaciones web completamente desplegables a partir de diferentes artefactos UML, mediante los cuales se modela el flujo de la aplicacin. Con el uso del cartucho, el desarrollador se concentra en la lgica del negocio sin tener que preocuparse por implementar mecanismos que son ajenos al proceso [1].

I18n (Internacionalizacin) Struts automticamente carga el fichero de recursos apropiado (application-resources.properties) para la localidad solicitada por el navegador y BPM4Struts genera este fichero de acuerdo con el idioma utilizado para modelar. Para hacer uso de la I18n se copia en el mismo directorio un fichero .properties con el mismo nombre que el generado agregndole el sufijo de idioma correspondiente, con las mismas llaves y los mensajes traducidos [1]. Seguridad Basada en Roles El cartucho BPM4Struts, permite generar una seguridad basada en roles, asumiendo como rol cada actor modelado en los diagramas de casos de uso de UML. De esta forma un usuario que tenga asignado uno o varios roles de los capturados en el modelo, tendr privilegios de acceso a los recursos de los casos de uso con los cuales su rol interacta y por consiguiente, a sus funcionalidades. Este modelo de acceso basado en roles puede servir para un buen nmero de aplicaciones en las que los requisitos de seguridad en materia de autorizacin no son demasiado complejos, y por supuesto,

CCIA2008 se trata de una aplicacin con roles conocidos de antemano y no definidos dinmicamente [1]. Validacin en el Cliente Para cada peticin enviada por el cliente al servidor es posible especificar las reglas de validacin para cada parmetro. El JavaScript asociado ser generado para validar esta peticin lo que evita llamadas innecesarias al servidor [1]. Validacin en el Servidor En caso de que algunas validaciones no se puedan o no se quieran realizar en el cliente, se pueden llevar a cabo en el servidor. Para lograr esto se emplea el marco de trabajo de validaciones de Struts y en caso de detectarse errores, por recibirse uno o ms parmetros incorrectos, el usuario ser retornado a la pgina donde se produjo el error con un mensaje indicando la causa del mismo [1]. Manejo de Excepciones Para cada accin es posible lanzar una excepcin a una pgina especfica. Por defecto todas las excepciones son redireccionadas a la pgina que las provoc con un mensaje detallando el motivo [1]. Diseo y Presentacin Gracias al uso combinado de tiles y CSS es posible abstraer el estilo y el diseo del contenido de las pginas. Todas las pginas sern generadas con el mismo estilo y es suficiente actualizar o extender el estilo existente para cambiar la presentacin de la aplicacin [1]. Listados Una funcionalidad muy comn en las pginas web son los listados de datos. BPM4Struts se integra con la biblioteca de etiquetas displaytag, teniendo control sobre los siguientes aspectos [1]: Paginado: por defecto muestra 15 elementos por pgina. Exportar: los datos pueden ser exportados a XML, CSV, Excel y PDF. Ordenamiento: permite ordenar cada columna del listado. Ayuda en Lnea Para cada pgina es generada una ayuda que es accesible desde un link en la pgina. La informacin presente en la ayuda corresponde con la documentacin escrita en el modelo UML [1]. Fechas y calendarios Cuando se manipula un campo fecha, se genera un cuadro de texto con un calendario JavaScript asociado, permitiendo seleccionar fcilmente la fecha con el formato especificado [1].
Figura 2. global-forward generado en el struts-config.xml

II. PROPUESTA PARA LA GENERACIN DE CDIGO CLIENTE CON BPM4STRUTS. En el presente captulo se brinda una detallada explicacin de los distintos artefactos UML que se utilizan para la modelacin y posterior generacin de cdigo para la capa de presentacin con el uso del cartucho BPM4Struts. Modelacin BPM4Struts utiliza casos de uso, diagramas de actividades y diagramas de clases como entrada para la generacin de las aplicaciones web. A partir de estos artefactos UML se generan las diferentes Action de Struts, las pginas JSP asociadas a los casos de uso y los dems ficheros necesarios para desplegar la aplicacin. Esta modelacin debe seguir algunas especificaciones para que AndroMDA pueda interpretar satisfactoriamente el modelo. Casos de Uso Cuando se desarrolla una aplicacin web utilizando el cartucho BPM4Struts se debe dividir la misma en diferentes casos de uso. Cada caso de uso debe definir un conjunto nico de operaciones de procesamiento que son especficas para la aplicacin. Los casos de uso modelados deben ser marcados con el estereotipo <<FrontEndUseCase>>. Es obligatorio informarle al cartucho cul de los casos de uso de la aplicacin (uno y slo uno) es el punto de entrada de la misma y debe ser marcado adems, con el estereotipo <<FrontEndApplication>> [AndroMDA08].

Figura 1. Caso de uso

Los casos de uso separan la aplicacin en distintas partes y los ficheros generados reflejarn esto agrupndose en un mismo paquete. Para cada caso de uso generado, el fichero strutsconfig.xml contendr un global-forward como el siguiente [AndroMDA08]:

Diagramas de Actividades Los diagramas de actividades permiten expresar la forma en que la aplicacin se va a comportar, esto se logra mediante los estados y las transiciones. Este debe ser modelado como un elemento interno del caso de uso. Las diferentes partes que

CCIA2008 componen un diagrama de continuacin [1]. actividad se explican a

mismo parmetro, ya que esto provocara que aparezcan componentes duplicados. Se recomienda utilizar los puntos de decisin.

Estados de Inicio Todo caso de uso necesita un estado que denota el punto inicial, no puede tener transiciones entrantes y slo una saliente. Solamente puede haber un estado inicial para cada diagrama de actividades [1].

Figura 5. Parmetros de eventos

Figura 3. Estado de inicio

Para el control de los diferentes tipos de parmetros de eventos, BPM4Struts posee una serie de valores etiquetados que permiten especificar el tipo de componente HTML que se desea generar y las diferentes propiedades asociadas a estos campos [1]. A continuacin se muestran algunos componentes HTML que se pueden generar con el uso de estos valores etiquetados [1]: Lista de seleccin Los parmetros de eventos pueden ser seleccionables para que el usuario pueda marcar uno o ms valores de una lista y enviarlos al servidor. Utilizando el valor etiquetado que define el tipo de componente HTML que se va a generar @andromda.presentation.web.view.field.type=select, BPM4Struts genera en la pgina JSP una lista de seleccin con una lista de valores especificados en un parmetro. Campos de contrasea Marcando el parmetro de evento con el valor etiquetado para especificar el componente HTML @andromda.presentation.web.view.field.type=password, BPM4Struts agrega a la pgina JSP una caja de texto donde los caracteres estn escondidos detrs de asteriscos. reas de texto Utilizando el valor etiquetado @andromda.presentation.web.view.field.type=textarea, el cartucho agrega a la pgina JSP una caja de texto con varias filas. Selecciones alternativas Simplemente adicionando @andromda.presentation.web.view.field.type=radio, se genera una lista de botones de eleccin para seleccionar uno. Por defecto se crean tres botones de seleccin, pero este nmero puede ser cambiado usando el valor etiquetado @andromda.struts.view.field.radio, donde puede especificarse el nmero que se desee o una lista separada por comas con los valores de las etiquetas de los botones de seleccin.

Actividades Una actividad representa cierto estado de la aplicacin. En BPM4Struts se utilizan para modelar los estados en el lado del servidor (el controlador: los Actions de Struts) y en el lado del cliente (la vista: JSP). Los nombres de las actividades deben ser nicos para cada diagrama. Las actividades del lado del cliente son etiquetadas con el estereotipo <<FrontEndView>>, representan una pgina JSP y pueden tener mltiples transiciones de salida. Las actividades del lado del servidor no tienen estereotipo pero slo pueden tener una transicin de salida [1].

Figura 4. Actividades

Transiciones Las transiciones son usadas para interconectar los diferentes estados en un diagrama de actividad y junto con las actividades conforman la lgica del proceso del caso de uso. Existen algunos valores etiquetados que son utilizados para las transiciones de salida de las actividades <<FrontEndView>>. Estos brindan la posibilidad de especificar un mensaje que ser mostrado en una pgina JSP. Las transiciones pueden ser estereotipadas como <<FrontEndException>> que expresa cmo se debe comportar la aplicacin en caso que se lance una excepcin. Por cada transicin de salida de una actividad con estereotipo <<FrontEndView>> el cartucho genera una clase Action de Struts y una clase que mapea el formulario. Parmetros de Eventos Los parmetros de eventos son, como su nombre lo indica, parmetros modelados en una transicin de salida de las actividades del lado del cliente. Cada vez que se modela una transicin con parmetros, esta representa una llamada al servidor desde una pgina web, normalmente mediante el envo de un formulario hacia un Action. Los parmetros modelados representan los campos del formulario [1]. Cada transicin de salida de una actividad <<FrontEndView>> que contenga parmetros genera un formulario nuevo. En el caso que un componente cumpla ms de una funcin en una pgina JSP, se debe tener cuidado de modelar varias seales con el

CCIA2008 Subir archivos El parmetro de evento debe ser de tipo File. Checkboxes El parmetro de evento debe ser de tipo boolean. Lista de checkboxes Con slo adicionar @andromda.presentation.web.view.field.type=multibox al parmetro de evento se agrega a la pgina una lista de checkboxes. Deben ser tambin especificado el valor etiquetado @andromda.struts.view.field.multibox, cuyo valor debe corresponder a la variable que contiene una coleccin o un arreglo. Variables de Pgina Las variables de pgina se modelan de la misma manera que los parmetros de eventos con la diferencia de que se definen en las transiciones que entran a una actividad marcada como <<FrontEndView>>, de esta forma estos parmetros estarn disponibles en la pgina JSP generada [1].

Controladores La modelacin de diagramas de actividades permite expresar claramente la forma en que fluye la aplicacin desde un estado a otro. Esto ayuda en gran medida al proceso de generacin de cdigo, pero todo este esfuerzo slo tiene sentido cuando existe la posibilidad de insertar fragmentos de cdigo generado de forma manual [1]. Por cada caso de uso es necesario modelar una clase en la cual se especifican todas las operaciones que sern llamadas dentro del diagrama de actividades de un caso de uso. Esta clase debe ser asociada a un caso de uso determinado para que de esta forma el cartucho sepa a cul pertenece [1].

Figura 9. Controlador

Parmetros de Mtodos Mediante la especificacin del nombre y el tipo de dato de los parmetros de la clase controlador se puede tener acceso a un parmetro de evento o a una variable de pgina definidos en el diagrama de actividades correspondiente. Estos parmetros deben coincidir perfectamente en nombre y tipo [1].

Figura 6. Variable de pgina

Puntos de Decisin En algunos casos las actividades y las transiciones no son suficientes cuando se quiere divergir el flujo de la aplicacin basado en una determinada decisin. Para dar solucin a esta problemtica se hace uso de los puntos de decisin, en donde se delega a un mtodo el camino que debe seguir el flujo segn sea el valor que devuelva [1].

Figura 7. Punto de decisin

Figura 10. Parmetros de mtodos

Estados Finales En un diagrama de actividades se pueden modelar tantos estados finales como sean necesarios. Los estados finales representan, en BPM4Struts, el final de un caso de uso y el flujo al siguiente, esto se logra especificando como nombre del estado final el del caso de uso para el cual contina la aplicacin [1].

Figura 8. Estado final

Objetos de Sesin Muchas veces se hace imprescindible almacenar datos en la sesin, lo cual a largo plazo puede ser difcil de mantener. BPM4Struts permite modelar de forma elegante los objetos almacenados en la sesin, los cuales son clases estereotipadas como <<FrontEndSessionObject>> con sus atributos correspondientes. Para enlazar este objeto de sesin con un caso de uso, simplemente se modela una dependencia desde la clase controlador hasta dicho objeto. Esta dependencia entre la clase controlador y el objeto de sesin genera mtodos para el manejo de este objeto en dicha clase. Una clase controlador puede tener dependencia con varios objetos de sesin y un

CCIA2008 objeto de sesin puede ser compartido por varias clases controlador [1]. Llamadas a Mtodos de Servicio Es posible conectar la capa de presentacin con la capa de servicio si se modela esta ltima con alguno de los otros cartuchos (Spring, EJB), simplemente se traza una dependencia desde la clase controlador hasta la clase de servicio [1]. III. PERSONALIZACIN DE ANDROMDA

Las aplicaciones generadas con el uso de AndroMDA tienen la posibilidad de ser personalizadas de forma tal que el cdigo resultante est acorde con las necesidades del programador, as como, para el caso de la presentacin, la facilidad de especificar el diseo del sitio web y los estilos que tendrn los distintos componentes visuales. Para lograr estos niveles de personalizacin AndroMDA ofrece un fichero de configuracin y un conjunto de plantillas. A continuacin se enuncian algunas de estas configuraciones para la generacin de una aplicacin web. Configuracin del Fichero andromda.xml AndroMDA y sus componentes se configuran a travs de un fichero XML denominado andromda.xml donde se especifican diferentes propiedades de los cartuchos utilizados para el desarrollo de una aplicacin. Las propiedades de configuracin estn agrupadas en secciones llamadas espacios de nombre (del ingls namespace), definindose uno para cada cartucho empleado en la aplicacin. Seguidamente se enuncian algunas propiedades muy utilizadas para la configuracin del cartucho BPM4Struts en el fichero andromda.xml:

Figura 11. Objeto de sesin

Ubicacin donde se colocan las plantillas de AndroMDA sobrescritas: cuando se sobrescriben las plantillas que generan el cdigo es necesario especificar la ubicacin de las mismas para que AndroMDA utilice estas plantillas personalizadas y no las que trae por defecto. Esto se logra con la propiedad mergeLocation. <property name=mergeLocation>valor

(Ej. ${mda.dir}/cartridges)</property> Formato de fecha: como BPM4Struts genera componentes de entrada de fecha, es posible definir un formato de fecha global para toda la aplicacin. De esta forma todas las fechas del sistema tendrn el mismo formato, siempre y cuando no se le especifique uno distinto para una fecha determinada. <property name=defaultDateFormat>valor (Ej. dd/MM/yyyy)</property> Validacin en el cliente: BPM4Struts genera validaciones JavaScript para cada peticin realizada por el usuario. Es posible declarar si el cartucho debe o no generar estas funciones de validacin mediante la propiedad clientValidation. <property name=clientValidation>valor

Fig. 12 Dependencia a los servicios

Debido a la estricta separacin entre las tres capas de las aplicaciones empresariales (Presentacin Lgica de Negocio Acceso a Datos), AndroMDA no le impone al cartucho BPM4Struts cmo realizar las llamadas a las instancias de los servicios de la capa de lgica de negocio. Esto permite especificar cmo se va a acceder a estos servicios y no hacer la llamada a los mismos dependiente de una tecnologa determinada [1].

(true | false)</property>

CCIA2008 Ayuda en lnea en cada pgina: AndroMDA genera ayuda en lnea para las pginas JSP a partir de la documentacin especificada en el modelo UML para cada caso de uso. Con la propiedad onlineHelp se define la generacin o no de la ayuda asociada a cada pgina. <property name=onlineHelp>valor (true | false)</property> Exportar listado a distintos formatos: para los listados generados por el cartucho BPM4Struts es posible precisar los formatos a los cuales se van a exportar. Utilizando la propiedad defaultTableExportType se puede lograr lo antes mencionado. <property namedefaultTableExportType>valor (Ej. none)</property> Sobrescribir Plantillas Gracias a las facilidades que brinda AndroMDA de sobrescribir las plantillas de generacin de cdigo que trae por defecto esta herramienta, resulta fcil personalizar la aplicacin generada. Es importante tener en cuenta que estas plantillas utilizan Velocity y es recomendado tener una nocin sobre este lenguaje si se quiere explotar al mximo sus posibilidades. En estas plantillas se puede embeber cdigo de otros lenguajes, por ejemplo etiquetas de Struts y HTML. Para cambiar la apariencia de las pginas JSP, las cuales son el resultado de marcar una actividad con el estereotipo <<FrontEndView>>, se utiliza la plantilla page.jsp.vsl. Para el caso de la generacin de los componentes del formulario existe la plantilla page.jsp.vm que cuenta con mtodos, que en dependencia de los parmetros, adiciona a las pginas estos componentes. El fichero page.jsp.vsl contiene llamadas a los mtodos de este fichero cuando necesita generar algn componente. Este fichero es muy til ya que se puede establecer el estilo con el cual los componentes son generados y se pueden definir otros aspectos de apariencia y diseo. BPM4Struts utiliza la plantilla page-table.jspf.vsl, que haciendo uso de las etiquetas que ofrece la librera displaytag, genera el contenido de las listas en forma de tablas, agregndole funcionalidades entre las que estn el paginado, el ordenamiento de las columnas y la exportacin de los datos hacia distintos formatos. IV. CONSEJOS Y RECOMENDACIONES PARA EL USO DE BPM4STRUTS

El uso de AndroMDA tiene numerosas ventajas para el desarrollo de aplicaciones, pero es una herramienta que puede ser de complicada utilizacin debido a las muchas tecnologas que envuelve. Las potencialidades de generacin de cdigo pueden verse opacadas si los desarrolladores no siguen las reglas de modelacin y las recomendaciones hechas por el equipo de creadores de AndroMDA. Este epgrafe expone algunos consejos y recomendaciones para el trabajo con BPM4Struts. Convenciones de Nombres Es importante nombrar de forma correcta todos los elementos del modelo, sin el uso de siglas, sufijos o caracteres que pudieran provocar errores. Se recomienda adems utilizar nombres que no provoquen ambigedades, o sea, nombres que identifiquen al elemento en su contexto [1]. Regeneracin de Cdigo El poder de AndroMDA es apreciable cuando el desarrollador necesita aplicar cambios al modelo y regenerar el conjunto de archivos de cdigo. Usando BPM4Struts, este grupo de archivos comprende tanto las clases Java como los ficheros de recursos y las pginas JSP. Los cartuchos de AndroMDA estn diseados para nunca sobrescribir los cambios hechos por el desarrollador a las clases de implementacin [1]. Funcionalidad copy-over La forma ms eficiente y efectiva de mantener los cambios hechos manualmente sobre las pginas JSP es copiar los ficheros generados en el directorio fuente (y posteriormente aadirlo al controlador de versiones). Este directorio fuente para las pginas JSP y dems ficheros relacionados con la presentacin se encuentra en /web/src/main/jsp [1]. JavaScript JavaScript puede mejorar enormemente la apariencia y comportamiento de una aplicacin web. BPM4Struts genera algunas rutinas comunes que pueden ser usadas en las pginas. Con el uso de la funcionalidad copy-over es posible modificar estos ficheros JavaScript para que el desarrollador agregue funciones que puede necesitar a lo largo de la aplicacin [1]. Contenido Dinmico El cartucho BPM4Struts permite tener el control de la respuesta a una peticin realizada. En algunas ocasiones el desarrollador puede desear que un Action determinado no avance a otra pgina o Action. Esto se logra modelando la actividad sin transiciones de salida, en cuyo caso la clase Action de Struts devuelve null en su mtodo execute(). Esta funcionalidad puede ser utilizada para enviar ficheros al

CCIA2008 usuario, as el navegador muestra un dilogo de descarga en lugar de cargar una determinada pgina [1]. Validacin de Nmeros Utilizando Cadenas Debido a que BPM4Struts valida automticamente cualquier campo numrico modelado libera al desarrollador de muchos problemas y elimina la necesidad de escribir cdigo de validacin. Esta funcionalidad es muy til, pero Struts asigna el valor cero por defecto cuando no se especifica otro valor. Para seguir usando esta validacin y eliminar el cero se debe personalizar el fichero de mapeo de tipos de datos de Java para el espacio de nombre de BPM4Struts, solo se debe cambiar para que los tipos de datos numricos se mapeen a java.lang.String [1].

<<FrontEndUseCase>> y se crea un nuevo diagrama de actividades asociado a este. 4. En el diagrama de actividades se modela la actividad Preparar Sesion que se ejecuta del lado del servidor para borrar de la sesin cualquier elemento innecesario. 5. El caso de uso parte de la obtencin de las agencias de prensa que se encuentran registradas. Para esto se modela una actividad llamada Poblar Pantalla que se encarga de poblar con los datos necesarios los formularios de la pgina JSP asociada al caso de uso. 6. Se modela la actividad denominada Gestion de Agencias marcada como <<FrontEndView>> que representa la pgina JSP en la cual ocurrir la gestin de las agencias. Se modela tambin una transicin desde Poblar Pantalla hasta Gestion de Agencias con una variable de pgina que contiene el listado de agencias y de esta forma se genera en la JSP una tabla con los datos de las agencias de prensa. Esta variable de pgina tiene un valor etiquetado donde se especifica en una lista separada por comas los atributos de las agencias de prensa que sern mostrados en la tabla: @andromda.presentation.view.table.columns=nombr e, descripcion, activo 7. Se agregan las actividades Cargar Agencia y Eliminar Agencia para cargar una agencia y eliminar una o varias agencias respectivamente. Para completar este flujo de carga y eliminacin se modela una transicin de salida desde Gestion de Agencias a Cargar Agencia y de Gestion de Agencias hasta Eliminar Agencia, ambas con una seal que tiene como parmetro el identificador que se desea cargar y el o los identificadores de las agencias que se desean eliminar respectivamente. Estas transiciones tienen los valores etiquetados @andromda.presentation.web.action.type=table @andromda.presentation.web.action.tablelink=agenc ias para que de esta forma se genere un checkbox delante de cada fila de la tabla de agencias con el identificador de agencia y Actions globales (Cargar y Eliminar) a esta tabla. Despus de su ejecucin, estas dos acciones regresan a la actividad Poblar Pantalla. 8. Posteriormente se modela la actividad Enviar Datos y una transicin que sale de Gestion de Agencias y entra en la actividad antes mencionada, con una seal que presenta como parmetros los campos del formulario de gestin de agencias. As se genera un formulario en la pgina JSP con componentes web

V. EJEMPLO PRCTICO DE BPM4STRUTS

Tabla 1 Breve descripcin del caso de uso Gestionar Agencias de Prensa

Pasos a Seguir al Implementar un Caso de Uso por el Desarrollador del Cliente 1. Estudiar detalladamente los requerimientos asociados al caso de uso y, en base a estos y al prototipo de interfaz, definir una propuesta inicial del diagrama de actividades. 2. Se conforma la estructura de paquetes en el modelo colocando los artefactos relacionados con el caso de uso a implementar dentro del paquete web que se encuentra al mismo nivel que los paquetes dominio (contiene las entidades), vo (contiene los Value Objects) y servicio (contiene los servicios).

Figura 13. Estructura de paquetes

3. Se aade el caso de uso al modelo de la aplicacin marcndolo con el estereotipo

CCIA2008 asociados a cada parmetro definido en la seal y un botn que enva estos datos al servidor. 9. Seguidamente se definen las actividades Insertar Agencia y Actualizar Agencia que sern encargadas, como sus nombres lo indican, de insertar o actualizar una agencia de prensa. Para que este comportamiento pueda llevarse a cabo, la actividad Enviar Datos delega su responsabilidad en un punto de decisin, el cual es el encargado de determinar el flujo a seguir por la aplicacin (insertar o actualizar) en dependencia del valor de retorno del mtodo verificarAccion() que utiliza un campo oculto del formulario para definir el camino a seguir. Posteriormente estas actividades regresan el control de ejecucin a la actividad Poblar Pantalla. 10. Se modela una transicin desde la actividad Gestion de Agencias a Poblar Pantalla para restablecer los cambios hechos en el formulario y que los componentes vuelvan a sus valores iniciales. Cuando se est insertando una agencia, los campos del formulario se limpian y en caso de modificacin, los componentes toman los valores de la agencia que se carg con anterioridad. Esta seal posee un parmetro accion que define el flujo en que se encuentra el caso de uso (insercin o modificacin). 11. Como ltima actividad se modela Cancelar para cancelar la modificacin de una agencia de prensa determinada y devolver el control del flujo a la actividad Poblar Pantalla. 12. Es necesario definir un controlador asociado a cada diagrama de actividades. Por esto se define el controlador ControladorAgencias, el cual se asocia a uno o varios servicios definidos por el desarrollador del servidor y donde se modelan los mtodos que sern referenciados por las distintas actividades del diagrama. En este caso se asocia al ServicioPrensa que contiene los mtodos de insercin, modificacin, eliminacin y listado de agencias de prensa. 13. Asociar cada actividad que necesite llamar a mtodos del controlador con uno o varios mtodos definidos en l. En este caso de uso diferentes actividades delegan responsabilidades en los mtodos del controlador: Preparar Sesion prepararSesion() Poblar Pantalla poblarPantalla() Cargar Agencia cargarAgencia() Eliminar Agencia eliminarAgencia() Insertar Agencia insertarAgencia() Actualizar Agencia actualizarAgencia() Cancelar cancelarAccion() 14. Se define el objeto de sesin AgenciaSesion marcndolo como <<FrontEndSessionObject>> que

tiene como atributo el Value Object AgenciaVO modelado por el desarrollador del servidor. Se modela adems una dependencia entre el controlador antes definido y este objeto de sesin para que se generen en el controlador mtodos de acceso y manejo de AgenciaSesion. 15. Terminada la modelacin del caso de uso se genera el cdigo y se implementan los mtodos definidos en el controlador. 16. Por ltimo se organizan los componentes de los formularios para que queden acorde al prototipo de interfaz definida en el detalle del caso de uso. Durante esta tarea tambin se implementan las funciones JavaScript que sean necesarias. En el ejemplo en cuestin no es necesario escribir ninguna funcin de este tipo ya que el caso de uso es sencillo y no tiene ningn comportamiento dinmico, por lo que el flujo se puede modelar sin adicionar posteriormente funciones JavaScript. El diagrama de actividades resultante de la modelacin del caso de uso Gestionar Agencias de Prensa se presenta a continuacin:

Figura 14. Diagrama de actividades del Caso de Uso Gestionar Agencias de Prensa

La Figura 15. muestra el controlador, el objeto de sesin y el servicio modelado para este caso ejemplo:

CCIA2008 10 Los resultados de aplicar la tecnologa propuesta en un caso de ejemplo real han demostrado una reduccin significativa en el tiempo de desarrollo en la capa de presentacin (tercera parte del tiempo). La integracin de las facilidades que ofrece AndroMDA para la generacin de cdigo en la capa de acceso a datos, con las nuevas prestaciones que ofrece este cartucho para la capa de presentacin, reportan beneficios notables al equipo de proyecto en cuanto a tiempo de desarrollo y documentacin.

Figura 15. Controlador, objeto de sesin y servicio

VII. REFERENCIAS
[1] AndroMDA [Consultado: 8 de enero del 2008] Disponible en: http://www.andromda.org/

La pantalla que se muestra en la siguiente imagen representa el resultado de la modelacin e implementacin del caso de uso ejemplo, la posterior organizacin de los componentes generados y la personalizacin de las plantillas de generacin de cdigo para minimizar los cambios a realizar en las pginas JSP:

Figura 16. Interfaz de usuario del caso de uso Gestionar Agencias de Prensa

En el trabajo de diploma BPM4STRUTS se brindan otras soluciones para las funcionalidades mas frecuentes en las aplicaciones web. VI. CONCLUSIONES En el presente artculo se han ofrecido los detalles esenciales para el trabajo con los artefactos UML sobre los cuales se basa el funcionamiento del cartucho BPM4Struts y el cdigo generado para cada componente de Struts. De esta forma, los desarrolladores que tengan experiencia en el trabajo de forma tradicional con esta tecnologa pueden adaptarse rpidamente a la nueva forma de desarrollo. El artculo sirve, adems, como documento base para los programadores que se inician con AndroMDA para la construccin de aplicaciones web. Se han expuesto las propiedades y ficheros de AndroMDA personalizables ms importantes para lograr una generacin de la capa de presentacin lo ms cercano posible a los requerimientos funcionales y de la interfaz de usuario.