UDA – Utilidades de desarrollo de aplicaciones by EJIE is licensed under a Creative Commons Reconocimiento-NoComercial-Com...
Migración v2.0.0 ii/25Control de documentaciónTítulo de documento: Migración v2.0.0Histórico de versionesCódigo: Versión: ...
Migración v2.0.0 iii/25ContenidoCapítulo/sección Página1 Introducción v2.0.0 12 Actualización componentes RUP v2.0.0 23 Ac...
Migración v2.0.0 1/251 Introducción v2.0.0El objetivo de este documento es describir los cambios necesarios a realizar en ...
Migración v2.0.0 2/252 Actualización componentes RUP v2.0.0Los pasos que se han de realizar para realizar la actualización...
Migración v2.0.0 3/25Añadir en la línea 9:<script src="${staticsUrl}/rup/scripts/rup.compatibility-2.0.0.js" type="text/ja...
Migración v2.0.0 4/25<script src="${staticsUrl}/rup/scripts/rup.menu-2.0.0.js" type="text/javascript"></script><script src...
Migración v2.0.0 5/253 Actualización librerías v2.0.0A continuación se van a exponer las modificaciones que se deben reali...
Migración v2.0.0 6/25Estos son los pasos a seguir para realizar la actualización de las librerías:1. Actualizar el reposit...
Migración v2.0.0 7/25o service-config.xmlo tx-config.xml• <xxxYYY>War/WebContent/WEB-INF/springo app-config.xmlo log-confi...
Migración v2.0.0 8/25......http://www.springframework.org/schema/aop/spring-aop-3.0.xsd...http://www.springframework.org/s...
Migración v2.0.0 9/254 Configuración idiomáticaEl capítulo que nos ocupa pretende recopilar los cambios a realizar en una ...
Migración v2.0.0 10/25o Modificar el fichero mvc-config.xml para sustituir el antiguo interceptor por el nuevo.Teniendo en...
Migración v2.0.0 11/25[Nuevo]<bean id="viewResolver"class="com.ejie.x38.control.view.UdaViewResolver"><property name="view...
Migración v2.0.0 12/25AVAILABLE_LANGS: Posibles lenguajes de la aplicación (definidos en mvc-config.xml)<xxxStatics>o Modi...
Migración v2.0.0 13/255 SeguridadLa actualización a la versión v2.0.0 de UDA requiere de una serie de ajustes en el compon...
Migración v2.0.0 14/25Del mismo modo, se deberá modificar la inicialización del bean myLogoutHandler eliminando la inicial...
Migración v2.0.0 15/25<value>UDA</value></list></entry></map></list></property><property name="userChangeUrl"value="http:/...
Migración v2.0.0 16/25aviso. Esta nueva propiedad, simula el comportamiento que también tiene XLNets para evitar cambios d...
Migración v2.0.0 17/25La página de login del mock hace uso de una serie de literales internacionalizados que se deben añad...
Migración v2.0.0 18/256 Jackson JSON ProcessorAl desarrollar la versión v2.0.0 se ha tratado de mantener el mayor grado de...
Migración v2.0.0 19/257 Envío de ficheros desde un mantenimientoEn actualización de las versiones de Spring y de las libre...
Migración v2.0.0 20/25mapeará con peticiones que utilicen el método HTTP PUT. En ambos métodos se elimina el uso de lacabe...
Migración v2.0.0 21/258 ValidacionesLa nueva versión v2.0.0 de UDA conlleva una profunda remodelación en el sistema de val...
Migración v2.0.0 22/259 ExcepcionesLa nueva versión v2.0.0 de UDA presenta una nueva gestión de excepciones.Las aplicacion...
Upcoming SlideShare
Loading in …5
×

UDA-Migracion a v2

341 views

Published on

UDA-Utilidades de desarrollo de aplicaciones
• Migración a versión 2

http://uda-ejie.github.io/

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
341
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
8
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

