[jboss-cvs] JBossAS SVN: r101247 - projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Mon Feb 22 10:46:32 EST 2010
Author: kabir.khan at jboss.com
Date: 2010-02-22 10:46:32 -0500 (Mon, 22 Feb 2010)
New Revision: 101247
Modified:
projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractController.java
Log:
[JBKERNEL-92] Make resolveCallbacks() access the callbacks in a thread safe way
Modified: projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractController.java
===================================================================
--- projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractController.java 2010-02-22 13:34:18 UTC (rev 101246)
+++ projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractController.java 2010-02-22 15:46:32 UTC (rev 101247)
@@ -23,6 +23,7 @@
import java.util.Collection;
import java.util.Collections;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
@@ -107,8 +108,8 @@
private final Set<AbstractController> childControllers = new CopyOnWriteArraySet<AbstractController>();
/** The callback items */
- private final Map<Object, Set<CallbackItem<?>>> installCallbacks = new ConcurrentHashMap<Object, Set<CallbackItem<?>>>();
- private final Map<Object, Set<CallbackItem<?>>> uninstallCallbacks = new ConcurrentHashMap<Object, Set<CallbackItem<?>>>();
+ private final Map<Object, Set<CallbackItem<?>>> installCallbacks = new HashMap<Object, Set<CallbackItem<?>>>();
+ private final Map<Object, Set<CallbackItem<?>>> uninstallCallbacks = new HashMap<Object, Set<CallbackItem<?>>>();
/** Whether an on demand context has been enabled */
private boolean onDemandEnabled = true;
@@ -1831,14 +1832,20 @@
* @param isInstallPhase install or uninstall phase
* @return all matching registered callbacks or empty set if no such item
*/
- protected Set<CallbackItem<?>> getCallbacks(Object name, boolean isInstallPhase)
+ protected Set<CallbackItem<?>> getCallbacks(Set<CallbackItem<?>> result, Object name, boolean isInstallPhase)
{
lockRead();
try
{
Map<Object, Set<CallbackItem<?>>> map = (isInstallPhase ? installCallbacks : uninstallCallbacks);
Set<CallbackItem<?>> callbacks = map.get(name);
- return callbacks != null ? callbacks : Collections.<CallbackItem<?>>emptySet();
+ if (callbacks != null)
+ {
+ if (result == null)
+ result = new HashSet<CallbackItem<?>>();
+ result.addAll(callbacks);
+ }
+ return result;
}
finally
{
@@ -1910,20 +1917,16 @@
if (dependencyInfo != null && dependencyInfo.isAutowireCandidate())
{
// match callbacks by name
- existingCallbacks = new HashSet<CallbackItem<?>>();
- existingCallbacks.addAll(getCallbacks(context.getName(), isInstallPhase));
+ existingCallbacks = getCallbacks(existingCallbacks, context.getName(), isInstallPhase);
// match by classes
Collection<Class<?>> classes = getExposedClasses(context);
if (classes != null && classes.isEmpty() == false)
{
for (Class<?> clazz : classes)
{
- existingCallbacks.addAll(getCallbacks(clazz, isInstallPhase));
+ existingCallbacks = getCallbacks(existingCallbacks, clazz, isInstallPhase);
}
}
-
- if (existingCallbacks.isEmpty())
- existingCallbacks = null;
}
if (installs != null || uninstalls != null || existingCallbacks != null)
More information about the jboss-cvs-commits
mailing list