[jboss-cvs] JBossAS SVN: r99916 - in projects/kernel/branches/resolver: dependency/src/main/java/org/jboss/dependency/plugins/resolver/indexing and 1 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Mon Jan 25 13:44:30 EST 2010
Author: kabir.khan at jboss.com
Date: 2010-01-25 13:44:29 -0500 (Mon, 25 Jan 2010)
New Revision: 99916
Modified:
projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/AbstractController.java
projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/AbstractDependencyResolver.java
projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/indexing/AbstractDependencyResolverMatcher.java
projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/indexing/IndexingDependencyInfoDecorator.java
projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/indexing/IndexingDependencyResolver.java
projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/indexing/NameDependencyResolverMatcher.java
projects/kernel/branches/resolver/kernel/src/main/java/org/jboss/kernel/plugins/resolver/indexing/AbstractClassDependencyResolverMatcher.java
projects/kernel/branches/resolver/kernel/src/main/java/org/jboss/kernel/plugins/resolver/indexing/SupplyDemandDependencyResolverMatcher.java
Log:
Use normal maps in matchers w/ r/w locks and add toString() methods
Modified: projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/AbstractController.java
===================================================================
--- projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/AbstractController.java 2010-01-25 18:17:57 UTC (rev 99915)
+++ projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/AbstractController.java 2010-01-25 18:44:29 UTC (rev 99916)
@@ -1041,6 +1041,7 @@
*/
protected void resolveContexts(ControllerContext context, boolean trace)
{
+ System.out.println("========= Controller - Resolve Contexts " + context);
dependencyResolver.resolveContexts(context, trace);
}
Modified: projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/AbstractDependencyResolver.java
===================================================================
--- projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/AbstractDependencyResolver.java 2010-01-25 18:17:57 UTC (rev 99915)
+++ projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/AbstractDependencyResolver.java 2010-01-25 18:44:29 UTC (rev 99916)
@@ -30,6 +30,7 @@
import org.jboss.dependency.spi.DependencyInfo;
import org.jboss.dependency.spi.DependencyItem;
import org.jboss.logging.Logger;
+import org.jboss.util.JBossObject;
/**
* Class used by the controller to resolve dependencies
@@ -37,7 +38,7 @@
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
* @version $Revision: 1.1 $
*/
-public abstract class AbstractDependencyResolver
+public abstract class AbstractDependencyResolver extends JBossObject
{
protected final Logger log = Logger.getLogger(this.getClass());
Modified: projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/indexing/AbstractDependencyResolverMatcher.java
===================================================================
--- projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/indexing/AbstractDependencyResolverMatcher.java 2010-01-25 18:17:57 UTC (rev 99915)
+++ projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/indexing/AbstractDependencyResolverMatcher.java 2010-01-25 18:44:29 UTC (rev 99916)
@@ -21,17 +21,22 @@
*/
package org.jboss.dependency.plugins.resolver.indexing;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+
import org.jboss.dependency.spi.ControllerState;
import org.jboss.dependency.spi.DependencyItem;
import org.jboss.dependency.spi.resolver.indexing.DependencyResolverMatcher;
+import org.jboss.util.JBossObject;
/**
*
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
* @version $Revision: 1.1 $
*/
-public abstract class AbstractDependencyResolverMatcher implements DependencyResolverMatcher
+public abstract class AbstractDependencyResolverMatcher extends JBossObject implements DependencyResolverMatcher
{
+ private ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
+
protected ControllerState getDependentState(DependencyItem item)
{
if (item.getDependentState() == null)
@@ -45,5 +50,35 @@
throw new IllegalStateException("Inconsistent state cleaning up " + item);
}
+ /**
+ * Lock for read
+ */
+ protected void lockRead()
+ {
+ lock.readLock().lock();
+ }
+ /**
+ * Unlock for read
+ */
+ protected void unlockRead()
+ {
+ lock.readLock().unlock();
+ }
+
+ /**
+ * Lock for write
+ */
+ protected void lockWrite()
+ {
+ lock.writeLock().lock();
+ }
+
+ /**
+ * Unlock for write
+ */
+ protected void unlockWrite()
+ {
+ lock.writeLock().unlock();
+ }
}
Modified: projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/indexing/IndexingDependencyInfoDecorator.java
===================================================================
--- projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/indexing/IndexingDependencyInfoDecorator.java 2010-01-25 18:17:57 UTC (rev 99915)
+++ projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/indexing/IndexingDependencyInfoDecorator.java 2010-01-25 18:44:29 UTC (rev 99916)
@@ -31,6 +31,7 @@
import org.jboss.dependency.spi.DependencyInfo;
import org.jboss.dependency.spi.DependencyItem;
import org.jboss.dependency.spi.LifecycleCallbackItem;
+import org.jboss.util.JBossObject;
import org.jboss.util.JBossStringBuilder;
/**
@@ -39,7 +40,7 @@
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
* @version $Revision: 1.1 $
*/
-public class IndexingDependencyInfoDecorator implements DependencyInfo
+public class IndexingDependencyInfoDecorator extends JBossObject implements DependencyInfo
{
private final IndexingDependencyResolver resolver;
private final ControllerContext context;
@@ -65,27 +66,32 @@
public void addDependsOnMe(DependencyItem dependency)
{
delegate.addDependsOnMe(dependency);
+ flushJBossObjectCache();
}
public void addIDependOn(DependencyItem dependency)
{
delegate.addIDependOn(dependency);
resolver.registerDependency(context, dependency);
+ flushJBossObjectCache();
}
public <T> void addInstallItem(CallbackItem<T> callbackItem)
{
delegate.addInstallItem(callbackItem);
+ flushJBossObjectCache();
}
public void addLifecycleCallback(LifecycleCallbackItem lifecycleCallbackItem)
{
delegate.addLifecycleCallback(lifecycleCallbackItem);
+ flushJBossObjectCache();
}
public <T> void addUninstallItem(CallbackItem<T> callbackItem)
{
delegate.addUninstallItem(callbackItem);
+ flushJBossObjectCache();
}
public Object clone()
@@ -131,22 +137,26 @@
public void removeDependsOnMe(DependencyItem dependency)
{
delegate.removeDependsOnMe(dependency);
+ flushJBossObjectCache();
}
public void removeIDependOn(DependencyItem dependency)
{
delegate.removeIDependOn(dependency);
resolver.unregisterDependency(context, dependency);
+ flushJBossObjectCache();
}
public <T> void removeInstallItem(CallbackItem<T> callbackItem)
{
delegate.removeInstallItem(callbackItem);
+ flushJBossObjectCache();
}
public <T> void removeUninstallItem(CallbackItem<T> callbackItem)
{
delegate.removeUninstallItem(callbackItem);
+ flushJBossObjectCache();
}
public boolean resolveDependencies(Controller controller, ControllerState state)
@@ -168,4 +178,11 @@
{
delegate.toShortString(buffer);
}
+
+ @Override
+ protected void toString(JBossStringBuilder buffer)
+ {
+ buffer.append("delegate:" + delegate.toString());
+ }
+
}
Modified: projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/indexing/IndexingDependencyResolver.java
===================================================================
--- projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/indexing/IndexingDependencyResolver.java 2010-01-25 18:17:57 UTC (rev 99915)
+++ projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/indexing/IndexingDependencyResolver.java 2010-01-25 18:44:29 UTC (rev 99916)
@@ -36,6 +36,7 @@
import org.jboss.dependency.spi.DependencyItem;
import org.jboss.dependency.spi.resolver.indexing.DependencyResolverMatcher;
import org.jboss.logging.Logger;
+import org.jboss.util.JBossStringBuilder;
import org.jboss.util.collection.ConcurrentSet;
/**
@@ -70,11 +71,13 @@
throw new IllegalArgumentException("AbstractDependencyItem should be handled by a " + NameDependencyResolverMatcher.class.getName());
nameMatcher = (NameDependencyResolverMatcher)matcher;
}
+ flushJBossObjectCache();
}
public void removeMatcher(Class<? extends DependencyItem> clazz)
{
matchers.remove(clazz);
+ flushJBossObjectCache();
}
private DependencyResolverMatcher getMatcherForDependencyItem(DependencyItem item)
@@ -149,6 +152,7 @@
{
DependencyResolverMatcher matcher = getMatcherForDependencyItem(item);
matcher.registerDependency(context, item.getClass().cast(item));
+ flushJBossObjectCache();
}
@Override
@@ -156,6 +160,7 @@
{
DependencyResolverMatcher matcher = getMatcherForDependencyItem(item);
matcher.unregisterDependency(context, item);
+ flushJBossObjectCache();
}
@@ -296,4 +301,10 @@
return null;
return new IndexingDependencyInfoDecorator(this, context, info);
}
+
+ @Override
+ protected void toString(JBossStringBuilder buffer)
+ {
+ buffer.append("matchers:" + matchers.toString());
+ }
}
Modified: projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/indexing/NameDependencyResolverMatcher.java
===================================================================
--- projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/indexing/NameDependencyResolverMatcher.java 2010-01-25 18:17:57 UTC (rev 99915)
+++ projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/indexing/NameDependencyResolverMatcher.java 2010-01-25 18:44:29 UTC (rev 99916)
@@ -21,18 +21,17 @@
*/
package org.jboss.dependency.plugins.resolver.indexing;
+import java.util.HashMap;
import java.util.HashSet;
-import java.util.List;
+import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.CopyOnWriteArrayList;
import org.jboss.dependency.plugins.AbstractDependencyItem;
import org.jboss.dependency.spi.ControllerContext;
import org.jboss.dependency.spi.ControllerState;
import org.jboss.dependency.spi.DependencyItem;
+import org.jboss.util.JBossStringBuilder;
/**
*
@@ -41,32 +40,39 @@
*/
public class NameDependencyResolverMatcher extends AbstractDependencyResolverMatcher
{
- private final ConcurrentMap<ControllerState, ConcurrentMap<Object, List<ControllerContext>>> contextsByState = new ConcurrentHashMap<ControllerState, ConcurrentMap<Object, List<ControllerContext>>>();
+ private final Map<ControllerState, Map<Object, Set<ControllerContext>>> contextsByState = new HashMap<ControllerState, Map<Object, Set<ControllerContext>>>();
public Set<ControllerContext> getMatchingContexts(ControllerContext context)
{
- Set<ControllerContext> result = null;
-
- ConcurrentMap<Object, List<ControllerContext>> contextsByName = contextsByState.get(context.getState());
- result = addContextsDependentOn(result, context.getName(), contextsByName);
-
- Set<Object> aliases = context.getAliases();
- if (aliases != null && aliases.size() > 0)
+ lockRead();
+ try
{
- for (Object alias : aliases)
+ Set<ControllerContext> result = null;
+
+ Map<Object, Set<ControllerContext>> contextsByName = contextsByState.get(context.getState());
+ result = addContextsDependentOn(result, context.getName(), contextsByName);
+
+ Set<Object> aliases = context.getAliases();
+ if (aliases != null && aliases.size() > 0)
{
- result = addContextsDependentOn(result, alias, contextsByName);
+ for (Object alias : aliases)
+ {
+ result = addContextsDependentOn(result, alias, contextsByName);
+ }
}
+ return result;
}
- return result;
-
+ finally
+ {
+ unlockRead();
+ }
}
- protected Set<ControllerContext> addContextsDependentOn(Set<ControllerContext> result, Object name, Map<Object, List<ControllerContext>> contextsByName)
+ protected Set<ControllerContext> addContextsDependentOn(Set<ControllerContext> result, Object name, Map<Object, Set<ControllerContext>> contextsByName)
{
if (contextsByName != null && !contextsByName.isEmpty())
{
- List<ControllerContext> contextsForName = contextsByName.get(name);
+ Set<ControllerContext> contextsForName = contextsByName.get(name);
if (contextsForName != null && !contextsForName.isEmpty())
{
if (result == null)
@@ -85,26 +91,31 @@
if (item instanceof AbstractDependencyItem == false)
throw new IllegalStateException("item is not an instance of AbstractDependencyItem");
- Object name = item.getIDependOn();
-
- ConcurrentMap<Object, List<ControllerContext>> contextsByName = contextsByState.get(getDependentState(item));
- if (contextsByName == null)
+ lockWrite();
+ try
{
- contextsByName = new ConcurrentHashMap<Object, List<ControllerContext>>();
- ConcurrentMap<Object, List<ControllerContext>> old = contextsByState.putIfAbsent(getDependentState(item), contextsByName);
- if (old != null)
- contextsByName = old;
+ Object name = item.getIDependOn();
+
+ Map<Object, Set<ControllerContext>> contextsByName = contextsByState.get(getDependentState(item));
+ if (contextsByName == null)
+ {
+ contextsByName = new HashMap<Object, Set<ControllerContext>>();
+ contextsByState.put(getDependentState(item), contextsByName);
+ }
+ Set<ControllerContext> contexts = contextsByName.get(name);
+ if (contexts == null)
+ {
+ contexts = new LinkedHashSet<ControllerContext>();
+ contextsByName.put(name, contexts);
+ }
+ contexts.add(owner);
+
+ flushJBossObjectCache();
}
- List<ControllerContext> contexts = contextsByName.get(name);
- if (contexts == null)
+ finally
{
- contexts = new CopyOnWriteArrayList<ControllerContext>();
- List<ControllerContext> old = contextsByName.putIfAbsent(name, contexts);
- if (old != null)
- contexts = old;
+ unlockWrite();
}
-
- contexts.add(owner);
}
public void unregisterDependency(ControllerContext owner, DependencyItem item)
@@ -114,25 +125,50 @@
if (item instanceof AbstractDependencyItem == false)
throw new IllegalStateException("item is not an instance of AbstractDependencyItem");
- Object name = item.getIDependOn();
-
- ConcurrentMap<Object, List<ControllerContext>> contextsByName = contextsByState.get(getDependentState(item));
- if (contextsByName == null)
- handleCleanUpError(item);
- List<ControllerContext> contexts = contextsByName.get(name);
- if (contexts == null)
- handleCleanUpError(item);
- if (!contexts.remove(owner))
- handleCleanUpError(item);
+ lockWrite();
+ try
+ {
+ Object name = item.getIDependOn();
+
+ Map<Object, Set<ControllerContext>> contextsByName = contextsByState.get(getDependentState(item));
+ if (contextsByName == null)
+ handleCleanUpError(item);
+ Set<ControllerContext> contexts = contextsByName.get(name);
+ if (contexts == null)
+ handleCleanUpError(item);
+ if (!contexts.remove(owner))
+ handleCleanUpError(item);
+
+ flushJBossObjectCache();
+ }
+ finally
+ {
+ unlockWrite();
+ }
}
public boolean hasDependencies(Object name)
{
- for (ConcurrentMap<Object, List<ControllerContext>> contextsByName : contextsByState.values())
+ lockRead();
+ try
{
- if (contextsByName.get(name) != null)
- return true;
+ for (Map<Object, Set<ControllerContext>> contextsByName : contextsByState.values())
+ {
+ if (contextsByName.get(name) != null)
+ return true;
+ }
+ return false;
}
- return false;
+ finally
+ {
+ unlockRead();
+ }
}
+
+ @Override
+ protected void toString(JBossStringBuilder buffer)
+ {
+ buffer.append("contextsByState:" + contextsByState.toString());
+ }
+
}
Modified: projects/kernel/branches/resolver/kernel/src/main/java/org/jboss/kernel/plugins/resolver/indexing/AbstractClassDependencyResolverMatcher.java
===================================================================
--- projects/kernel/branches/resolver/kernel/src/main/java/org/jboss/kernel/plugins/resolver/indexing/AbstractClassDependencyResolverMatcher.java 2010-01-25 18:17:57 UTC (rev 99915)
+++ projects/kernel/branches/resolver/kernel/src/main/java/org/jboss/kernel/plugins/resolver/indexing/AbstractClassDependencyResolverMatcher.java 2010-01-25 18:44:29 UTC (rev 99916)
@@ -21,17 +21,17 @@
*/
package org.jboss.kernel.plugins.resolver.indexing;
+import java.util.HashMap;
import java.util.HashSet;
-import java.util.List;
+import java.util.LinkedHashSet;
+import java.util.Map;
import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.CopyOnWriteArrayList;
import org.jboss.dependency.plugins.resolver.indexing.AbstractDependencyResolverMatcher;
import org.jboss.dependency.spi.ControllerContext;
import org.jboss.dependency.spi.ControllerState;
import org.jboss.dependency.spi.DependencyItem;
+import org.jboss.util.JBossStringBuilder;
/**
*
@@ -40,25 +40,33 @@
*/
public abstract class AbstractClassDependencyResolverMatcher<T extends DependencyItem> extends AbstractDependencyResolverMatcher
{
- private final ConcurrentMap<ControllerState, ConcurrentMap<Class<?>, List<ControllerContext>>> contextsByState = new ConcurrentHashMap<ControllerState, ConcurrentMap<Class<?>, List<ControllerContext>>>();
+ private final Map<ControllerState, Map<Class<?>, Set<ControllerContext>>> contextsByState = new HashMap<ControllerState, Map<Class<?>, Set<ControllerContext>>>();
public Set<ControllerContext> getMatchingContexts(ControllerContext context)
{
- ConcurrentMap<Class<?>, List<ControllerContext>> contextsByClass = contextsByState.get(context.getState());
- if (contextsByClass != null)
+ lockRead();
+ try
{
- if (context.getTarget() == null)
- throw new IllegalStateException("Null target");
- return addMatchingContexts(null, context.getTarget().getClass(), contextsByClass);
+ Map<Class<?>, Set<ControllerContext>> contextsByClass = contextsByState.get(context.getState());
+ if (contextsByClass != null)
+ {
+ if (context.getTarget() == null)
+ throw new IllegalStateException("Null target");
+ return addMatchingContexts(null, context.getTarget().getClass(), contextsByClass);
+ }
+ return null;
}
- return null;
+ finally
+ {
+ unlockRead();
+ }
}
- private Set<ControllerContext> addMatchingContexts(Set<ControllerContext> result, Class<?> clazz, ConcurrentMap<Class<?>, List<ControllerContext>> contextsByClass)
+ private Set<ControllerContext> addMatchingContexts(Set<ControllerContext> result, Class<?> clazz, Map<Class<?>, Set<ControllerContext>> contextsByClass)
{
if (clazz != null)
{
- List<ControllerContext> contexts = contextsByClass.get(clazz);
+ Set<ControllerContext> contexts = contextsByClass.get(clazz);
if (contexts != null)
{
if (result == null)
@@ -88,26 +96,31 @@
if (owner.getController().getStates().isBeforeState(getDependentState(item), ControllerState.INSTANTIATED))
throw new IllegalArgumentException(item + " has a dependent state of " + getDependentState(item) + " which is before the first allowed: " + ControllerState.INSTANTIATED);
- Class<?> clazz = getDependencyClass(item);
-
- ConcurrentMap<Class<?>, List<ControllerContext>> contextsByClass = contextsByState.get(getDependentState(item));
- if (contextsByClass == null)
+ lockWrite();
+ try
{
- contextsByClass = new ConcurrentHashMap<Class<?>, List<ControllerContext>>();
- ConcurrentMap<Class<?>, List<ControllerContext>> old = contextsByState.putIfAbsent(getDependentState(item), contextsByClass);
- if (old != null)
- contextsByClass = old;
+ Class<?> clazz = getDependencyClass(item);
+
+ Map<Class<?>, Set<ControllerContext>> contextsByClass = contextsByState.get(getDependentState(item));
+ if (contextsByClass == null)
+ {
+ contextsByClass = new HashMap<Class<?>, Set<ControllerContext>>();
+ contextsByState.put(getDependentState(item), contextsByClass);
+ }
+ Set<ControllerContext> contexts = contextsByClass.get(clazz);
+ if (contexts == null)
+ {
+ contexts = new LinkedHashSet<ControllerContext>();
+ contextsByClass.put(clazz, contexts);
+ }
+ contexts.add(owner);
+
+ flushJBossObjectCache();
}
- List<ControllerContext> contexts = contextsByClass.get(clazz);
- if (contexts == null)
+ finally
{
- contexts = new CopyOnWriteArrayList<ControllerContext>();
- List<ControllerContext> old = contextsByClass.putIfAbsent(clazz, contexts);
- if (old != null)
- contexts = old;
+ unlockWrite();
}
- contexts.add(owner);
-
}
public void unregisterDependency(ControllerContext owner, DependencyItem item)
@@ -117,21 +130,38 @@
if (!getDependencyItemClass().isAssignableFrom(item.getClass()))
throw new IllegalStateException("item is not an instance of " + getDependencyItemClass().getSimpleName() + ": " + item.getClass());
- ConcurrentMap<Class<?>, List<ControllerContext>> contextsByClass = contextsByState.get(getDependentState(item));
- if (contextsByClass == null)
- handleCleanUpError(item);
-
- //Return if dependency has been unset
- if (getDependencyClass(item) == null)
- return;
- List<ControllerContext> contexts = contextsByClass.get(getDependencyClass(item));
- if (contexts == null)
- handleCleanUpError(item);
- if (!contexts.remove(owner))
- handleCleanUpError(item);
+ lockWrite();
+ try
+ {
+ Map<Class<?>, Set<ControllerContext>> contextsByClass = contextsByState.get(getDependentState(item));
+ if (contextsByClass == null)
+ handleCleanUpError(item);
+
+ //Return if dependency has been unset
+ if (getDependencyClass(item) == null)
+ return;
+ Set<ControllerContext> contexts = contextsByClass.get(getDependencyClass(item));
+ if (contexts == null)
+ handleCleanUpError(item);
+ if (!contexts.remove(owner))
+ handleCleanUpError(item);
+
+ flushJBossObjectCache();
+ }
+ finally
+ {
+ unlockWrite();
+ }
}
protected abstract Class<T> getDependencyItemClass();
protected abstract Class<?> getDependencyClass(DependencyItem item);
+
+ @Override
+ protected void toString(JBossStringBuilder buffer)
+ {
+ buffer.append("contextsByState:" + contextsByState.toString());
+ }
+
}
Modified: projects/kernel/branches/resolver/kernel/src/main/java/org/jboss/kernel/plugins/resolver/indexing/SupplyDemandDependencyResolverMatcher.java
===================================================================
--- projects/kernel/branches/resolver/kernel/src/main/java/org/jboss/kernel/plugins/resolver/indexing/SupplyDemandDependencyResolverMatcher.java 2010-01-25 18:17:57 UTC (rev 99915)
+++ projects/kernel/branches/resolver/kernel/src/main/java/org/jboss/kernel/plugins/resolver/indexing/SupplyDemandDependencyResolverMatcher.java 2010-01-25 18:44:29 UTC (rev 99916)
@@ -22,17 +22,17 @@
package org.jboss.kernel.plugins.resolver.indexing;
import java.util.HashSet;
-import java.util.List;
+import java.util.LinkedHashSet;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.CopyOnWriteArrayList;
import org.jboss.dependency.plugins.resolver.indexing.AbstractDependencyResolverMatcher;
import org.jboss.dependency.spi.ControllerContext;
import org.jboss.dependency.spi.ControllerState;
import org.jboss.dependency.spi.DependencyItem;
import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.util.JBossStringBuilder;
/**
* Simple SupplyDemandDependencyResolverMatcher.
@@ -43,39 +43,68 @@
*/
public class SupplyDemandDependencyResolverMatcher extends AbstractDependencyResolverMatcher
{
- private final ConcurrentMap<ControllerState, List<ControllerContext>> contextsByState = new ConcurrentHashMap<ControllerState, List<ControllerContext>>();
+ private final ConcurrentMap<ControllerState, Set<ControllerContext>> contextsByState = new ConcurrentHashMap<ControllerState, Set<ControllerContext>>();
public Set<ControllerContext> getMatchingContexts(ControllerContext context)
{
if (context instanceof KernelControllerContext == false)
return null;
- List<ControllerContext> contexts = contextsByState.get(context.getState());
- if (contexts != null && contexts.size() > 0)
- return new HashSet<ControllerContext>(contexts);
-
- return null;
+ lockRead();
+ try
+ {
+ Set<ControllerContext> contexts = contextsByState.get(context.getState());
+ if (contexts != null && contexts.size() > 0)
+ return new HashSet<ControllerContext>(contexts);
+
+ return null;
+ }
+ finally
+ {
+ unlockRead();
+ }
}
public void registerDependency(ControllerContext owner, DependencyItem item)
{
- List<ControllerContext> contexts = contextsByState.get(getDependentState(item));
- if (contexts == null)
+ lockWrite();
+ try
{
- contexts = new CopyOnWriteArrayList<ControllerContext>();
- List<ControllerContext> old = contextsByState.putIfAbsent(getDependentState(item), contexts);
- if (old != null)
- contexts = old;
+ Set<ControllerContext> contexts = contextsByState.get(getDependentState(item));
+ if (contexts == null)
+ {
+ contexts = new LinkedHashSet<ControllerContext>();
+ contextsByState.put(getDependentState(item), contexts);
+ }
+ contexts.add(owner);
}
- contexts.add(owner);
+ finally
+ {
+ unlockWrite();
+ }
}
public void unregisterDependency(ControllerContext owner, DependencyItem item)
{
- List<ControllerContext> contexts = contextsByState.get(getDependentState(item));
- if (contexts == null)
- handleCleanUpError(item);
- if (!contexts.remove(owner))
- handleCleanUpError(item);
+ lockWrite();
+ try
+ {
+ Set<ControllerContext> contexts = contextsByState.get(getDependentState(item));
+ if (contexts == null)
+ handleCleanUpError(item);
+ if (!contexts.remove(owner))
+ handleCleanUpError(item);
+ }
+ finally
+ {
+ unlockWrite();
+ }
}
+
+ @Override
+ protected void toString(JBossStringBuilder buffer)
+ {
+ buffer.append("dependencies:" + contextsByState.toString());
+ }
+
}
More information about the jboss-cvs-commits
mailing list