UDA-Migracion a v2

  1. 1. UDA – Utilidades de desarrollo de aplicaciones by EJIE is licensed under a Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License.UDA - Utilidades de desarrollo de aplicacionesMigración v2.0.0Fecha: 22/06/2012 Referencia:EJIE S.A.Mediterráneo, 14Tel. 945 01 73 00*Fax. 945 01 73 0101010 Vitoria-GasteizPosta-kutxatila / Apartado: 80901080 Vitoria-Gasteizwww.ejie.es
  2. 2. Migración v2.0.0 ii/25Control de documentaciónTítulo de documento: Migración v2.0.0Histórico de versionesCódigo: Versión: Fecha: Resumen de cambios:1.0.0 22/06/2012 Primera versión.Cambios producidos desde la última versiónControl de difusiónResponsable: Ander MartínezAprobado por:Firma: Fecha:Distribución:Referencias de archivoAutor:Nombre archivo:Localización:
  3. 3. Migración v2.0.0 iii/25ContenidoCapítulo/sección Página1 Introducción v2.0.0 12 Actualización componentes RUP v2.0.0 23 Actualización librerías v2.0.0 53.1 Dependencias 53.2 Ficheros de configuración de Spring 64 Configuración idiomática 95 Seguridad 135.1 Seguridad mediante el uso del Mock 145.2 Seguridad mediante el uso de XLNets 176 Jackson JSON Processor 187 Envío de ficheros desde un mantenimiento 198 Validaciones 219 Excepciones 22
  4. 4. Migración v2.0.0 1/251 Introducción v2.0.0El objetivo de este documento es describir los cambios necesarios a realizar en aplicaciones que seencuentren en fase de desarrollo y que consideren necesario actualizar la versión de las utilidades queproporciona UDA, entendiendo por utilidad los patrones de interacción RUP, la librería de utilidadesx38ShLibClasses, las plantillas de generación de código y el plugin para el Eclipse.En el caso de nuevos desarrollos con UDA se recomienda descargar la última versión completa y tenerlacomo punto de partida.La actualización a la versión v2.0.0 se puede realizar en función de las necesidades de la aplicación, pero sedan por sentados los siguientes supuestos:• La actualización se realiza sobre una aplicación con la versión 1.2.1 de RUP. La actualización directadesde versiones anteriores no ha sido probada por lo que es posible que pueda darse la necesidad derealizar modificaciones extras.• Los ficheros originales de RUP no han sido modificados.En los capítulos siguientes se describe de forma detallada qué cambios habrá que realizar en cada caso yademás se referencia a diversos anexos de la documentación para profundizar más en cómo se hanimplementado y para mostrar ejemplos, además de la propia aplicación x21a que está disponible en elrepositorio de código.Una guía básica de qué cambios se deben realizar en cada caso en función de las necesidades de laaplicación sería la siguiente:Si se quiere modificar únicamente los componentes visuales para resolver posibles problemasdetectados y/o obtener los componentes para los nuevos patrones desarrollados sin tocar el restode la aplicación:o Solo es necesario actualizar los patrones RUP.o No es necesario actualizar la librería x38. Los componentes son compatibles con laversión anterior pero no se obtendrá el beneficio de las mejoras practicadas paravalidaciones y excepciones.Si se quiere actualizar la librería de utilidades para beneficiarse de las mejoras en seguridad,validación, excepciones, gestión idiomática:o Habrá que actualizar los componentes RUP, la librería x38ShLibClasses y realizar loscambios requeridos por su uso, a saber: configuración idiomática y configuración deseguridad.o No es necesario realizar los cambios de validación y excepciones.Si se quieren implementar validaciones en servidor y cliente mediante la nueva versión:o Habrá que actualizar los componentes RUP, la librería x38ShLibClasses, realizar loscambios de gestión idiomática y seguridad, que son obligatorios, y además los cambiosdel sistema de validación y excepción.
  5. 5. Migración v2.0.0 2/252 Actualización componentes RUP v2.0.0Los pasos que se han de realizar para realizar la actualización son los siguientes:1. Cambiar la carpeta xxxStaticsWebContentrup por la carpeta incluida en el fichero rup-v2.0.0.zip2. Modificar la inclusión de los ficheros CSS y JS que se detallan a continuación:<xxxYYY>WarWebContent?WEB-INFlayoutsincludesrup.styles.incModificar las líneas 7-8:<!-- jQuery UI (custom-theme) --><link href="${staticsUrl}/rup/custom-theme/jquery-ui-1.8.20.custom.css" rel="stylesheet" type="text/css" />Modificar las líneas 10-27:<!-- Patrones (basic-theme) --><link href="${staticsUrl}/rup/basic-theme/theme.rup.base-2.0.0.css" rel="stylesheet" type="text/css" /><link href="${staticsUrl}/rup/basic-theme/theme.rup.accordion-2.0.0.css" rel="stylesheet" type="text/css" /><link href="${staticsUrl}/rup/basic-theme/theme.rup.autocomplete-2.0.0.css" rel="stylesheet" type="text/css" /><link href="${staticsUrl}/rup/basic-theme/theme.rup.breadCrumb-2.0.0.css" rel="stylesheet" type="text/css" /><link href="${staticsUrl}/rup/basic-theme/theme.rup.combo-2.0.0.css" rel="stylesheet" type="text/css" /><link href="${staticsUrl}/rup/basic-theme/theme.rup.date-2.0.0.css" rel="stylesheet" type="text/css" /><link href="${staticsUrl}/rup/basic-theme/theme.rup.feedback-2.0.0.css" rel="stylesheet" type="text/css" /><link href="${staticsUrl}/rup/basic-theme/theme.rup.grid-2.0.0.css" rel="stylesheet" type="text/css" /><link href="${staticsUrl}/rup/basic-theme/theme.rup.lang-2.0.0.css" rel="stylesheet" type="text/css" /><link href="${staticsUrl}/rup/basic-theme/theme.rup.maint-2.0.0.css" rel="stylesheet" type="text/css" /><link href="${staticsUrl}/rup/basic-theme/theme.rup.menu-2.0.0.css" rel="stylesheet" type="text/css" /><link href="${staticsUrl}/rup/basic-theme/theme.rup.messages-2.0.0.css" rel="stylesheet" type="text/css" /><link href="${staticsUrl}/rup/basic-theme/theme.rup.tabs-2.0.0.css" rel="stylesheet" type="text/css" /><link href="${staticsUrl}/rup/basic-theme/theme.rup.time-2.0.0.css" rel="stylesheet" type="text/css" /><link href="${staticsUrl}/rup/basic-theme/theme.rup.toolbar-2.0.0.css" rel="stylesheet" type="text/css" /><link href="${staticsUrl}/rup/basic-theme/theme.rup.tooltip-2.0.0.css" rel="stylesheet" type="text/css" />Añadir en la línea 28:<link href="${staticsUrl}/rup/basic-theme/theme.rup.validate-2.0.0.css" rel="stylesheet" type="text/css" /><link href="${staticsUrl}/rup/basic-theme/theme.rup.wizard-2.0.0.css" rel="stylesheet" type="text/css" /><xxxYYY>WarWebContent?WEB-INFlayoutsincludesrup.scripts.incModificar las líneas 3-4. Actualización de la versión de jQuery:<!-- jQuery 1.7.2 --><script src="${staticsUrl}/rup/scripts/core/jquery-1.7.2.js" type="text/javascript"></script>Modificar las líneas 6-8. Modificar las versiones de rup.utils y rup.base:<!-- RUP-CORE --><script src="${staticsUrl}/rup/scripts/rup.utils-2.0.0.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/rup.base-2.0.0.js" type="text/javascript"></script>
  6. 6. Migración v2.0.0 3/25Añadir en la línea 9:<script src="${staticsUrl}/rup/scripts/rup.compatibility-2.0.0.js" type="text/javascript"></script>Actualizar la sección de jQuery UI:<!-- jQuery UI 1.8.20--><script src="${staticsUrl}/rup/scripts/core/ui/jquery-ui-1.8.20.custom.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/core/ui/jquery-ui.multidatespicker.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/core/ui/jquery-ui.timepicker.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/core/ui/jquery.ui.autocomplete.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/core/ui/jquery.ui.selectmenu.js" type="text/javascript"></script>Actualizar la sección de jqGrid:<!-- jqGrid 4.3.2--><script src="${staticsUrl}/rup/scripts/core/jqGrid/jqGrid-4.3.2.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/core/jqGrid/jquery.jqGrid.fluid.js" type="text/javascript"></script>Actualizar la sección de Utilidades adicionales:<!—Utilidades adicionales--><script src="${staticsUrl}/rup/scripts/core/utils/form2object.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/core/utils/jquery.blockUI.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/core/utils/jquery.fileupload.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/core/utils/jquery.fileupload-ui.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/core/utils/jquery.form.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/core/utils/jquery.iframe-transport.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/core/utils/jquery.json-2.2.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/core/utils/jquery.numeric.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/core/utils/jquery.qtip.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/core/utils/jquery.url.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/core/utils/jquery.validate.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/core/utils/jquery.xdr-transport.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/core/utils/xbreadcrumbs.js" type="text/javascript"></script>Actualizar las versiones de los ficheros de los patrones RUP:<!-- Patrones RUP --><script src="${staticsUrl}/rup/scripts/rup.accordion-2.0.0.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/rup.autocomplete-2.0.0.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/rup.breadCrumb-2.0.0.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/rup.combo-2.0.0.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/rup.date-2.0.0.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/rup.dialog-2.0.0.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/rup.feedback-2.0.0.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/rup.grid-2.0.0.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/rup.lang-2.0.0.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/rup.maint-2.0.0.js" type="text/javascript"></script>
  7. 7. Migración v2.0.0 4/25<script src="${staticsUrl}/rup/scripts/rup.menu-2.0.0.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/rup.message-2.0.0.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/rup.tabs-2.0.0.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/rup.time-2.0.0.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/rup.toolbar-2.0.0.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/rup.tooltip-2.0.0.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/rup.upload-2.0.0.js" type="text/javascript"></script>Añadir a continuación las entradas de los nuevos patrones:<script src="${staticsUrl}/rup/scripts/rup.upload-2.0.0.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/rup.validate-2.0.0.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/rup.wizard-2.0.0.js" type="text/javascript"></script>Añadir a continuación la siguiente sección nueva:<!-- Ajustes de compatibilidad de menú--><script src="${staticsUrl}/rup/scripts/core/jquery-1.7.2.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/core/ui/menu/jquery.ui.core.menu.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/core/ui/menu/jquery.ui.widget.menu.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/core/ui/menu/jquery.ui.position.menu.js" type="text/javascript"></script><script src="${staticsUrl}/rup/scripts/core/ui/menu/jquery.ui.menu.js" type="text/javascript"></script><script type="text/javascript">widgetMenu = $.noConflict(true);</script>
  8. 8. Migración v2.0.0 5/253 Actualización librerías v2.0.0A continuación se van a exponer las modificaciones que se deben realizar para actualizar las versiones de loscomponentes de servidor que se utilizan en la versión v2.0.0.3.1 DependenciasLa versión v2.0.0 de UDA trae consigo una serie de actualizaciones de las versiones de las librerías que seutilizan. En concreto, las librerías actualizadas son las siguientes:Librerías actualizadas• jackson-core-asl-1.7.2.jar jackson-core-asl-1.9.7.jar• jackson-mapper-asl-1.7.2.jar jackson-mapper-asl-1.9.7.jar• logback-classic-0.9.29.jar logback-classic-1.0.6.jar• logback-core-0.9.29.jar logback-core-1.0.6.jar• spring-aop-3.0.5.RELEASE.jar spring-aop-3.1.1.RELEASE.jar• spring-asm-3.0.5.RELEASE.jar spring-asm-3.1.1.RELEASE.jar• spring-beans-3.0.5.RELEASE.jar spring-beans-3.1.1.RELEASE.jar• spring-context-3.0.5.RELEASE.jar spring-context-3.1.1.RELEASE.jar• spring-context-support-3.0.5.RELEASE.jar spring-context-support-3.1.1.RELEASE.jar• spring-core-3.0.5.RELEASE.jar spring-core-3.1.1.RELEASE.jar• spring-expression-3.0.5.RELEASE.jar spring-expression-3.1.1.RELEASE.jar• spring-jdbc-3.0.5.RELEASE.jar spring-jdbc-3.1.1.RELEASE.jar• spring-orm-3.0.5.RELEASE.jar spring-orm-3.1.1.RELEASE.jar• spring-security-acl-3.0.5.RELEASE.jar spring-security-acl-3.1.0.RELEASE.jar• spring-security-config-3.0.5.RELEASE.jar spring-security-config-3.1.0.RELEASE.jar• spring-security-core-3.0.5.RELEASE.jar spring-security-core-3.1.0.RELEASE.jar• spring-security-taglibs-3.0.5.RELEASE.jar spring-security-taglibs-3.1.0.RELEASE.jar• spring-security-web-3.0.5.RELEASE.jar spring-security-web-3.1.0.RELEASE.jar• spring-tx-3.0.5.RELEASE.jar spring-tx-3.1.1.RELEASE.jar• spring-web-3.0.5.RELEASE.jar spring-web-3.1.1.RELEASE.jar• spring-webmvc-3.0.5.RELEASE.jar spring-webmvc-3.1.1.RELEASE.jar• x38ShLibClasses-1.2.1.jar x38ShLibClasses-2.0.0.jarLibrerías añadidas• spring-security-crypto-3.1.0.RELEASE.jar
  9. 9. Migración v2.0.0 6/25Estos son los pasos a seguir para realizar la actualización de las librerías:1. Actualizar el repositorio de dependencias Maven con la nueva versión 2.0.0, que contiene las nuevasversiones de las librerías [Opcional]. En caso de no realizarlo, el Eclipse se conectará al repositorio deInternet para descargarse las librerías con lo que el proceso será más lento.2. Actualizar el fichero "pom.xml" del proyecto xxxEAR para dejar acorde las dependencias de laslibrerías:...<properties><org.springframework.version>3.1.1.RELEASE</org.springframework.version><org.springframework.security.version>3.1.0.RELEASE</org.springframework.security.version><org.logback.version>1.0.6</org.logback.version>...<com.ejie.x38.version>2.0.0</com.ejie.x38.version></properties>......<dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-mapper-asl</artifactId><version>1.9.7</version></dependency>......3. Cerrar el Eclipse y borrar las librerías del proyecto EAR alojadas en xxxEARAPP_INFlib.4. Abrir el "build.xml" del proyecto xxxEAR con el editor Ant (botón derecho sobre el fichero, OpenWith>Ant Editor)5. Ejecuta la tarea "mavenRunDependencies" (botón derecho sobre la tarea, Run As>Ant Build)actualizando las nuevas librerías xxxEARAPP_INFlib6. Sobre el proyecto xxxEAR pulsar F5 (Refresh)3.2 Ficheros de configuración de SpringLa actualización de la versión de Spring implica la modificación de los esquemas de los ficheros deconfiguración.Las modificaciones se deben de llevar a cabo en los siguientes ficheros:• <xxxYYY>EARClasses/srco beanRefContext.xml• <xxxYYY>EARClasses/src/springo dao-config.xmlo log-config.xmlo security-config.xml
  10. 10. Migración v2.0.0 7/25o service-config.xmlo tx-config.xml• <xxxYYY>War/WebContent/WEB-INF/springo app-config.xmlo log-config.xmlo mvc-config.xmlo security-config.xmlo security-core-config.xmlo validation-config.xmlEn cada uno de estos ficheros se ha de modificar la versión de los esquemas de configuración. La versióndebe de modificarse de la 3.0 existente a la 3.1. Como ejemplo mostramos la modificación realizada en elfichero app-config.xml.<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:context="http://www.springframework.org/schema/context"xmlns:jee="http://www.springframework.org/schema/jee"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:task="http://www.springframework.org/schema/task"xsi:schemaLocation="http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-3.1.xsdhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.1.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.1.xsdhttp://www.springframework.org/schema/jeehttp://www.springframework.org/schema/jee/spring-jee-3.1.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-3.1.xsdhttp://www.springframework.org/schema/taskhttp://www.springframework.org/schema/task/spring-task-3.1.xsd"><import resource="mvc-config.xml" /><import resource="log-config.xml"/><import resource="validation-config.xml"/><import resource="security-core-config.xml"/><import resource="security-config.xml"/></beans>En concreto hay que modificar las líneas
  11. 11. Migración v2.0.0 8/25......http://www.springframework.org/schema/aop/spring-aop-3.0.xsd...http://www.springframework.org/schema/beans/spring-beans-3.0.xsd...http://www.springframework.org/schema/context/spring-context-3.0.xsd...http://www.springframework.org/schema/jee/spring-jee-3.0.xsd...http://www.springframework.org/schema/tx/spring-tx-3.0.xsd...http://www.springframework.org/schema/task/spring-task-3.0.xsd"......Por las siguientes:......http://www.springframework.org/schema/aop/spring-aop-3.1.xsd...http://www.springframework.org/schema/beans/spring-beans-3.1.xsd...http://www.springframework.org/schema/context/spring-context-3.1.xsd...http://www.springframework.org/schema/jee/spring-jee-3.1.xsd...http://www.springframework.org/schema/tx/spring-tx-3.1.xsd...http://www.springframework.org/schema/task/spring-task-3.1.xsd"......
  12. 12. Migración v2.0.0 9/254 Configuración idiomáticaEl capítulo que nos ocupa pretende recopilar los cambios a realizar en una aplicación para utilizar la nuevagestión de idioma implementada en esta versión. Se puede ver más en detalle como se ha implementado estagestión en el anexo Gestión idiomática.A continuación se detalla proyecto a proyecto los cambios necesarios (en el siguiente capítulo se detallará lasmejoras aportadas con dichos cambios):<xxxConfig>o xxx.properties: Contiene variables para la gestión del idioma y del layout que ya no seutilizan ya que se declaran a nivel de War en su mvc-config.xml, por lo que podrían eliminarse.x21aPilotoPatronesWar.default.language=esx21aPilotoPatronesWar.default.layout=horizontal<xxxEAR>o Sustituir la librería de x38 por la nueva versión x38ShLibClasses-2.0.0.jar<xxxEARClasses>o Modificar el fichero service-config.xml el bean appMessageSource añadiendo las líneasdestacadas.<bean id="appMessageSource"class="org.springframework.context.support.ReloadableResourceBundleMessageSource"><property name="basename" value="x21a.i18n" /><property name="defaultEncoding" value="UTF-8" /><<<<propertypropertypropertyproperty namenamenamename===="useCodeAsD"useCodeAsD"useCodeAsD"useCodeAsDefaultMessage"efaultMessage"efaultMessage"efaultMessage" valuevaluevaluevalue===="true""true""true""true" />/>/>/><<<<propertypropertypropertyproperty namenamenamename===="fallbackToSystemLocale""fallbackToSystemLocale""fallbackToSystemLocale""fallbackToSystemLocale" valuevaluevaluevalue===="false""false""false""false" />/>/>/></bean><xxxNombreWAR>o Modificar el fichero mvc-config.xml el bean messageSource añadiendo las líneasdestacadas.<bean id="messageSource"class="org.springframework.context.support.ReloadableResourceBundleMessageSource"><property name="parentMessageSource" ref="appMessageSource" /><property name="basename" value="/WEB-INF/resources/x21aMantenimientos.i18n" /><property name="defaultEncoding" value="UTF-8" /><<<<propertypropertypropertyproperty namenamenamename===="useCodeAsDefaultMessage""useCodeAsDefaultMessage""useCodeAsDefaultMessage""useCodeAsDefaultMessage" valuevaluevaluevalue===="true""true""true""true" />/>/>/><<<<propertypropertypropertyproperty namenamenamename===="fallbackToSystemLocale""fallbackToSystemLocale""fallbackToSystemLocale""fallbackToSystemLocale" valuevaluevaluevalue===="false""false""false""false" />/>/>/></bean>
  13. 13. Migración v2.0.0 10/25o Modificar el fichero mvc-config.xml para sustituir el antiguo interceptor por el nuevo.Teniendo en cuenta que ahora las propiedades del fichero xxx.properties para la gestión deidioma por defecto y layout se configuran mediante propiedades del interceptor.[Viejo]<!-- Configures Handler Interceptors --><mvc:interceptors><!-- Changes the locale when a locale request parameter is sent;e.g./?locale=en --><bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" /></mvc:interceptors><!-- Saves a locale change using a cookie --><bean id="localeResolver"class="org.springframework.web.servlet.i18n.CookieLocaleResolver"><property name="cookieName"><value>language</value></property></bean>[Nuevo]<mvc:interceptors><ref bean="mvcInterceptor"/></mvc:interceptors><bean id="localeResolver"class="org.springframework.web.servlet.i18n.CookieLocaleResolver"><property name="cookieName" value="language" /></bean><bean id="mvcInterceptor" class="com.ejie.x38.control.MvcInterceptor"><property name="defaultLanguage" value="es" /><property name="defaultLayout" value="horizontal" /><property name="availableLangs" value="es,eu,en,fr" /></bean>o Modificar el fichero mvc-config.xml para añadir las nuevas clases de resolución de vistaincluídas en x38.[Viejo]<bean id="viewResolver"class="org.springframework.web.servlet.view.UrlBasedViewResolver"><property name="viewClass"value="org.springframework.web.servlet.view.tiles2.TilesView" /></bean>
  14. 14. Migración v2.0.0 11/25[Nuevo]<bean id="viewResolver"class="com.ejie.x38.control.view.UdaViewResolver"><property name="viewClass" value="com.ejie.x38.control.view.UdaTilesView"/><property name="exposedContextBeanNames" ><list><value>localeResolver</value><value>mvcInterceptor</value></list></property></bean>o Modificar el fichero base-includes.jsp para cambiar las variables utilizadas en laconfiguración del idioma para RUP:[Viejo]<script type="text/javascript">APP_RESOURCES = x21a,CTX_PATH = <%= request.getContextPath()%>/,RUP = ${staticsUrl}/rup,STATICS = ${staticsUrl},DEFAULT_LANGUAGE =DEFAULT_LANGUAGE =DEFAULT_LANGUAGE =DEFAULT_LANGUAGE = "${defaultLanguage}""${defaultLanguage}""${defaultLanguage}""${defaultLanguage}",,,,LAYOUT = "${defaultLayout}",WAR_NAME = "x21aPilotoPatrones",AVAILABLE_LANGS =AVAILABLE_LANGS =AVAILABLE_LANGS =AVAILABLE_LANGS = "es, eu, en, fr""es, eu, en, fr""es, eu, en, fr""es, eu, en, fr";;;;</script>[Nuevo]<script type="text/javascript">APP_RESOURCES = x21a,CTX_PATH = <%= request.getContextPath()%>/,STATICS = ${staticsUrl},RUP = ${staticsUrl}/rup,WAR_NAME = "x21aPilotoPatrones",//model//model//model//modelLAYOUT = "${defaultLayout}",//mvc//mvc//mvc//mvc----config.xmlconfig.xmlconfig.xmlconfig.xmlAVAILABLE_LANGS = "$AVAILABLE_LANGS = "$AVAILABLE_LANGS = "$AVAILABLE_LANGS = "${mvcInterceptor.availableLangs}",{mvcInterceptor.availableLangs}",{mvcInterceptor.availableLangs}",{mvcInterceptor.availableLangs}",LOCALE_COOKIE_NAME =LOCALE_COOKIE_NAME =LOCALE_COOKIE_NAME =LOCALE_COOKIE_NAME = "${locale_cookieName}""${locale_cookieName}""${locale_cookieName}""${locale_cookieName}";;;;LOCALE_PARAM_NAME =LOCALE_PARAM_NAME =LOCALE_PARAM_NAME =LOCALE_PARAM_NAME = "${locale_paramName}""${locale_paramName}""${locale_paramName}""${locale_paramName}";;;;</script>DEFAULT_LANGUAGE (deprecated): Ahora se carga desde el mvc-config.xmlLOCALE_COOKIE_NAME: Nombre de la cookie (definida en mvc-config.xml)LOCALE_PARAM_NAME: Nombre del parámetro de cambio de idioma (definida enmvc-config.xml)
  15. 15. Migración v2.0.0 12/25AVAILABLE_LANGS: Posibles lenguajes de la aplicación (definidos en mvc-config.xml)<xxxStatics>o Modificar en el fichero _layoutLoader.js (existe uno por cada War) para cambiar la invocacióndel componente rup.language [en caso de que se utilice] utilizando la variable definida.[Viejo]$("#x21aPilotoPatronesWar_language").rup_language({languages:["es", "eu", "en", "fr"]});[Nuevo]$("#x21aMantenimientosWar_language").rup_language({languages:$.rup.AVAILABLE_LANGS_ARRAY$.rup.AVAILABLE_LANGS_ARRAY$.rup.AVAILABLE_LANGS_ARRAY$.rup.AVAILABLE_LANGS_ARRAY});
  16. 16. Migración v2.0.0 13/255 SeguridadLa actualización a la versión v2.0.0 de UDA requiere de una serie de ajustes en el componente de seguridad.Las modificaciones son diferentes dependiendo si se está utilizando el Mock de seguridad o el provider deXLNets.En cualquiera de los dos casos es necesario realizar una serie de ajustes en el fichero de configuracióncomún security-core-config.xml. Este fichero se define a nivel de War por lo que estas modificacionesdeberán realizarse tantas veces como módulos web disponga la aplicación.Así pues, se deberá sustituir la definición del bean springSecurityFilterChain existente:<bean id="springSecurityFilterChain"class="org.springframework.security.web.FilterChainProxy"><security:filter-chain-map path-type="ant"><security:filter-chain pattern="/error" filters="none"/><security:filter-chain pattern="/accesRefused" filters="none"/><security:filter-chain pattern="**" filters="exceptionTranslationFilter,securityContextPersistenceFilter,logoutFilter,preAuthenticateProcessingFilter,filterSecurityInterceptor" /><security:filter-chain pattern="/**" filters="exceptionTranslationFilter,securityContextPersistenceFilter,logoutFilter,preAuthenticateProcessingFilter,filterSecurityInterceptor" /></security:filter-chain-map></bean>La nueva configuración será la siguiente:<bean id="springSecurityFilterChain"class="org.springframework.security.web.FilterChainProxy"><security:filter-chain-map request-matcher="regex"><security:filter-chain pattern="/mockLoginPage.*" filters="none"/><security:filter-chain pattern="/mockLoginAjaxPage.*" filters="none"/><security:filter-chain pattern="/error.*" filters="none"/><security:filter-chain pattern="/accessDenied.*" filters="none"/><security:filter-chain pattern="**" filters="exceptionTranslationFilter,securityContextPersistenceFilter,logoutFilter,preAuthenticateProcessingFilter,filterSecurityInterceptor" /></security:filter-chain-map></bean>
  17. 17. Migración v2.0.0 14/25Del mismo modo, se deberá modificar la inicialización del bean myLogoutHandler eliminando la inicializaciónde la propiedad invalidateXlnetSession:<property name="invalidateXlnetSession" value="false" />Y añadiendo la nueva para la propiedad invalidateUserSession. La declaración final sería la siguiente:<bean id="myLogoutHandler" class="com.ejie.x38.security.MyLogoutHandler"><property name="perimetralSecurityWrapper" ref="perimetralSecurityWrapper" /><property name="invalidateHttpSession" value="true" /><property name="invalidateUserSession" value="true" /></bean>5.1 Seguridad mediante el uso del MockEn aquellos desarrollos en los que se esté haciendo uso del mock para simular XLNets cuando la aplicaciónno está desplegada en Ejie, habrá que realizar las siguientes modificaciones en el fichero security-config.xmldel War:Se deberá modificar la configuración del perimetralSecurityWrapper.[Configuración anterior]<bean id="perimetralSecurityWrapper" class="com.ejie.x38.security.PerimetralSecurityWrapperMockImpl"><property name="principal" value="USER_UDA" /><property name="roles"><list><value>UDA</value></list></property><property name="uidSession" value="1290789636844" /></bean>[Configuración nueva]<bean id="perimetralSecurityWrapper" class="com.ejie.x38.security.PerimetralSecurityWrapperMockImpl"><property name="principal"><list><map><entry key="userName" value="USER_UDA"/><entry key="nif" value="12121212j"/><entry key="policy" value="1"/><entry key="position" value="01"/><entry key="isCertificate" value="no"/><entry key="roles"><list>
  18. 18. Migración v2.0.0 15/25<value>UDA</value></list></entry></map></list></property><property name="userChangeUrl"value="http://desarrollo.jakina.ejiedes.net:7001/x21aMantenimientosWar/"/></bean>La nueva implementación permite especificar diferentes usuarios indicando para cada uno de ellos unaconfiguración de seguridad diferente. Estos usuarios son definidos mediante una lista con la que realizará lainicialización de la propiedad principal. De este modo es posible disponer de una serie de usuarios entre loscuales se podrá seleccionar uno de ellos para hacer login al acceder a la aplicación.De este modo para realizar la migración de la configuración de usuarios existente, se deberá de crear porcada usuario una entrada en la lista con la que se inicializa la propiedad principal.<property name="principal"><list><!-- Usuario 1 --><map><entry key="userName" value="USER_1"/>...<entry key="roles"><list><value>ROLE_1</value><value>XXX-IN-0001</value>...</list></entry></map><!-- Usuario 2 --><map><entry key="userName" value="USER_2"/>...<entry key="roles"><list><value>ROLE_1</value><value>XXX-IN-0002</value><value>XXX-IN-0003</value>...</list></entry></map></list></property>Además de la incorporación de múltiples usuarios, el Mock ofrece la posibilidad de definir una url, la propiedaduserChangeLog, que determina la URL a la que debe ir la aplicación si el usuario logado cambia sin previo
  19. 19. Migración v2.0.0 16/25aviso. Esta nueva propiedad, simula el comportamiento que también tiene XLNets para evitar cambios deusuarios en mitad de una ejecución y evitar posibles inconsistencias de identidad (accesos anómalos).Las siguientes modificaciones que se han de realizar son para incluir una página de login simulará el registrode usuarios en la aplicación.Proyecto WEB:• xxxYYYWar/WebContent/WEB-INF/layouts/templateLogin.jsp• xxxYYYWar/WebContent/WEB-INF/layouts/includes/mockLoginPage.styles.inc• xxxYYYWar/WebContent/WEB-INF/views/mockLogin/mockLoginAjaxPage.jsp• xxxYYYWar/WebContent/WEB-INF/views/mockLogin/mockLoginPage.jsp• xxxYYYWar/WebContent/WEB-INF/views/mockLogin/mockLoginPage-includes.jspProyecto de estáticos:• xxxYYYStatics/WebContent/<xxx>/scripts/<xxxYYY>/mockLoginPage.js• xxxYYYStatics/WebContent/<xxx>/styles/mockLoginPage.cssEstos ficheros se pueden encontrar tanto en la aplicación de ejemplo como en el fichero adjunto disponiblesen la web de UDA.Una vez incorporados los nuevos ficheros a la aplicación, es necesario realizar las siguientes modificaciones.En el fichero tiles.xml se deben añadir las entradas correspondientes a la template del mock y a la propiaentrada de la página de login.<definition name="templateLogintemplateLogintemplateLogintemplateLogin" template="/WEB-INF/layouts/templateLogin.jsp"><put-attribute name="header" value="/WEB-INF/layouts/header.jsp"/><put-attribute name="language" value="/WEB-INF/layouts/language.jsp"/><put-attribute name="breadCrumb" value="/WEB-INF/layouts/breadCrumb.jsp" /><put-attribute name="footer" value="/WEB-INF/layouts/footer.jsp"/><put-attribute name="base-includes" value="/WEB-INF/layouts/base-includes.jsp"/><put-attribute name="includes" value=""/></definition><definition name="mockLoginPagemockLoginPagemockLoginPagemockLoginPage" extends="templateLogin"><put-attribute name="content" value="/WEB-INF/views/mockLogin/mockLoginPage.jsp"/><put-attribute name="includes" value="/WEB-INF/views/mockLogin/mockLoginPage-includes.jsp"/></definition><definition name="mockLoginAjaxPagemockLoginAjaxPagemockLoginAjaxPagemockLoginAjaxPage" template="/WEB-INF/views/mockLogin/mockLoginAjaxPage.jsp"/>En el fichero mvc-config.xml se deben añadir los mapeos correspondientes para el login:<mvc:view-controller path="/mockLoginPage" view-name="mockLoginAjaxPage" /><mvc:view-controller path="/mockLoginAjaxPage" view-name="mockLoginAjaxPage" />
  20. 20. Migración v2.0.0 17/25La página de login del mock hace uso de una serie de literales internacionalizados que se deben añadir en losficheros de i18n de la aplicación. La lista de literales de los que hace uso es la siguiente:...app.title=UdamockLogin.selectUser=Elija un UsuariomockLogin.selectedUser=Usuario seleccionado:mockLogin.login_button=Iniciar SesiónlogOut.disconnect=Desconectar...5.2 Seguridad mediante el uso de XLNetsPara usar Xlnets como sistema de seguridad a partir de la versión v.2.0.0, hay que modificar la declaración delbean perimetralSecurityWrapper en el fichero de configuración de Spring security-config.xml.[Viejo]<bean id="perimetralSecurityWrapper" class="com.ejie.x38.security.PerimetralSecurityWrapperN38Impl"><property name="xlnetCachingPeriod" value="120" /></bean>[Nuevo]<bean id="perimetralSecurityWrapper" class="com.ejie.x38.security.PerimetralSecurityWrapperN38Impl"><property name="xlnetCachingPeriod" value="120" /><property name="userChangeUrl" value="/x21aPilotoPatronesWar/" /><property name="anonymousCredentials"><map><entry key="userProfiles" value="UDA" /><!-- entry key="userProfiles" value="udaAnonymousProfile" /--><entry key="position" value="udaAnonymousPosition" /></map></property></bean>
  21. 21. Migración v2.0.0 18/256 Jackson JSON ProcessorAl desarrollar la versión v2.0.0 se ha tratado de mantener el mayor grado de retrocompatibilidad con lasimplementaciones existentes en las aplicaciones que hacen uso del componente de Jackson. Los desarrollosque hacen uso de las funcionalidades del componente Jackson incluido en las versiones anteriores a la v2.0.0de UDA son compatibles siempre y cuando no se hayan utilizado funcionalidades deprecadas en la nuevaversión de Jackson.Sin embargo en la nueva versión de Jackson se han implementado una serie de nuevas funcionalidades quemejoran y potencian los procesos de serialización y deserialización. Del mismo modo, se facilita laconfiguración de ambos procesos permitiendo una mayor flexibilidad en su uso.Para que las aplicaciones puedan beneficiarse de estas mejoras es necesario realizar una serie de ajustes enla configuración de Jackson. Así pues, a pesar de que no es estrictamente necesaria la actualización para quela aplicación siga funcionando de manera correcta, si se recomienda llevarla a cabo para mejorar el procesode desarrollo. Por supuesto esta decisión se deberá tomar de acuerdo a las necesidades puntuales y el gradode desarrollo de las aplicaciones.El proceso de actualización completo se puede encontrar en el anexo Configuración y uso de Jackson. Detodos modos es necesario indicar que existe una característica de Jackson que ha variado su funcionamientoy que requiere de un ajuste en la implementación existente.En versiones posteriores a Jackson 1.9, la anotación @JsonIgnore podía ser utilizada a nivel de método (ej.un método getter de una propiedad). A partir de la versión 1.9 es posible anotar un método pero se tomacomo una anotación de propiedad. Es decir si estamos anotando el método getter mediante @JsonIgnore,esta propiedad no solo se ignorará en el proceso de serialización sino que también será obviada al realizar ladeserialización. Debido a esto es necesario modificar el código existente para utilizar la anotación@JsonProperty(“propiedad”) en el método que queremos que conserve su funcionalidad.Como ejemplo, en el siguiente código realizaremos las anotaciones correspondientes para que la clave deacceso de un alumno no sea procesada durante la serialización pero si en la deserialización. En el códigoexistente solo existiría la anotación @JsonIgnore para evitar la serialización de la propiedad. Con laactualización a la nueva versión de Jackson, se deberá de añadir la anotación resaltada en el setter,@JsonProperty(“password”), para que se continúe realizando la deserialización.publicpublicpublicpublic classclassclassclass Alumno implementsimplementsimplementsimplements java.io.Serializable {privateprivateprivateprivate BigDecimal id;privateprivateprivateprivate String nombre;privateprivateprivateprivate String apellido1;privateprivateprivateprivate String apellido2;privateprivateprivateprivate String password;// Getters y setters de las propiedades@JsonIgnorepublicpublicpublicpublic String getPassword() {returnreturnreturnreturn thisthisthisthis.password;}@JsonProperty@JsonProperty@JsonProperty@JsonProperty(((("password""password""password""password"))))publicpublicpublicpublic voidvoidvoidvoid setPassword(String password) {thisthisthisthis.password = password;}}
  22. 22. Migración v2.0.0 19/257 Envío de ficheros desde un mantenimientoEn actualización de las versiones de Spring y de las librerías jQuery se han introducido una serie de mejoras ymodificaciones en sus funcionalidades. Estos cambios implican realizar una serie de ajustes en el proceso desubida de archivos pero conllevan una simplificación y optimización del mismo.Las mejoras logradas en el proceso son las siguientes:• Se posibilita el envío de ficheros mediante peticiones PUT y POST, dependiendo del tipo de operaciónque sea (edición o inserción). En la anterior versión de Spring no se permitía el envío de ficherosmediante una petición de tipo multipart/form-data utilizando un método HTTP PUT.• Se elimina la necesidad de utilizar las cabeceras que indican el tipo de operación que se estárealizando en las peticiones del mantenimiento.• Las peticiones en las que esté involucrado un campo file se realizan siempre del mismo modo,independientemente de si se haya seleccionado un fichero o no. Esto simplifica la gestión depeticiones en los controllers.La característica principal que permite esta serie de mejoras es la posibilidad de realizar un envío de ficherosmediante PUT. Esto es debido a que en la versión 3.1.1 de Spring se han realizado modificaciones en la claseRequestParamMethodArgumentResolver que permiten que las peticiones multipart/form-data puedan serrealizadas mediante una petición PUT.Aun así, la clase CommonsMultipartResolver encargada de gestionar las peticiones multipart/form-data siguelimitando que estas peticiones deban ser realizadas mediante peticiones POST. Para evitar esto se ha creadouna clase UdaMultipartResolver que extiende de la anterior sobrescribiendo el método de comprobación deuna petición multipart válida.La modificación en la configuración de Spring se deberá realizar en el fichero mvc-config.xml definido a nivelde War, por lo que se deberá realizar esta modificación tantas veces como módulos web, en los que se realicesubida de ficheros, disponga la aplicación.El cambio supone sustituir el uso del CommonsMultipartResolver por el nuevo UdaMultipartResolver:[Viejo]<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>[Nuevo]<bean id="multipartResolver" class="com.ejie.x38.util.UdaMultipartResolver"/>El siguiente paso será modificar en los controllers los métodos encargados de procesar las peticiones deenvío de ficheros.NOTA: Solamente deberán modificarse los métodos involucrados en el proceso del envío de ficheros.En el envío de ficheros desde un formulario de detalle de un mantenimiento se deberán modificar losmétodos que procesan la inserción y modificación de un elemento.En el siguiente código se muestran resaltadas las modificaciones a realizar en las anotaciones de mapeo depeticiones de los métodos de los controllers. Con la nueva versión el método de edición de un elemento se
  23. 23. Migración v2.0.0 20/25mapeará con peticiones que utilicen el método HTTP PUT. En ambos métodos se elimina el uso de lacabecera rup_maint_mode en la petición.[Viejo]@RequestMapping@RequestMapping@RequestMapping@RequestMapping((((method = RequestMethod.method = RequestMethod.method = RequestMethod.method = RequestMethod.POSTPOSTPOSTPOST, headers=, headers=, headers=, headers="rup_maint_mode=add""rup_maint_mode=add""rup_maint_mode=add""rup_maint_mode=add"))))publicpublicpublicpublic @ResponseBody PerfilUsuario add(@ModelAttribute PerfilUsuario perfilUsuario,@RequestParam(value="imagen", required=false)MultipartFile imagen,HttpServletResponse response) {// Implementación de la funcionalidad del método}@RequestMapping@RequestMapping@RequestMapping@RequestMapping(method = RequestMethod.(method = RequestMethod.(method = RequestMethod.(method = RequestMethod.POSTPOSTPOSTPOST, headers=, headers=, headers=, headers="rup_maint_mode=edit""rup_maint_mode=edit""rup_maint_mode=edit""rup_maint_mode=edit"))))publicpublicpublicpublic @ResponseBody PerfilUsuario edit(@ModelAttribute PerfilUsuario perfilUsuario,@RequestParam(value="imagen", required=false)MultipartFile imagen,HttpServletResponse response) {// Implementación de la funcionalidad del método}[Nuevo]@RequestMapping@RequestMapping@RequestMapping@RequestMapping(method = RequestMethod.(method = RequestMethod.(method = RequestMethod.(method = RequestMethod.POSTPOSTPOSTPOST))))publicpublicpublicpublic @ResponseBody PerfilUsuario add(@ModelAttribute PerfilUsuario perfilUsuario,@RequestParam(value="imagen", required=false)MultipartFile imagen,HttpServletResponse response) {// Implementación de la funcionalidad del método}@RequestMapping@RequestMapping@RequestMapping@RequestMapping(method = RequestMethod.(method = RequestMethod.(method = RequestMethod.(method = RequestMethod.PPPPUTUTUTUT))))publicpublicpublicpublic @ResponseBody PerfilUsuario edit(@ModelAttribute PerfilUsuario perfilUsuario,@RequestParam(value="imagen", required=false)MultipartFile imagen,HttpServletResponse response) {// Implementación de la funcionalidad del método}
  24. 24. Migración v2.0.0 21/258 ValidacionesLa nueva versión v2.0.0 de UDA conlleva una profunda remodelación en el sistema de validaciones. Medianteel nuevo sistema se ha buscado reducir el impacto de implementaciones propias en la gestión de validacionesy tratar de dar una solución basada en la especificación JSR-303 para validaciones de beans.Se ha desarrollado también un sistema de validaciones en cliente para tratar de maximizar el rendimiento delas aplicaciones en este aspecto. Para ello se ha tratado de simplificar y optimizar la comunicación delresultado de los procesos de validación entre las partes servidor y cliente.Debido a estos cambios se deben realizar una serie de ajustes para poder beneficiarse de las funcionalidadesy mejoras del nuevo sistema de validaciones. Estas modificaciones se detallan en el anexo Gestión devalidaciones.De todos modos y buscando no perjudicar a las implementaciones existentes, se ha mantenido unaretrocompatibilidad completa con el sistema de validaciones existente, por lo que en caso de no ser necesarioel uso de las nuevas funcionalidades no es obligatorio acometer las actualización a la nueva versión.
  25. 25. Migración v2.0.0 22/259 ExcepcionesLa nueva versión v2.0.0 de UDA presenta una nueva gestión de excepciones.Las aplicaciones desarrolladas con versiones anteriores UDA contaban con una serie de excepciones pordefecto dentro de la librería x38. Mediante el uso de estas clases se conseguía una gestión homogénea entodas las aplicaciones, pero era labor del desarrollador la gestión de cada excepción de la aplicación.A partir de la versión v.2.0.0 la gestión independiza el código de las clases (ya sean controllers, services odaos) de las excepciones ya que éstas se gestionan a través de una clase externa denominada handler (encaso de necesidad también se podría realizar la gestión en el propio controller). La generación de códigomediante el plugin UDA aporta un handler genérico que realiza la gestión por defecto de las excepciones peroserá labor del desarrollador decidir si quiere realizar una gestión particular de cierto tipo de excepciones.El uso de este nuevo sistema de excepciones necesita de una serie de modificaciones para migrar a la nuevagestión. El proceso de migración se detalla en el anexo Gestión de excepciones.De todos modos y buscando no perjudicar a las implementaciones existentes, se ha mantenido unaretrocompatibilidad completa con el sistema de excepciones existente, por lo que en caso de no ser necesarioel uso de las nuevas funcionalidades no es obligatorio acometer las actualización a la nueva versión.

×