Skip to content
Xabi edited this page Jan 17, 2025 · 10 revisions

En esta sección iremos indicando como mantenerse actualizado con las últimas versiones disponibles de los componentes de UDA, es decir, cuando ya se dispone de una aplicación generada y se desea incorporar las últimas actualizaciones.

Para el proceso de actualización se da por hecho lo siguiente:

  • La actualización se realiza sobre una aplicación con la versión previa dentro de la misma mayor version 6.x.x.
  • Los ficheros originales de RUP no han sido modificados.

Si lo que buscas es información sobre cómo mantener tu entorno de desarrollo actualizado, debes consultar la sección Instalar o por el contrario, si lo que quieres es actualizar una aplicación con UDA 4.x.x o 5.x.x, debes de consultar la wiki Actualizar 4.x.x o Actualizar 5.x.x respectivamente.

v6.1.1 (07-enero-2025)

Para actualizar una aplicación UDA a la versión v6.1.1 se deben realizar las siguientes modificaciones.

Generador de código

Para generar código correspondiente a la versión v6.1.1 de UDA, es necesario hacerlo mediante el plugin de generación de código que corresponde a la versión.

Aplicación

Migrar configuración de Jackson de XML a Java

De cara a evitar problemas con los despliegues en los entornos WLS 14 con JDK 11 de EJIE, se debe migrar la configuración a Java. Este cambio también permitirá depurar la configuración en caso necesario.

  • Eliminar el fichero de configuración de Jackson xxxAppWar\WebContent\WEB-INF\spring\jackson-config.xml

  • Eliminar la importación del XML de configuración de Jackson en el fichero xxxAppWar\WebContent\WEB-INF\spring\app-config.xml

<import resource="jackson-config.xml" />
  • Ajustar la ruta de component-scan en el fichero xxxAppWar\WebContent\WEB-INF\spring\mvc-config.xml
<!-- Crea un bean por cada clase anotada con @Component en el paquete 'com.ejie.xxx' -->
<context:component-scan base-package="com.ejie.xxx" />
  • Crear el archivo de configuración JacksonConfig.java en la ruta xxxAppWar\src\com\ejie\xxx\config\
package com.ejie.xxx.config;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import com.ejie.x38.control.method.annotation.RequestJsonBodyMethodArgumentResolver;
import com.ejie.x38.serialization.CustomSerializer;
import com.ejie.x38.serialization.UdaMappingJackson2HttpMessageConverter;
import com.ejie.x38.serialization.UdaModule;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializationFeature;

/**
 * Configuración de Jackson.
 */
@ComponentScan("com.ejie.xxx")
@Configuration
@EnableWebMvc
public class JacksonConfig implements WebMvcConfigurer {

	/**
	 * Serializador utilizado por UDA para serializar unicamente las entidades
	 * deseadas.
	 * 
	 * @return Devuelve el serializador.
	 */
	@Bean
	public CustomSerializer customSerializer() {
		return new CustomSerializer();
	}

	/**
	 * HttpMessageConverter de UDA.
	 * 
	 * @return Devuelve el HttpMessageConverter.
	 */
	@Bean
	public UdaMappingJackson2HttpMessageConverter udaMappingJackson2HttpMessageConverter() {
		UdaMappingJackson2HttpMessageConverter httpMessageConverter = new UdaMappingJackson2HttpMessageConverter();

		List<MediaType> supportedMediaTypes = new ArrayList<>(httpMessageConverter.getSupportedMediaTypes());
		supportedMediaTypes.add(MediaType.valueOf(MediaType.TEXT_PLAIN_VALUE));
		supportedMediaTypes.add(MediaType.valueOf(MediaType.APPLICATION_JSON_VALUE));

		httpMessageConverter.setSupportedMediaTypes(supportedMediaTypes);
		httpMessageConverter.setUdaModule(udaModule());

		return httpMessageConverter;
	}

