Skip to content

Commit

Permalink
Reduce DomainClass autowiring call overhead (it showed up in top bloc…
Browse files Browse the repository at this point in the history
…king methods while profiling)

Conflicts:

	grails-core/src/main/groovy/org/codehaus/groovy/grails/commons/spring/GrailsRuntimeConfigurator.java
  • Loading branch information
lhotari committed Apr 27, 2012
1 parent 5e026c8 commit 8e29470
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 5 deletions.
Expand Up @@ -93,6 +93,7 @@ public enum Environment {
TEST_ENVIRONMENT_SHORT_NAME, Environment.TEST.getName());
private static Holder<Environment> cachedCurrentEnvironment = new Holder<Environment>("Environment");
private static final boolean cachedHasGrailsHome = System.getProperty("grails.home") != null;
private static boolean initializingState = false;
private String name;

Environment() {
Expand Down Expand Up @@ -400,8 +401,14 @@ public static boolean isInteractiveMode() {
* @return Whether interactive mode is enabled
*/
public static boolean isInitializing() {
return Boolean.getBoolean(INITIALIZING);

This comment has been minimized.

Copy link
@lhotari

lhotari Apr 27, 2012

Author Contributor

This used to be a bug. Autowiring stopped working in other Grails apps in the same JVM while some Grails app was starting up. This change also fixes that problem.

return initializingState;
}

public static void setInitializing(boolean initializing) {
initializingState=initializing;
System.setProperty(INITIALIZING, String.valueOf(initializing));
}

/**
* @return true if the reloading agent is active
*/
Expand Down
Expand Up @@ -166,9 +166,9 @@ public WebApplicationContext configure(ServletContext context, boolean loadExter

application.setMainContext(webSpringConfig.getUnrefreshedApplicationContext());

System.setProperty(Environment.INITIALIZING, "true");
Environment.setInitializing(true);
ctx = (WebApplicationContext) webSpringConfig.getApplicationContext();
System.setProperty(Environment.INITIALIZING, "");
Environment.setInitializing(false);

pluginManager.setApplicationContext(ctx);
pluginManager.doDynamicMethods();
Expand Down
Expand Up @@ -182,6 +182,9 @@ protected boolean isExcludedFromDependencyCheck(PropertyDescriptor pd) {
@Override
public void autowireBeanProperties(Object existingBean, int autowireMode,
boolean dependencyCheck) throws BeansException {
if(Environment.isInitializing()) {
return;
}
if(autowireMode == AUTOWIRE_BY_NAME) {
if(DISABLE_AUTOWIRE_BY_NAME_OPTIMIZATIONS || dependencyCheck || existingBean instanceof Aware) {
super.autowireBeanProperties(existingBean, autowireMode, dependencyCheck);
Expand Down
Expand Up @@ -203,9 +203,11 @@ class DomainClassGrailsPlugin {
return gormValidationApi
}
}

AutowireCapableBeanFactory autowireCapableBeanFactory=ctx.autowireCapableBeanFactory
int byName=AutowireCapableBeanFactory.AUTOWIRE_BY_NAME
metaClass.static.autowireDomain = { instance ->
if(!Environment.isInitializing())
ctx.autowireCapableBeanFactory.autowireBeanProperties(instance,AutowireCapableBeanFactory.AUTOWIRE_BY_NAME, false)
autowireCapableBeanFactory.autowireBeanProperties(instance, byName, false)
}
}
}
Expand Down

0 comments on commit 8e29470

Please sign in to comment.