[DIGESTER-163] no needs of RulesBinder lazy loading, no needs to store RulesBinder in ThreadLocal, attempt to resolve concurrent issues
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/digester/trunk@1301815 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/core/src/main/java/org/apache/commons/digester3/binder/AbstractRulesModule.java b/core/src/main/java/org/apache/commons/digester3/binder/AbstractRulesModule.java
index acc128b..3717b38 100644
--- a/core/src/main/java/org/apache/commons/digester3/binder/AbstractRulesModule.java
+++ b/core/src/main/java/org/apache/commons/digester3/binder/AbstractRulesModule.java
@@ -28,26 +28,26 @@
implements RulesModule
{
- private final ThreadLocal<RulesBinder> rulesBinders = new ThreadLocal<RulesBinder>();
+ private RulesBinder rulesBinder;
/**
* {@inheritDoc}
*/
public final void configure( RulesBinder rulesBinder )
{
- if ( rulesBinders.get() != null )
+ if ( this.rulesBinder != null )
{
throw new IllegalStateException( "Re-entry is not allowed." );
}
- rulesBinders.set( rulesBinder );
+ this.rulesBinder = rulesBinder;
try
{
configure();
}
finally
{
- rulesBinders.remove();
+ this.rulesBinder = null;
}
}
@@ -68,7 +68,7 @@
*/
protected void addError( String messagePattern, Object... arguments )
{
- rulesBinders.get().addError( messagePattern, arguments );
+ rulesBinder.addError( messagePattern, arguments );
}
/**
@@ -80,7 +80,7 @@
*/
protected void addError( Throwable t )
{
- rulesBinders.get().addError( t );
+ rulesBinder.addError( t );
}
/**
@@ -91,7 +91,7 @@
*/
protected void install( RulesModule rulesModule )
{
- rulesBinders.get().install( rulesModule );
+ rulesBinder.install( rulesModule );
}
/**
@@ -103,7 +103,7 @@
*/
protected LinkedRuleBuilder forPattern( String pattern )
{
- return rulesBinders.get().forPattern( pattern );
+ return rulesBinder.forPattern( pattern );
}
/**
@@ -113,7 +113,7 @@
*/
protected RulesBinder rulesBinder()
{
- return rulesBinders.get();
+ return rulesBinder;
}
}
diff --git a/core/src/main/java/org/apache/commons/digester3/binder/DigesterLoader.java b/core/src/main/java/org/apache/commons/digester3/binder/DigesterLoader.java
index 7e452e7..9b377ab 100644
--- a/core/src/main/java/org/apache/commons/digester3/binder/DigesterLoader.java
+++ b/core/src/main/java/org/apache/commons/digester3/binder/DigesterLoader.java
@@ -199,6 +199,13 @@
}
this.classLoader = createBinderClassLoader( classLoader );
+
+ rulesBinder.initialize( this.classLoader );
+ for ( RulesModule rulesModule : rulesModules )
+ {
+ rulesModule.configure( rulesBinder );
+ }
+
return this;
}
@@ -594,15 +601,6 @@
*/
public RuleSet createRuleSet()
{
- if ( classLoader != rulesBinder.getContextClassLoader() )
- {
- rulesBinder.initialize( classLoader );
- for ( RulesModule rulesModule : rulesModules )
- {
- rulesModule.configure( rulesBinder );
- }
- }
-
if ( rulesBinder.hasError() )
{
Formatter fmt = new Formatter().format( HEADING );