	/**
	 * Modulo de UDA para Jackson.
	 * 
	 * @return Devuelve el módulo.
	 */
	@Bean
	public UdaModule udaModule() {
		UdaModule udaModule = new UdaModule();

		Map<Class<? extends Object>, JsonSerializer<Object>> serializers = new HashMap<Class<? extends Object>, JsonSerializer<Object>>();
		
		udaModule.setSerializers(serializers);
		udaModule.setSerializationFeature(serializationFeature());
		udaModule.setDeserializationFeature(deserializationFeature());

		return udaModule;
	}

	@Override
	public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
		converters.add(udaMappingJackson2HttpMessageConverter());
	}

	@Override
	public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
		argumentResolvers.add(new RequestJsonBodyMethodArgumentResolver());
	}

	/**
	 * Inclusiones de serializacion.
	 * 
	 * @return Inclusiones a usar.
	 */
	private List<JsonInclude.Include> serializationInclusions() {
		return Arrays.asList(JsonInclude.Include.NON_NULL);
	}

	/**
	 * Features de configuracion de la serialización.
	 * 
	 * @return Features de configuración.
	 */
	private Map<SerializationFeature, Boolean> serializationFeature() {
		return new HashMap<SerializationFeature, Boolean>() {
			{
				put(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true);
			}
		};
	}

	/**
	 * Features de configuracion de la deserializacion.
	 * 
	 * @return Features de configuración.
	 */
	private Map<DeserializationFeature, Boolean> deserializationFeature() {
		return new HashMap<DeserializationFeature, Boolean>() {
			{
				put(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
			}
		};
	}

}

v6.1.0 (25-noviembre-2024)

Para actualizar una aplicación UDA a la versión v6.1.0 se deben realizar las siguientes modificaciones.

Componentes RUP

Se debe sustituir la carpeta xxxStatics\WebContent\rup por la carpeta incluida en el fichero rup.

Generador de código

Para generar código correspondiente a la versión v6.1.0 de UDA, es necesario hacerlo mediante el plugin de generación de código que corresponde a la versión.

Actualizar la versión de x38

Será necesario descargar la nueva versión de x38:

  • Actualizar fichero xxxEar\pom.xml
<properties>
	<com.ejie.x38.version>6.1.0-RELEASE</com.ejie.x38.version>
</properties>

Aplicación

Actualizar facet Dynamic Web Module

La diferencia entre Dynamic Web Module 2.x y 3.1 es significativa en términos de características, funcionalidades y facilidad de uso en el desarrollo de aplicaciones web Java. Estas mejoras responden a la evolución de las especificaciones de Java EE, con la versión 3.0 introduciendo varios cambios importantes que hacen el desarrollo de aplicaciones web más ágil y menos dependiente de configuraciones XML. La versión 3.1 se centra en la funcionalidad y eficiencia de las aplicaciones web.

  • Actualizar ficheros xxxAppWar\.settings\org.eclipse.wst.common.project.facet.core.xml y xxxStatics\.settings\org.eclipse.wst.common.project.facet.core.xml
<installed facet="jst.web" version="3.1"/>
Actualizar las versiones de Spring y Spring Security
  • Actualizar fichero xxxEar\pom.xml
<properties>
	<org.springframework.version>5.3.39</org.springframework.version>
	<org.springframework.security.version>5.8.15</org.springframework.security.version>
</properties>
Corregir funcionamiento de exportación a ODS en la tabla

Cuando la aplicación se despliega en WebLogic 12 o 14, pueden ocurrir errores a la hora de exportar datos de la tabla a un archivo ODS. Para solucionarlo, es necesario incluir en el classpath del servidor las librerías xalan y xercesImpl.

Para ello, se debe incluir la siguiente asignación en el script de arranque startWebLogic presente en el dominio (las rutas son un mero ejemplo):

  • Windows:
