[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