You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by jw...@apache.org on 2012/08/03 17:59:04 UTC

svn commit: r1369063 - /aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/StartAction.java

Author: jwross
Date: Fri Aug  3 15:59:03 2012
New Revision: 1369063

URL: http://svn.apache.org/viewvc?rev=1369063&view=rev
Log:
ARIES-900: The actual resolution work is no longer done for the root subsystem, although it will still transition to RESOLVING and RESOLVED.

Modified:
    aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/StartAction.java

Modified: aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/StartAction.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/StartAction.java?rev=1369063&r1=1369062&r2=1369063&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/StartAction.java (original)
+++ aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/StartAction.java Fri Aug  3 15:59:03 2012
@@ -121,20 +121,26 @@ public class StartAction extends Abstrac
 			return;
 		subsystem.setState(State.RESOLVING);
 		try {
-			for (Subsystem child : Activator.getInstance().getSubsystems().getChildren(subsystem))
-				resolve((AriesSubsystem)child);
-			// TODO I think this is insufficient. Do we need both
-			// pre-install and post-install environments for the Resolver?
-			Collection<Bundle> bundles = getBundles(subsystem);
-			if (!Activator.getInstance().getBundleContext().getBundle(0)
-					.adapt(FrameworkWiring.class).resolveBundles(bundles)) {
-				logger.error(
-						"Unable to resolve bundles for subsystem/version/id {}/{}/{}: {}",
-						new Object[] { subsystem.getSymbolicName(), subsystem.getVersion(),
-								subsystem.getSubsystemId(), bundles });
-				throw new SubsystemException("Framework could not resolve the bundles");
+			// The root subsystem should follow the same event pattern for
+			// state transitions as other subsystems. However, an unresolvable
+			// root subsystem should have no effect, so there's no point in
+			// actually doing the resolution work.
+			if (!subsystem.isRoot()) {
+				for (Subsystem child : Activator.getInstance().getSubsystems().getChildren(subsystem))
+					resolve((AriesSubsystem)child);
+				// TODO I think this is insufficient. Do we need both
+				// pre-install and post-install environments for the Resolver?
+				Collection<Bundle> bundles = getBundles(subsystem);
+				if (!Activator.getInstance().getBundleContext().getBundle(0)
+						.adapt(FrameworkWiring.class).resolveBundles(bundles)) {
+					logger.error(
+							"Unable to resolve bundles for subsystem/version/id {}/{}/{}: {}",
+							new Object[] { subsystem.getSymbolicName(), subsystem.getVersion(),
+									subsystem.getSubsystemId(), bundles });
+					throw new SubsystemException("Framework could not resolve the bundles");
+				}
+				setExportIsolationPolicy(subsystem);
 			}
-			setExportIsolationPolicy(subsystem);
 			// TODO Could avoid calling setState (and notifyAll) here and
 			// avoid the need for a lock.
 			subsystem.setState(State.RESOLVED);