[jboss-cvs] JBossAS SVN: r97566 - in projects/kernel/trunk/dependency/src: test/java/org/jboss/test/dependency/controller/test and 1 other directory.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue Dec 8 16:49:30 EST 2009
Author: alesj
Date: 2009-12-08 16:49:30 -0500 (Tue, 08 Dec 2009)
New Revision: 97566
Modified:
projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/tracker/AbstractContextTracker.java
projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/ContextTrackerTestCase.java
Log:
Fix contexts tracking.
Modified: projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/tracker/AbstractContextTracker.java
===================================================================
--- projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/tracker/AbstractContextTracker.java 2009-12-08 21:27:22 UTC (rev 97565)
+++ projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/tracker/AbstractContextTracker.java 2009-12-08 21:49:30 UTC (rev 97566)
@@ -86,13 +86,17 @@
counter.put(user, count);
- Set<ControllerContext> contexts = u2c.get(user);
- if (contexts == null)
+ // only add new contexts
+ if (count == 0 || (increment && count == 1))
{
- contexts = new HashSet<ControllerContext>();
- u2c.put(user, contexts);
+ Set<ControllerContext> contexts = u2c.get(user);
+ if (contexts == null)
+ {
+ contexts = new HashSet<ControllerContext>();
+ u2c.put(user, contexts);
+ }
+ contexts.add(context);
}
- contexts.add(context);
}
finally
{
@@ -111,6 +115,7 @@
{
check(context, user);
+ boolean removeContext = true;
lockWrite();
try
{
@@ -118,26 +123,32 @@
if (counter != null)
{
Integer count = counter.get(user);
- if (count == null || count == 0 || (count == 1 && decrement))
+ if (count == null || count == 0 || (decrement && count == 1))
{
counter.remove(user);
if (counter.isEmpty())
c2u.remove(context);
}
- else if (decrement)
+ else
{
- counter.put(user, --count);
+ if (decrement)
+ counter.put(user, --count);
+
+ removeContext = false; // we are still in use
}
}
- Set<ControllerContext> contexts = u2c.get(user);
- if (contexts != null)
+ if (removeContext)
{
- contexts.remove(context);
+ Set<ControllerContext> contexts = u2c.get(user);
+ if (contexts != null)
+ {
+ contexts.remove(context);
- if (contexts.isEmpty())
- u2c.remove(user);
+ if (contexts.isEmpty())
+ u2c.remove(user);
+ }
}
}
finally
Modified: projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/ContextTrackerTestCase.java
===================================================================
--- projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/ContextTrackerTestCase.java 2009-12-08 21:27:22 UTC (rev 97565)
+++ projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/ContextTrackerTestCase.java 2009-12-08 21:49:30 UTC (rev 97566)
@@ -22,6 +22,7 @@
package org.jboss.test.dependency.controller.test;
import java.util.Collections;
+import java.util.Set;
import junit.framework.Test;
@@ -32,10 +33,10 @@
import org.jboss.dependency.spi.tracker.ContextTracking;
import org.jboss.metadata.plugins.loader.memory.MemoryMetaDataLoader;
import org.jboss.metadata.plugins.repository.basic.BasicMetaDataRepository;
+import org.jboss.metadata.spi.loader.MutableMetaDataLoader;
import org.jboss.metadata.spi.repository.MutableMetaDataRepository;
import org.jboss.metadata.spi.retrieval.MetaDataRetrieval;
import org.jboss.metadata.spi.scope.ScopeKey;
-import org.jboss.metadata.spi.loader.MutableMetaDataLoader;
import org.jboss.test.dependency.controller.support.TrackerAction;
/**
@@ -154,6 +155,32 @@
testContexts(a, b, 1);
}
+ public void testMultipleUsage() throws Throwable
+ {
+ ControllerContext used = assertInstallContext("a");
+ Object user = new Object();
+ ContextTracker ct = createContextTracker();
+
+ ct.incrementUsedBy(used, user);
+ ct.incrementUsedBy(used, user);
+ Set<ControllerContext> contexts = ct.getUsedContexts(user);
+ assertEquals(Collections.singleton(used), contexts);
+ Set<Object> users = ct.getUsers(used);
+ assertEquals(Collections.singleton(user), users);
+
+ ct.decrementUsedBy(used, user);
+ contexts = ct.getUsedContexts(user);
+ assertEquals(Collections.singleton(used), contexts);
+ users = ct.getUsers(used);
+ assertEquals(Collections.singleton(user), users);
+
+ ct.decrementUsedBy(used, user);
+ contexts = ct.getUsedContexts(user);
+ assertEquals(Collections.<ControllerContext>emptySet(), contexts);
+ users = ct.getUsers(used);
+ assertEquals(Collections.emptySet(), users);
+ }
+
// --- helpers
protected void testContexts(ControllerContext a, ControllerContext b, int count) throws Throwable
More information about the jboss-cvs-commits
mailing list