Skip to content

Commit 42aa892

Browse files
author
graeme
committed
fix for GRAILS-1756
git-svn-id: https://svn.codehaus.org/grails/trunk@6294 1cfb16fd-6d17-0410-8ff1-b7e8e1e2867d
1 parent 84f108e commit 42aa892

File tree

3 files changed

+29
-9
lines changed

3 files changed

+29
-9
lines changed

src/commons/org/codehaus/groovy/grails/commons/spring/GrailsRuntimeConfigurator.java

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,29 +20,35 @@
2020
import org.apache.commons.logging.Log;
2121
import org.apache.commons.logging.LogFactory;
2222
import org.codehaus.groovy.grails.commons.*;
23+
import org.codehaus.groovy.grails.exceptions.GrailsConfigurationException;
2324
import org.codehaus.groovy.grails.plugins.DefaultGrailsPluginManager;
2425
import org.codehaus.groovy.grails.plugins.GrailsPluginManager;
2526
import org.codehaus.groovy.grails.plugins.PluginManagerHolder;
26-
import org.codehaus.groovy.grails.exceptions.GrailsConfigurationException;
2727
import org.springframework.aop.framework.ProxyFactoryBean;
2828
import org.springframework.aop.target.HotSwappableTargetSource;
29+
import org.springframework.beans.BeansException;
2930
import org.springframework.beans.factory.config.BeanDefinition;
31+
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
3032
import org.springframework.beans.factory.config.MethodInvokingFactoryBean;
3133
import org.springframework.beans.factory.config.RuntimeBeanReference;
3234
import org.springframework.beans.factory.support.ManagedList;
3335
import org.springframework.beans.factory.xml.XmlBeanFactory;
34-
import org.springframework.beans.BeansException;
3536
import org.springframework.context.ApplicationContext;
3637
import org.springframework.context.ApplicationContextAware;
38+
import org.springframework.context.ConfigurableApplicationContext;
3739
import org.springframework.core.io.Resource;
3840
import org.springframework.mock.web.MockServletContext;
3941
import org.springframework.transaction.interceptor.TransactionProxyFactoryBean;
4042
import org.springframework.util.Assert;
43+
import org.springframework.util.ClassUtils;
4144
import org.springframework.web.context.WebApplicationContext;
4245

4346
import javax.servlet.ServletContext;
4447
import java.io.IOException;
45-
import java.util.*;
48+
import java.util.Collection;
49+
import java.util.Iterator;
50+
import java.util.List;
51+
import java.util.Properties;
4652

