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