[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 );