Author: simonetripodi
Date: Thu Feb 17 16:58:27 2011
New Revision: 1071695

URL: http://svn.apache.org/viewvc?rev=1071695&view=rev
Log:
RulesBinder reference can be final; the only thing that changes is if users 
decide to change ClassLoader at runtime

Modified:
    
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/DigesterLoader.java
    
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/RulesBinder.java
    
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/ProvidersRegistry.java
    
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/RulesBinderImpl.java
    
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/xmlrules/metaparser/PrefixedRulesBinder.java
    
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/xmlrules/metaparser/WithMemoryRulesBinder.java

Modified: 
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/DigesterLoader.java
URL: 
http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/DigesterLoader.java?rev=1071695&r1=1071694&r2=1071695&view=diff
==============================================================================
--- 
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/DigesterLoader.java
 (original)
+++ 
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/DigesterLoader.java
 Thu Feb 17 16:58:27 2011
@@ -73,7 +73,7 @@ public final class DigesterLoader {
     /**
      * The concrete {@link RulesBinder} implementation.
      */
-    private RulesBinderImpl rulesBinder;
+    private final RulesBinderImpl rulesBinder = new RulesBinderImpl();
 
     /**
      * The URLs of entityValidator that have been registered, keyed by the 
public
@@ -86,8 +86,6 @@ public final class DigesterLoader {
      */
     private final SAXParserFactory factory = SAXParserFactory.newInstance();
 
-    private final Object $lock = new Object();
-
     private final Collection<RulesModule> rulesModules;
 
     private boolean useContextClassLoader;
@@ -352,12 +350,10 @@ public final class DigesterLoader {
         ClassLoader classLoader = this.classLoader != null ? this.classLoader :
             (this.useContextClassLoader ? 
Thread.currentThread().getContextClassLoader() : 
this.getClass().getClassLoader());
 
-        synchronized (this.$lock) {
-            if (this.rulesBinder == null) {
-                this.rulesBinder = new RulesBinderImpl(classLoader);
-                for (RulesModule rulesModule : rulesModules) {
-                    rulesModule.configure(this.rulesBinder);
-                }
+        if (!classLoader.equals(this.rulesBinder.getContextClassLoader())) {
+            this.rulesBinder.initialize(classLoader);
+            for (RulesModule rulesModule : rulesModules) {
+                rulesModule.configure(this.rulesBinder);
             }
         }
 

Modified: 
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/RulesBinder.java
URL: 
http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/RulesBinder.java?rev=1071695&r1=1071694&r2=1071695&view=diff
==============================================================================
--- 
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/RulesBinder.java
 (original)
+++ 
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/RulesBinder.java
 Thu Feb 17 16:58:27 2011
@@ -71,4 +71,11 @@ public interface RulesBinder {
      */
     <T> ConverterBuilder<T> convert(Class<T> type);
 
+    /**
+     * Returns the {@code ClassLoader} used in the current bindings.
+     *
+     * @return The {@code ClassLoader} used in the current bindings.
+     */
+    ClassLoader getContextClassLoader();
+
 }

Modified: 
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/ProvidersRegistry.java
URL: 
http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/ProvidersRegistry.java?rev=1071695&r1=1071694&r2=1071695&view=diff
==============================================================================
--- 
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/ProvidersRegistry.java
 (original)
+++ 
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/ProvidersRegistry.java
 Thu Feb 17 16:58:27 2011
@@ -95,4 +95,9 @@ final class ProvidersRegistry {
 
     }
 
+    public void clear() {
+        this.providers.clear();
+        this.providersIndex.clear();
+    }
+
 }

Modified: 
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/RulesBinderImpl.java
URL: 
http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/RulesBinderImpl.java?rev=1071695&r1=1071694&r2=1071695&view=diff
==============================================================================
--- 
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/RulesBinderImpl.java
 (original)
+++ 
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/RulesBinderImpl.java
 Thu Feb 17 16:58:27 2011
@@ -49,10 +49,16 @@ public final class RulesBinderImpl imple
 
     private final ProvidersRegistry providersRegistry = new 
ProvidersRegistry();
 
-    private final ClassLoader classLoader;
+    private ClassLoader classLoader;
 
-    public RulesBinderImpl(final ClassLoader classLoader) {
+    public void initialize(ClassLoader classLoader) {
         this.classLoader = classLoader;
+        this.providersRegistry.clear();
+        this.errors.clear();
+    }
+
+    public ClassLoader getContextClassLoader() {
+        return this.classLoader;
     }
 
     /**

Modified: 
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/xmlrules/metaparser/PrefixedRulesBinder.java
URL: 
http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/xmlrules/metaparser/PrefixedRulesBinder.java?rev=1071695&r1=1071694&r2=1071695&view=diff
==============================================================================
--- 
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/xmlrules/metaparser/PrefixedRulesBinder.java
 (original)
+++ 
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/xmlrules/metaparser/PrefixedRulesBinder.java
 Thu Feb 17 16:58:27 2011
@@ -19,6 +19,13 @@ final class PrefixedRulesBinder implemen
     /**
      * {@inheritDoc}
      */
+    public ClassLoader getContextClassLoader() {
+        return this.wrappedRulesBinder.getContextClassLoader();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
     public void addError(String messagePattern, Object... arguments) {
         this.wrappedRulesBinder.addError(messagePattern, arguments);
     }

Modified: 
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/xmlrules/metaparser/WithMemoryRulesBinder.java
URL: 
http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/xmlrules/metaparser/WithMemoryRulesBinder.java?rev=1071695&r1=1071694&r2=1071695&view=diff
==============================================================================
--- 
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/xmlrules/metaparser/WithMemoryRulesBinder.java
 (original)
+++ 
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/xmlrules/metaparser/WithMemoryRulesBinder.java
 Thu Feb 17 16:58:27 2011
@@ -52,6 +52,13 @@ class WithMemoryRulesBinder implements R
     /**
      * {@inheritDoc}
      */
+    public ClassLoader getContextClassLoader() {
+        return this.wrappedRulesBinder.getContextClassLoader();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
     public void addError(String messagePattern, Object... arguments) {
         this.wrappedRulesBinder.addError(messagePattern, arguments);
     }


Reply via email to