You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by tj...@apache.org on 2015/08/07 17:37:18 UTC
svn commit: r1694702 - in /aries/trunk/subsystem:
subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/StartAction.java
subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/AutostartTest.java
Author: tjwatson
Date: Fri Aug 7 15:37:18 2015
New Revision: 1694702
URL: http://svn.apache.org/r1694702
Log:
ARIES-1348 - subsystems that are dependencies are not auto started
Modified:
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/StartAction.java
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/AutostartTest.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=1694702&r1=1694701&r2=1694702&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 7 15:37:18 2015
@@ -96,7 +96,7 @@ public class StartAction extends Abstrac
return null;
// Always start if target is content of requestor.
if (!Utils.isContent(requestor, target)) {
- // Aways start if target is a dependency of requestor.
+ // Always start if target is a dependency of requestor.
if (!Utils.isDependency(requestor, target)) {
// Always start if instigator equals target (explicit start).
if (!instigator.equals(target)) {
@@ -170,8 +170,19 @@ public class StartAction extends Abstrac
// 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 dependencies to ensure framework resolution succeeds
+ for (Resource dep : Activator.getInstance().getSubsystems().getResourcesReferencedBy(subsystem)) {
+ if (dep instanceof BasicSubsystem &&
+ !Activator.getInstance().getSubsystems().getChildren(subsystem).contains(dep)) {
+ if (State.INSTALLED == (((BasicSubsystem) dep).getState())) {
+ resolve((BasicSubsystem) dep);
+ }
+ }
+ }
+
+ for (Subsystem child : Activator.getInstance().getSubsystems().getChildren(subsystem)) {
resolve((BasicSubsystem)child);
+ }
FrameworkWiring frameworkWiring = Activator.getInstance().getBundleContext().getBundle(0)
.adapt(FrameworkWiring.class);
Modified: aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/AutostartTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/AutostartTest.java?rev=1694702&r1=1694701&r2=1694702&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/AutostartTest.java (original)
+++ aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/AutostartTest.java Fri Aug 7 15:37:18 2015
@@ -511,4 +511,30 @@ public class AutostartTest extends Subsy
stopAndUninstallSubsystemSilently(compositeA);
}
}
+
+ @Test
+ /* Start a composite with a dependency on an installed, but unresolved subsystem.
+ * The unresolved dependency should be auto-resolved and started (test fix to
+ * bug ARIES-1348).
+ *
+ * composite b imports package exported by a bundle in composite.a.
+ * - install composite a
+ * - install composite b
+ * - start composite b
+ */
+ public void testStartCompositeWithUnresolvedDependency() throws Exception {
+ Subsystem compositeA = installSubsystemFromFile(COMPOSITE_A);
+ Subsystem compositeB = installSubsystemFromFile(COMPOSITE_B);
+ try {
+ startSubsystem(compositeB);
+ // A should be automatically resolved and started.
+ assertState(Subsystem.State.ACTIVE, compositeA);
+ }
+ finally {
+ stopSubsystemSilently(compositeB);
+ stopSubsystemSilently(compositeA);
+ uninstallSubsystemSilently(compositeB);
+ uninstallSubsystemSilently(compositeA);
+ }
+ }
}