Author: jwross
Date: Tue Apr 26 14:58:18 2016
New Revision: 1741051
URL: http://svn.apache.org/viewvc?rev=1741051&view=rev
Log:
Merge ^/aries/trunk/subsystem r1740836 through r1741050 into java6support
branch.
Modified:
aries/branches/java6support/subsystem/ (props changed)
aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/ResolveContext.java
aries/branches/java6support/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/defect/Aries1522Test.java
aries/branches/java6support/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/defect/Aries1523Test.java
aries/branches/java6support/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/defect/Aries1538Test.java
Propchange: aries/branches/java6support/subsystem/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Apr 26 14:58:18 2016
@@ -1,2 +1,2 @@
/aries/branches/1.0-prototype/subsystem:1306564-1337594
-/aries/trunk/subsystem:1728111-1740835
+/aries/trunk/subsystem:1728111-1741050
Modified:
aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/ResolveContext.java
URL:
http://svn.apache.org/viewvc/aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/ResolveContext.java?rev=1741051&r1=1741050&r2=1741051&view=diff
==============================================================================
---
aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/ResolveContext.java
(original)
+++
aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/ResolveContext.java
Tue Apr 26 14:58:18 2016
@@ -154,26 +154,44 @@ public class ResolveContext extends org.
processWires(wires, requirement, capabilities);
}
- private void processAsSubstitutableExport(Requirement requirement,
List<Capability> capabilities) {
+ private void processAsSubstitutableExport(boolean isFragment,
Requirement requirement, List<Capability> capabilities) {
String namespace = requirement.getNamespace();
if (!PackageNamespace.PACKAGE_NAMESPACE.equals(namespace)) {
return;
}
Resource resource = requirement.getResource();
Wiring wiring = wirings.get(resource);
- List<Capability> resourceCapabilities =
wiring.getResourceCapabilities(namespace);
- processResourceCapabilities(resourceCapabilities, requirement,
capabilities);
+ if (isFragment) {
+ List<Wire> fragmentWires =
wiring.getRequiredResourceWires(HostNamespace.HOST_NAMESPACE);
+ for (Wire fragmentWire : fragmentWires) {
+ Resource host = fragmentWire.getProvider();
+ processResourceCapabilities(
+
wirings.get(host).getResourceCapabilities(namespace),
+ requirement,
+ capabilities);
+ }
+ }
+ else {
+ List<Capability> resourceCapabilities =
wiring.getResourceCapabilities(namespace);
+ processResourceCapabilities(resourceCapabilities,
requirement, capabilities);
+ }
}
private void processAlreadyResolvedResource(Resource resource,
Requirement requirement, List<Capability> capabilities) {
- if (isProcessableAsFragment(requirement)) {
+ boolean isFragment = isProcessableAsFragment(requirement);
+ if (isFragment) {
processAsFragment(requirement, capabilities);
}
else {
processAsBundle(requirement, capabilities);
}
if (capabilities.isEmpty() && Utils.isMandatory(requirement)) {
- processAsSubstitutableExport(requirement, capabilities);
+ processAsSubstitutableExport(isFragment, requirement,
capabilities);
+ if (capabilities.isEmpty()) {
+ // ARIES-1538. Do not fail subsystem resolution
if an already
+ // resolved resource has a missing dependency.
+ capabilities.add(new
MissingCapability(requirement));
+ }
}
}
Modified:
aries/branches/java6support/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/defect/Aries1522Test.java
URL:
http://svn.apache.org/viewvc/aries/branches/java6support/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/defect/Aries1522Test.java?rev=1741051&r1=1741050&r2=1741051&view=diff
==============================================================================
---
aries/branches/java6support/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/defect/Aries1522Test.java
(original)
+++
aries/branches/java6support/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/defect/Aries1522Test.java
Tue Apr 26 14:58:18 2016
@@ -70,12 +70,12 @@ public class Aries1522Test extends Subsy
}
@Test
- public void testApacheAriesProvisionDepenenciesInstall() throws
Exception {
+ public void testApacheAriesProvisionDependenciesInstall() throws
Exception {
test(AriesProvisionDependenciesDirective.INSTALL);
}
@Test
- public void testApacheAriesProvisionDepenenciesResolve() throws
Exception {
+ public void testApacheAriesProvisionDependenciesResolve() throws
Exception {
test(AriesProvisionDependenciesDirective.RESOLVE);
}
Modified:
aries/branches/java6support/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/defect/Aries1523Test.java
URL:
http://svn.apache.org/viewvc/aries/branches/java6support/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/defect/Aries1523Test.java?rev=1741051&r1=1741050&r2=1741051&view=diff
==============================================================================
---
aries/branches/java6support/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/defect/Aries1523Test.java
(original)
+++
aries/branches/java6support/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/defect/Aries1523Test.java
Tue Apr 26 14:58:18 2016
@@ -70,12 +70,12 @@ public class Aries1523Test extends Subsy
}
@Test
- public void testApacheAriesProvisionDepenenciesInstall() throws
Exception {
+ public void testApacheAriesProvisionDependenciesInstall() throws
Exception {
test(AriesProvisionDependenciesDirective.INSTALL);
}
@Test
- public void testApacheAriesProvisionDepenenciesResolve() throws
Exception {
+ public void testApacheAriesProvisionDependenciesResolve() throws
Exception {
test(AriesProvisionDependenciesDirective.RESOLVE);
}
Modified:
aries/branches/java6support/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/defect/Aries1538Test.java
URL:
http://svn.apache.org/viewvc/aries/branches/java6support/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/defect/Aries1538Test.java?rev=1741051&r1=1741050&r2=1741051&view=diff
==============================================================================
---
aries/branches/java6support/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/defect/Aries1538Test.java
(original)
+++
aries/branches/java6support/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/defect/Aries1538Test.java
Tue Apr 26 14:58:18 2016
@@ -32,16 +32,36 @@ import org.osgi.service.subsystem.Subsys
public class Aries1538Test extends SubsystemTest {
@Test
- public void testApacheAriesProvisionDepenenciesInstall() throws
Exception {
- test(AriesProvisionDependenciesDirective.INSTALL);
+ public void
testEffectiveActiveApacheAriesProvisionDependenciesInstall() throws Exception {
+
testEffectiveActive(AriesProvisionDependenciesDirective.INSTALL);
}
@Test
- public void testApacheAriesProvisionDepenenciesResolve() throws
Exception {
- test(AriesProvisionDependenciesDirective.RESOLVE);
+ public void
testEffectiveActiveApacheAriesProvisionDependenciesResolve() throws Exception {
+
testEffectiveActive(AriesProvisionDependenciesDirective.RESOLVE);
}
- private void test(AriesProvisionDependenciesDirective
provisionDependencies) throws Exception {
+ @Test
+ public void
testSubstitutableExportApacheAriesProvisionDependenciesInstall() throws
Exception {
+
testSubstitutableExport(AriesProvisionDependenciesDirective.INSTALL);
+ }
+
+ @Test
+ public void
testSubstituableExportApacheAriesProvisionDependenciesResolve() throws
Exception {
+
testSubstitutableExport(AriesProvisionDependenciesDirective.RESOLVE);
+ }
+
+ @Test
+ public void
testHostFragmentCircularDependencyApacheAriesProvisionDependenciesInstall()
throws Exception {
+
testHostFragmentCircularDependency(AriesProvisionDependenciesDirective.INSTALL);
+ }
+
+ @Test
+ public void
testHostFragmentCircularDependencyApacheAriesProvisionDependenciesResolve()
throws Exception {
+
testHostFragmentCircularDependency(AriesProvisionDependenciesDirective.RESOLVE);
+ }
+
+ private void testEffectiveActive(AriesProvisionDependenciesDirective
provisionDependencies) throws Exception {
boolean flag =
AriesProvisionDependenciesDirective.INSTALL.equals(provisionDependencies);
BundleArchiveBuilder bab = new BundleArchiveBuilder();
bab.symbolicName("bundle");
@@ -68,6 +88,100 @@ public class Aries1538Test extends Subsy
.importPackage("foo")
.build())
.build(),
+ flag
+ );
+ uninstallableSubsystems.add(subsystem);
+ startSubsystem(subsystem, flag);
+ stoppableSubsystems.add(subsystem);
+ }
+ catch (SubsystemException e) {
+ e.printStackTrace();
+ fail("Subsystem should have installed and started");
+ }
+ }
+
+ private void
testSubstitutableExport(AriesProvisionDependenciesDirective
provisionDependencies) throws Exception {
+ boolean flag =
AriesProvisionDependenciesDirective.INSTALL.equals(provisionDependencies);
+ BundleArchiveBuilder hostBuilder = new BundleArchiveBuilder();
+ hostBuilder.symbolicName("host");
+ BundleArchiveBuilder fragmentBuilder = new
BundleArchiveBuilder();
+ fragmentBuilder.symbolicName("fragment");
+ fragmentBuilder.exportPackage("foo");
+ fragmentBuilder.importPackage("foo");
+ fragmentBuilder.header("Fragment-Host", "host");
+ Subsystem root = getRootSubsystem();
+ Bundle host = root.getBundleContext().installBundle(
+ "host",
+ hostBuilder.build());
+ uninstallableBundles.add(host);
+ Bundle fragment = root.getBundleContext().installBundle(
+ "fragment",
+ fragmentBuilder.build());
+ uninstallableBundles.add(fragment);
+ startBundle(host);
+ try {
+ Subsystem subsystem = installSubsystem(
+ root,
+ "subsystem",
+ new SubsystemArchiveBuilder()
+
.symbolicName("subsystem")
+
.type(SubsystemConstants.SUBSYSTEM_TYPE_APPLICATION + ';'
+
+ provisionDependencies.toString())
+ .bundle(
+ "a",
+ new
BundleArchiveBuilder()
+
.symbolicName("a")
+
.importPackage("foo")
+
.build())
+ .build(),
+ flag
+ );
+ uninstallableSubsystems.add(subsystem);
+ startSubsystem(subsystem, flag);
+ stoppableSubsystems.add(subsystem);
+ }
+ catch (SubsystemException e) {
+ e.printStackTrace();
+ fail("Subsystem should have installed and started");
+ }
+ }
+
+ private void
testHostFragmentCircularDependency(AriesProvisionDependenciesDirective
provisionDependencies) throws Exception {
+ boolean flag =
AriesProvisionDependenciesDirective.INSTALL.equals(provisionDependencies);
+ BundleArchiveBuilder hostBuilder = new BundleArchiveBuilder();
+ hostBuilder.symbolicName("host");
+ hostBuilder.exportPackage("foo");
+ hostBuilder.importPackage("bar");
+ BundleArchiveBuilder fragmentBuilder = new
BundleArchiveBuilder();
+ fragmentBuilder.symbolicName("fragment");
+ fragmentBuilder.exportPackage("bar");
+ fragmentBuilder.importPackage("foo");
+ fragmentBuilder.header("Fragment-Host", "host");
+ Subsystem root = getRootSubsystem();
+ Bundle host = root.getBundleContext().installBundle(
+ "host",
+ hostBuilder.build());
+ uninstallableBundles.add(host);
+ Bundle fragment = root.getBundleContext().installBundle(
+ "fragment",
+ fragmentBuilder.build());
+ uninstallableBundles.add(fragment);
+ startBundle(host);
+ try {
+ Subsystem subsystem = installSubsystem(
+ root,
+ "subsystem",
+ new SubsystemArchiveBuilder()
+
.symbolicName("subsystem")
+
.type(SubsystemConstants.SUBSYSTEM_TYPE_APPLICATION + ';'
+
+ provisionDependencies.toString())
+ .bundle(
+ "a",
+ new
BundleArchiveBuilder()
+
.symbolicName("a")
+
.importPackage("foo")
+
.build())
+ .build(),
flag
);
uninstallableSubsystems.add(subsystem);