[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