Grails 7 Holders.config.merge() issue in tomcat when multiple Grails 7.1.0 Apps are deployed in apache-tomcat-10.1.50

Abierto
#15,840 3 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
42/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Tranquilo
Stack tecnológico
java
Área
backend

Línea de trabajo

Comienza con la lógica de recarga reportada alrededor de Holders.config.clear(), Holders.config.merge(initialConfig) y PropertySourcesConfig, comparando el comportamiento entre una y varias aplicaciones Grails en Tomcat 10.1.50. Reprodúcelo con Grails 7.1.0 y JDK 17 o posterior; se considera terminado cuando la configuración original de application.groovy, application.yml, archivos externos y otras fuentes de inicio se restaura para cada aplicación desplegada.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Expected Behavior

We are encountering an issue with Holders.config.merge() in Grails 7.1.0 when multiple Grails applications are deployed on the same Apache Tomcat 10.1.50 instance.
The problem does not occur when only a single Grails application is deployed. The same code has been working reliably in Grails 6.x without any issues.
Environment

Use Case
Our application has a scheduled CRON job that periodically reloads application-specific configuration values from a database.
The reload process is designed to preserve the original application configuration and then merge it back after refreshing dynamic configuration values.
The workflow is:

  1. Back up the original configuration (initialConfig) that contains values loaded from:
  • application.groovy / application.yml
  • External filesystem configuration
  • Other startup configuration sources
  1. Clear the current configuration using:
  • Holders.config.clear()

3.Restore the original configuration using:
Holders.config.merge(initialConfig)

Expected Behavior:

After calling: Holders.config.merge(initialConfig) all configuration entries stored in initialConfig should be restored into Holders.config.

This behavior works correctly: in In Grails 6.x, whereas in Grails 7.1.0 it works when only a single application is deployed in Tomcat
if we deploy more than one Grails 7.1.0 Holders.config.merge does not correctly restore the configuration.
Instead, the application configuration appears to be lost or emptied, leaving Holders.config in an invalid state. As a result, application functionality dependent on configuration values ant it stops working

Configuration Reload Logic

static PropertySourcesConfig initialConfig = new PropertySourcesConfig()
backupInitialConfiguration()
Holders.config.clear()
// In Grails 7.1.0, when multiple applications are deployed in the same
// Tomcat instance, this call does not restore the configuration correctly.
Holders.config.merge(initialConfig)

//Backup Logic

public void backupInitialConfiguration() {
if (initialConfig?.size() == 0) {
Config config = Holders.config
Map<Object, Object> configMap = [:]

    for (def entry : config) {
        configMap.put(entry.key, config.get(entry.key))
    }

    initialConfig = new PropertySourcesConfig(configMap)
}

}

Actual Behaviour

Mentioned in above section

Steps To Reproduce

It's mentioned in "Expected Behavior" Section

Environment Information

Grails Version: 7.1.0
Tomcat Version: 10.1.50
Deployment Model: Multiple Grails applications deployed in the same Tomcat instance
Java Version: JDK 17 and Above

Example Application

No response

Version

7.1.0

Lenguaje dominante
Groovy
Estrellas
2.9k
Forks
980
Merge medio
2 d 4 h
PR fusionados (30 d)
130

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de apache/grails-core

Todos los issues de apache/grails-core

Issues similares

Más issues de Backend & API Design

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.