Skip to content

Commit 82a9d0e

Browse files
authored
fix: Plugin config loading in Micronaut beans (#13388)
This commit changes the behavior of the GrailsApplicationPostProcessor so that it no longer creates a new plugin manager if a plugin manager already exists in the application context. Resolves #11767 Related grails/grails-functional-tests#208
1 parent 7bc852a commit 82a9d0e

File tree

2 files changed

+18
-37
lines changed

2 files changed

+18
-37
lines changed

grails-core/src/main/groovy/grails/boot/config/GrailsApplicationPostProcessor.groovy

Lines changed: 9 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -68,15 +68,10 @@ class GrailsApplicationPostProcessor implements BeanDefinitionRegistryPostProces
6868

6969
GrailsApplicationPostProcessor(GrailsApplicationLifeCycle lifeCycle, ApplicationContext applicationContext, Class...classes) {
7070
this.lifeCycle = lifeCycle
71-
if(lifeCycle instanceof GrailsApplicationClass) {
72-
this.applicationClass = (GrailsApplicationClass)lifeCycle
73-
}
74-
else {
75-
this.applicationClass = null
76-
}
77-
this.classes = classes != null ? classes : [] as Class[]
78-
grailsApplication = applicationClass != null ? new DefaultGrailsApplication(applicationClass) : new DefaultGrailsApplication()
79-
pluginManager = new DefaultGrailsPluginManager(grailsApplication)
71+
this.applicationClass = lifeCycle instanceof GrailsApplicationClass ? (GrailsApplicationClass) lifeCycle : null
72+
this.classes = classes ?: [] as Class[]
73+
this.grailsApplication = applicationClass ? new DefaultGrailsApplication(applicationClass) : new DefaultGrailsApplication()
74+
this.pluginManager = applicationContext?.getBeanNamesForType(GrailsPluginManager) ? applicationContext.getBean(GrailsPluginManager) : new DefaultGrailsPluginManager(grailsApplication)
8075
if(applicationContext != null) {
8176
setApplicationContext(applicationContext)
8277
}
@@ -290,30 +285,22 @@ class GrailsApplicationPostProcessor implements BeanDefinitionRegistryPostProces
290285
}
291286
}
292287

293-
@SuppressWarnings("GrMethodMayBeStatic")
294288
private void loadPluginConfigurationsToMicronautContext(ConfigurableApplicationContext applicationContext) {
295-
String[] beanNames = applicationContext.getBeanNamesForType(GrailsPluginManager)
296-
if (beanNames.length == 0) {
297-
// do not continue if PluginManager is not available
289+
ConfigurableApplicationContext parentApplicationContext = (ConfigurableApplicationContext) applicationContext.parent
290+
if (!parentApplicationContext) {
291+
// No Micronaut parent context, return early
298292
return
299293
}
300-
301-
GrailsPluginManager pluginManager = applicationContext.getBean(GrailsPluginManager)
302-
ConfigurableApplicationContext parentApplicationContext = (ConfigurableApplicationContext) applicationContext.parent
303294
ConfigurableEnvironment parentContextEnv = parentApplicationContext.getEnvironment()
304295
if (parentContextEnv instanceof MicronautEnvironment) {
305-
if (log.isDebugEnabled()) {
306-
log.debug("Loading configurations from the plugins to the parent Micronaut context")
307-
}
296+
log.debug('Loading configurations from the plugins to the parent Micronaut context')
308297
final io.micronaut.context.env.Environment micronautEnv = ((io.micronaut.context.env.Environment) parentContextEnv.getEnvironment())
309298
final GrailsPlugin[] plugins = pluginManager.allPlugins
310299
Integer priority = AbstractPropertySourceLoader.DEFAULT_POSITION
311300
Arrays.stream(plugins)
312301
.filter({ GrailsPlugin plugin -> plugin.propertySource != null })
313302
.forEach({ GrailsPlugin plugin ->
314-
if (log.isDebugEnabled()) {
315-
log.debug("Loading configurations from {} plugin to the parent Micronaut context", plugin.name)
316-
}
303+
log.debug('Loading configurations from {} plugin to the parent Micronaut context', plugin.name)
317304
micronautEnv.addPropertySource(PropertySource.of("grails.plugins.$plugin.name", (Map) plugin.propertySource.source, --priority))
318305
})
319306
micronautEnv.refresh()

grails-core/src/test/groovy/org/grails/plugins/GrailsPluginConfigurationClass.groovy

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
package org.grails.plugins
22

33
import grails.boot.config.GrailsAutoConfiguration
4-
import grails.core.DefaultGrailsApplication
54
import grails.core.GrailsApplication
65
import grails.plugins.GrailsPlugin
76
import grails.plugins.GrailsPluginManager
87
import groovy.transform.CompileStatic
9-
import org.grails.plugins.DefaultGrailsPlugin
10-
import org.grails.plugins.MockGrailsPluginManager
118
import org.springframework.context.annotation.Bean
129
import org.springframework.context.annotation.Configuration
1310
import org.springframework.core.io.FileSystemResource
@@ -24,17 +21,17 @@ class GrailsPluginConfigurationClass extends GrailsAutoConfiguration {
2421

2522
@Bean(name = "grailsPluginManager")
2623
GrailsPluginManager getGrailsPluginManager() {
27-
String tempDir = System.getProperty("java.io.tmpdir")
28-
GrailsApplication grailsApplication = new DefaultGrailsApplication()
29-
final MockGrailsPluginManager pluginManager = new MockGrailsPluginManager(grailsApplication)
30-
final List<DefaultGrailsPlugin> plugins = createGrailsPlugins(grailsApplication)
31-
plugins.forEach({ plugin -> pluginManager.registerMockPlugin((GrailsPlugin) plugin)})
32-
return pluginManager
24+
MockGrailsPluginManager pluginManager = new MockGrailsPluginManager()
25+
createGrailsPlugins(pluginManager.application).each {
26+
pluginManager.registerMockPlugin(it)
27+
}
28+
pluginManager
3329
}
3430

35-
private List<DefaultGrailsPlugin> createGrailsPlugins(DefaultGrailsApplication grailsApplication) {
31+
private List<GrailsPlugin> createGrailsPlugins(GrailsApplication grailsApplication) {
3632
final String grailsVersion = '4.0.1'
3733
def gcl = new GroovyClassLoader()
34+
3835
GrailsPlugin plugin = new MockTestGrailsPlugin(gcl.parseClass("""class TestGrailsPlugin {
3936
def version = '1.0.0'
4037
def grailsVersion = '$grailsVersion'
@@ -45,7 +42,8 @@ class GrailsPluginConfigurationClass extends GrailsAutoConfiguration {
4542
def version = '1.0.0'
4643
def grailsVersion = '$grailsVersion'
4744
}"""), grailsApplication)
48-
[plugin, plugin2]
45+
46+
List<GrailsPlugin>.of(plugin, plugin2)
4947
}
5048

5149
class MockTestGrailsPlugin extends DefaultGrailsPlugin {
@@ -82,10 +80,6 @@ class GrailsPluginConfigurationClass extends GrailsAutoConfiguration {
8280

8381
class MockTestTwoGrailsPlugin extends DefaultGrailsPlugin {
8482

85-
MockTestTwoGrailsPlugin(Class<?> pluginClass, Resource resource, GrailsApplication application) {
86-
super(pluginClass, resource, application)
87-
}
88-
8983
MockTestTwoGrailsPlugin(Class<?> pluginClass, GrailsApplication application) {
9084
super(pluginClass, application)
9185
}

0 commit comments

Comments
 (0)