4753
/**
4854
* A class that handles the runtime configuration of the Grails ApplicationContext
@@ -76,8 +82,9 @@ public class GrailsRuntimeConfigurator implements ApplicationContextAware {
7682
private ApplicationContext parent;
7783
private boolean parentDataSource;
7884
private GrailsPluginManager pluginManager;
85+
private boolean loadExternalPersistenceConfig;
7986

80-
public GrailsRuntimeConfigurator(GrailsApplication application) {
87+
public GrailsRuntimeConfigurator(GrailsApplication application) {
8188
this(application, null);
8289
}
8390

@@ -332,7 +339,8 @@ private void doPostResourceConfiguration(RuntimeSpringConfiguration springConfig
332339
if(springResources.exists()) {
333340
LOG.debug("[RuntimeConfiguration] Configuring additional beans from " +springResources.getURL());
334341
XmlBeanFactory xmlBf = new XmlBeanFactory(springResources);
335-
xmlBf.setBeanClassLoader(Thread.currentThread().getContextClassLoader());
342+
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
343+
xmlBf.setBeanClassLoader(classLoader);
336344
String[] beanNames = xmlBf.getBeanDefinitionNames();
337345
LOG.debug("[RuntimeConfiguration] Found ["+beanNames.length+"] beans to configure");
338346
for (int k = 0; k < beanNames.length; k++) {
@@ -345,8 +353,15 @@ private void doPostResourceConfiguration(RuntimeSpringConfiguration springConfig
345353
BeanDefinition bd = xmlBf.getBeanDefinition(beanNames[k]);
346354

347355
springConfig.addBeanDefinition(beanNames[k], bd);
356+
Class beanClass = ClassUtils.forName(bd.getBeanClassName(), classLoader);
357+
if(BeanFactoryPostProcessor.class.isAssignableFrom(beanClass)) {
358+
((ConfigurableApplicationContext)springConfig.getUnrefreshedApplicationContext())
359+
.addBeanFactoryPostProcessor((BeanFactoryPostProcessor)xmlBf.getBean(beanNames[k]));
360+
}
348361
}
349362

363+
364+
350365
}
351366
else if(LOG.isDebugEnabled()) {
352367
LOG.debug("[RuntimeConfiguration] " + GrailsRuntimeConfigurator.SPRING_RESOURCES_XML + " not found. Skipping configuration.");
@@ -357,12 +372,15 @@ else if(LOG.isDebugEnabled()) {
357372
bb.setSpringConfig(springConfig);
358373
bb.loadBeans(groovySpringResources);
359374
}
375+
376+
360377
} catch (Exception ex) {
361378
LOG.warn("[RuntimeConfiguration] Unable to perform post initialization config: " + SPRING_RESOURCES_XML , ex);
362379
}
363380
}
364381

365382
public void setLoadExternalPersistenceConfig(boolean b) {
383+
this.loadExternalPersistenceConfig = b;
366384
}
367385

368386
public void setPluginManager(GrailsPluginManager manager) {

src/groovy/org/codehaus/groovy/grails/plugins/CoreGrailsPlugin.groovy

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import org.springframework.beans.factory.config.MethodInvokingFactoryBean
2323
import org.codehaus.groovy.runtime.InvokerHelper
2424
import org.codehaus.groovy.grails.commons.cfg.GrailsOverrideConfigurer
2525
import org.codehaus.groovy.grails.commons.cfg.GrailsPlaceholderConfigurer
26-
import org.codehaus.groovy.grails.orm.support.TransactionManagerPostProcessor;
2726

2827
/**
2928
* A plug-in that configures the core shared beans within the Grails application context
@@ -40,8 +39,8 @@ class CoreGrailsPlugin {
4039
def doWithSpring = {
4140
addBeanFactoryPostProcessor(new GrailsOverrideConfigurer())
4241
addBeanFactoryPostProcessor(new GrailsPlaceholderConfigurer())
43-
addBeanFactoryPostProcessor(new TransactionManagerPostProcessor())
44-
42+
43+
4544
classLoader(MethodInvokingFactoryBean) {
4645
targetObject = ref("grailsApplication", true)
4746
targetMethod = "getClassLoader"

src/groovy/org/codehaus/groovy/grails/plugins/datasource/DataSourceGrailsPlugin.groovy

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import org.apache.commons.dbcp.BasicDataSource
2020
import org.springframework.jdbc.datasource.DriverManagerDataSource
2121
import org.springframework.jndi.JndiObjectFactoryBean
2222
import javax.sql.DataSource
23+
import org.codehaus.groovy.grails.orm.support.TransactionManagerPostProcessor
2324

2425
/**
2526
* A plug-in that handles the configuration of Hibernate within Grails
@@ -35,7 +36,9 @@ class DataSourceGrailsPlugin {
3536
def watchedResources = "**/grails-app/conf/DataSource.groovy"
3637

3738
def doWithSpring = {
38-
def ds = application.config.dataSource
39+
addBeanFactoryPostProcessor(new TransactionManagerPostProcessor())
40+
41+
def ds = application.config.dataSource
3942
if(ds || application.domainClasses.size() > 0) {
4043
if(ds.jndiName) {
4144
dataSource(JndiObjectFactoryBean) {

0 commit comments

Comments
 (0)