@REM ######### export values (PRE_CLASSPATH) #########
set EXT_PRE_CLASSPATH=C:\aplic\n38\lib\xalan\xalan-j_2_7_2\xalan.jar;C:\aplic\n38\lib\xalan\xalan-j_2_7_2\xercesImpl.jar
  • Linux:
# ######### export values (PRE_CLASSPATH) #########
EXT_PRE_CLASSPATH="/aplic/n38/lib/xalan/xalan-j_2_7_2/xalan.jar;/aplic/n38/lib/xalan/xalan-j_2_7_2/xercesImpl.jar"
Eliminar el envío de trazas y métricas a BIG-DATA

En aquellas aplicaciones en las que el envío de trazas y métricas esté activo, es necesario llevar a cabo los siguientes pasos para eliminar el envío puesto que el servicio de métricas, pronto va a ser dado de baja por parte de EJIE y el envío de trazas a BIG-DATA tampoco tiene un futuro a largo plazo:

  • Eliminar del fichero xxxEar\pom.xml
<dependency>
	<groupId>com.ejie</groupId>
	<artifactId>w43ta</artifactId>
	<version>2.4</version>
</dependency>
  • Eliminar del fichero xxxAppWar\WebContent\WEB-INF\spring\mvc-config.xml
<!-- Audit  -->
<bean id="auditController" class="com.ejie.x38.audit.AuditController" />
  • Eliminar del fichero xxxConfig\xxx.properties todas las propiedades que contengan el prefijo momo.
Incluir propiedad en la inicialización de las migas de pan

Si la aplicación fue generada a partir del asistente de generación de código en la versión 6.0.0, es necesario añadir en la configuración de las migas de pan, concretamente en _layoutLoader.js, la propiedad i18nId con el valor que haga referencia al código de la aplicación y nombre del WAR, por ejemplo:

//rastro de migas
$("#xxxAppWar_migas").rup_breadCrumb({
	breadCrumb: {},
	i18nId: "xxxApp_migas"
});
Redirección configurable en error de autenticación

Permite configurar en las propiedades de la aplicación si se desea redireccionar cuando una petición XHR falla por no disponer de credenciales válidas. La propiedad necesaria para definirlo es xhr.redirectOnError y admite valores booleanos.

También se podrá definir a dónde redireccionar mediante xhr.unauthorizedPage, habiendo tres opciones de configuración disponibles:

  • Si no se define, redireccionará al endpoint que está securizado.
  • Definido a referer, redireccionará al origen desde el que se realizó la petición que falló.
  • Definido a una URL, redireccionará siempre a esa URL.

Para que se puedan detectar los errores de autenticación y así redireccionar, es necesario añadir el siguiente controlador del evento ajaxError en el _layoutLoader.js:

$(document).on("ajaxError", function(event, jqXHR, ajaxSettings, thrownError) {
	if (jqXHR.status === 401 || jqXHR.status === 403) {
		window.location.href = jqXHR.getResponseHeader("LOCATION");
	}
});

v6.0.0 (01-julio-2024)

Esta versión trae consigo varias mejoras y cambios que han visto ser necesarios durante las últimas versiones:

  • Spring y Spring Security han sido actualizados a la versión 5, volviendo a contar con soporte de forma oficial
  • Soporte para WebLogic 14
  • Compatibilidad con Tomcat 9
  • Soporte de JDK 11
  • Soporte de aplicaciones mavenizadas
  • Nuevo plugin
  • Posibilidad de usar cualquier IDE que soporte WebLogic 14, aunque oficialmente el soporte y las guías son para Eclipse

La actualización de una aplicación UDA desde una versión 4.x.x a la nueva versión v6.0.0 se recoge de forma más detallada en el siguiente documento y desde una versión 5.x.x en este otro documento.

Siempre es recomendable actualizar lo siguiente:

  • el entorno de desarrollo.
  • el plugin UDA en el IDE de desarrollo.