[jboss-cvs] JBossAS SVN: r86209 - in projects/microcontainer/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
Mon Mar 23 11:11:04 EDT 2009


Author: adrian at jboss.org
Date: 2009-03-23 11:11:04 -0400 (Mon, 23 Mar 2009)
New Revision: 86209

Modified:
   projects/microcontainer/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractController.java
   projects/microcontainer/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/AbstractDependencyTest.java
   projects/microcontainer/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/RecursiveControllerActionTestCase.java
Log:
[JBMICROCONT-421] - Make the resolved/processing logic more width first to avoid unwanted recursive calls

Modified: projects/microcontainer/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractController.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractController.java	2009-03-23 14:48:14 UTC (rev 86208)
+++ projects/microcontainer/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractController.java	2009-03-23 15:11:04 UTC (rev 86209)
@@ -1039,6 +1039,7 @@
       Set<ControllerContext> resolved = resolveContexts(unresolved, toState, trace);
       if (resolved.isEmpty() == false)
       {
+         Set<ControllerContext> toProcess = new HashSet<ControllerContext>();
          for (ControllerContext context : resolved)
          {
             Object name = context.getName();
@@ -1054,9 +1055,22 @@
             }
             else
             {
-               try
+               toProcess.add(context);
+            }
+         }
+         for (ControllerContext context : toProcess)
+         {
+            Object name = context.getName();
+            try
+            {
+               if (fromState.equals(context.getState()) == false)
                {
                   if (trace)
+                     log.trace("Skipping already installed " + name + " for " + toState.getStateString());
+               }
+               else
+               {
+                  if (trace)
                      log.trace("Dependencies resolved " + name + " for " + toState.getStateString());
 
                   if (incrementState(context, trace))
@@ -1065,12 +1079,13 @@
                      if (trace)
                         log.trace(name + " " + toState.getStateString());
                   }
+                  
                }
-               finally
-               {
-                  installing.remove(context);
-               }
             }
+            finally
+            {
+               installing.remove(context);
+            }
          }
       }
 

Modified: projects/microcontainer/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/AbstractDependencyTest.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/AbstractDependencyTest.java	2009-03-23 14:48:14 UTC (rev 86208)
+++ projects/microcontainer/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/AbstractDependencyTest.java	2009-03-23 15:11:04 UTC (rev 86209)
@@ -60,7 +60,7 @@
       super.setUp();
       controller = new AbstractController();
       Ordering.resetOrder();
-      enableTrace("org.jboss.dependency");
+      //enableTrace("org.jboss.dependency");
    }
    
    protected ControllerContext assertInstall(TestDelegate delegate) throws Throwable

Modified: projects/microcontainer/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/RecursiveControllerActionTestCase.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/RecursiveControllerActionTestCase.java	2009-03-23 14:48:14 UTC (rev 86208)
+++ projects/microcontainer/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/RecursiveControllerActionTestCase.java	2009-03-23 15:11:04 UTC (rev 86209)
@@ -115,13 +115,41 @@
       assertContext(context.child, ControllerState.INSTALLED);
    }
    
+   public void testInstallMany() throws Throwable
+   {
+      TestDelegate[] delegates = new TestDelegate[3];
+      RecursiveControllerContext[] contexts = new RecursiveControllerContext[delegates.length];
+      TestDelegate other = new TestDelegate("Other ");
+      for (int i = 0; i < delegates.length; ++i)
+      {
+         delegates[i] = new TestDelegate("InstallTestRecursive " + i);
+         contexts[i] = new RecursiveControllerContext(delegates[i], this);
+         DependencyItem item = new AbstractDependencyItem(delegates[i].getName(), other.getName(), ControllerState.CREATE, ControllerState.CONFIGURED);
+         contexts[i].getDependencyInfo().addIDependOn(item);
+         assertInstall(contexts[i], ControllerState.CONFIGURED);
+      }
+      
+      TestControllerContext otherContext = new TestControllerContext(other);
+      assertInstall(otherContext, ControllerState.INSTALLED);
+
+      for (int i = 0; i < delegates.length; ++i)
+      {
+         assertContext(contexts[i], ControllerState.INSTALLED);
+      }
+   }
+   
    public void installChild(RecursiveControllerContext context) throws Throwable
    {
+      if (++depth > 1)
+         throw new IllegalStateException("Should not recurse depth=" + depth);
       TestDelegate delegate = new TestDelegate(context.getName() + "Child");
       context.child = new RecursiveControllerContext(delegate, null);
       assertInstall(context.child, ControllerState.INSTALLED);
+      depth--;
    }
    
+   int depth = 0;
+   
    public void uninstallChild(RecursiveControllerContext context)
    {
       try




More information about the jboss-cvs-commits mailing list