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/03/06 21:42:28 UTC
svn commit: r1297702 - in /aries/trunk/subsystem:
subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/
subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/
subsystem-core/src/main/java/org/apache/aries/subsystem/core/...
Author: jwross
Date: Tue Mar 6 20:42:27 2012
New Revision: 1297702
URL: http://svn.apache.org/viewvc?rev=1297702&view=rev
Log:
ARIES-825: Update subsystems to latest Subsystem, Resolver, and Repository APIs.
Initial support for Require-Bundle header in applications.
Modified:
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/DeploymentManifest.java
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/RequireBundleHeader.java
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/AriesSubsystem.java
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/resource/BundleResource.java
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/ApplicationTest.java
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/BasicTest.java
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/CompositeTest.java
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/FeatureTest.java
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/InstallTest.java
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/SubsystemTest.java
Modified: aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/DeploymentManifest.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/DeploymentManifest.java?rev=1297702&r1=1297701&r2=1297702&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/DeploymentManifest.java (original)
+++ aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/DeploymentManifest.java Tue Mar 6 20:42:27 2012
@@ -22,6 +22,7 @@ import org.apache.aries.subsystem.core.i
import org.apache.aries.subsystem.core.obr.SubsystemEnvironment;
import org.apache.aries.util.manifest.ManifestProcessor;
import org.osgi.framework.Constants;
+import org.osgi.framework.namespace.BundleNamespace;
import org.osgi.framework.namespace.PackageNamespace;
import org.osgi.framework.wiring.BundleRevision;
import org.osgi.resource.Requirement;
@@ -119,6 +120,9 @@ public class DeploymentManifest {
header = computeRequireCapabilityHeader(resolution, deployedContent, acceptDependencies);
if (header != null)
headers.put(REQUIRE_CAPABILITY, header);
+ header = computeRequireBundleHeader(resolution, deployedContent, acceptDependencies);
+ if (header != null)
+ headers.put(REQUIRE_BUNDLE, header);
}
// TODO Compute additional headers for an application.
}
@@ -238,6 +242,34 @@ public class DeploymentManifest {
return new ImportPackageHeader(clauses);
}
+ private static RequireBundleHeader computeRequireBundleHeader(
+ Map<Resource, List<Wire>> resolution,
+ Collection<Resource> content,
+ boolean acceptDependencies) {
+ Collection<RequireBundleHeader.Clause> clauses = new ArrayList<RequireBundleHeader.Clause>();
+ for (Entry<Resource, List<Wire>> entry : resolution.entrySet()) {
+ for (Wire wire : entry.getValue()) {
+ Resource provider = wire.getProvider();
+ if (content.contains(provider))
+ // If the provider is a content resource, we don't need an import.
+ continue;
+ // The provider is a dependency that is already provisioned or needs provisioning.
+ if (acceptDependencies && !((provider instanceof BundleRevision) || (provider instanceof AriesSubsystem)))
+ // If the application accepts dependencies and the provider is a dependency that needs provisioning,
+ // we don't need an import.
+ continue;
+ // For all other cases, we need an import.
+ Requirement requirement = wire.getRequirement();
+ if (BundleNamespace.BUNDLE_NAMESPACE.equals(requirement.getNamespace())) {
+ clauses.add(new RequireBundleHeader.Clause(requirement));
+ }
+ }
+ }
+ if (clauses.isEmpty())
+ return null;
+ return new RequireBundleHeader(clauses);
+ }
+
private static RequireCapabilityHeader computeRequireCapabilityHeader(
Map<Resource, List<Wire>> resolution,
Collection<Resource> content,
Modified: aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/RequireBundleHeader.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/RequireBundleHeader.java?rev=1297702&r1=1297701&r2=1297702&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/RequireBundleHeader.java (original)
+++ aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/RequireBundleHeader.java Tue Mar 6 20:42:27 2012
@@ -11,6 +11,8 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.osgi.framework.Constants;
+import org.osgi.framework.namespace.PackageNamespace;
+import org.osgi.resource.Requirement;
public class RequireBundleHeader implements Header<RequireBundleHeader.Clause> {
public static class Clause implements org.apache.aries.subsystem.core.archive.Clause {
@@ -46,6 +48,31 @@ public class RequireBundleHeader impleme
fillInDefaults(parameters);
}
+ private static final String REGEX = "\\((" + RequireBundleRequirement.NAMESPACE + ")(=)([^\\)]+)\\)";
+ private static final Pattern PATTERN = Pattern.compile(REGEX);
+
+ public Clause(Requirement requirement) {
+ if (!RequireBundleRequirement.NAMESPACE.equals(requirement.getNamespace()))
+ throw new IllegalArgumentException("Requirement must be in the '" + RequireBundleRequirement.NAMESPACE + "' namespace");
+ String filter = requirement.getDirectives().get(RequireBundleRequirement.DIRECTIVE_FILTER);
+ String path = null;
+ Matcher matcher = PATTERN.matcher(filter);
+ while (matcher.find()) {
+ String name = matcher.group(1);
+ String operator = matcher.group(2);
+ String value = matcher.group(3);
+ if (RequireBundleRequirement.NAMESPACE.equals(name)) {
+ path = value;
+ }
+ else if (ATTRIBUTE_BUNDLEVERSION.equals(name)) {
+ // TODO Parse the version range from the filter.
+ }
+ }
+ if (path == null)
+ throw new IllegalArgumentException("Missing filter key: " + RequireBundleRequirement.NAMESPACE);
+ this.path = path;
+ }
+
@Override
public Attribute getAttribute(String name) {
Parameter result = parameters.get(name);
@@ -122,14 +149,24 @@ public class RequireBundleHeader impleme
private static final Pattern PATTERN = Pattern.compile('(' + Grammar.BUNDLE_DESCRIPTION + ")(?=,|\\z)");
- private final Set<Clause> clauses = new HashSet<Clause>();
-
- public RequireBundleHeader(String value) {
- Matcher matcher = PATTERN.matcher(value);
+ private static Collection<Clause> processHeader(String header) {
+ Matcher matcher = PATTERN.matcher(header);
+ Set<Clause> clauses = new HashSet<Clause>();
while (matcher.find())
clauses.add(new Clause(matcher.group()));
+ return clauses;
+ }
+
+ private final Set<Clause> clauses;
+
+ public RequireBundleHeader(Collection<Clause> clauses) {
if (clauses.isEmpty())
throw new IllegalArgumentException("A " + NAME + " header must have at least one clause");
+ this.clauses = new HashSet<Clause>(clauses);
+ }
+
+ public RequireBundleHeader(String value) {
+ this(processHeader(value));
}
@Override
Modified: aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/AriesSubsystem.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/AriesSubsystem.java?rev=1297702&r1=1297701&r2=1297702&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/AriesSubsystem.java (original)
+++ aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/AriesSubsystem.java Tue Mar 6 20:42:27 2012
@@ -1140,6 +1140,8 @@ public class AriesSubsystem implements S
// In the case of applications, the header is generated.
header = getDeploymentManifest().getSubsystemImportServiceHeader();
setImportIsolationPolicy(builder, (SubsystemImportServiceHeader)header);
+ header = getDeploymentManifest().getRequireBundleHeader();
+ setImportIsolationPolicy(builder, (RequireBundleHeader)header);
}
if (isApplication()) {
// TODO Implement import isolation policy for applications.
@@ -1148,8 +1150,6 @@ public class AriesSubsystem implements S
else if (isComposite()) {
// TODO Implement import isolation policy for composites.
// Composites specify an explicit import policy in their subsystem and deployment manifests.
- Header<?> header = getDeploymentManifest().getRequireBundleHeader();
- setImportIsolationPolicy(builder, (RequireBundleHeader)header);
}
RegionFilter regionFilter = builder.build();
if (LOGGER.isDebugEnabled())
Modified: aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/resource/BundleResource.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/resource/BundleResource.java?rev=1297702&r1=1297701&r2=1297702&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/resource/BundleResource.java (original)
+++ aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/resource/BundleResource.java Tue Mar 6 20:42:27 2012
@@ -24,6 +24,8 @@ import java.util.jar.Manifest;
import org.apache.aries.subsystem.core.archive.BundleManifest;
import org.apache.aries.subsystem.core.archive.ExportPackageHeader;
import org.apache.aries.subsystem.core.archive.ImportPackageHeader;
+import org.apache.aries.subsystem.core.archive.RequireBundleHeader;
+import org.apache.aries.subsystem.core.archive.RequireBundleRequirement;
import org.apache.aries.subsystem.core.archive.RequireCapabilityHeader;
import org.apache.aries.subsystem.core.archive.RequireCapabilityRequirement;
import org.apache.aries.subsystem.core.internal.OsgiIdentityCapability;
@@ -69,6 +71,10 @@ public class BundleResource implements R
if (rch != null)
for (RequireCapabilityHeader.Clause clause : rch.getClauses())
requirements.add(new RequireCapabilityRequirement(clause));
+ RequireBundleHeader rbh = (RequireBundleHeader)manifest.getHeader(RequireBundleHeader.NAME);
+ if (rbh != null)
+ for (RequireBundleHeader.Clause clause : rbh.getClauses())
+ requirements.add(new RequireBundleRequirement(clause));
}
private BundleResource(String content) throws IOException {
Modified: aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/ApplicationTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/ApplicationTest.java?rev=1297702&r1=1297701&r2=1297702&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/ApplicationTest.java (original)
+++ aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/ApplicationTest.java Tue Mar 6 20:42:27 2012
@@ -53,9 +53,14 @@ import org.osgi.service.subsystem.Subsys
public class ApplicationTest extends SubsystemTest {
/*
* Subsystem-SymbolicName: application.a.esa
+ * Subsystem-Content: bundle.a.jar
*/
private static final String APPLICATION_A = "application.a.esa";
-
+ /*
+ * Subsystem-SymbolicName: application.b.esa
+ * Subsystem-Content: bundle.c.jar
+ */
+ private static final String APPLICATION_B = "application.b.esa";
/*
* Bundle-SymbolicName: bundle.a.jar
* Require-Capability: foo; filter:="(foo=bar)"
@@ -66,6 +71,11 @@ public class ApplicationTest extends Sub
* Provide-Capability: foo; foo=bar
*/
private static final String BUNDLE_B = "bundle.b.jar";
+ /*
+ * Bundle-SymbolicName: bundle.c.jar
+ * Require-Bundle: bundle.b.jar
+ */
+ private static final String BUNDLE_C = "bundle.c.jar";
private static boolean createdTestFiles;
@@ -75,7 +85,9 @@ public class ApplicationTest extends Sub
return;
createBundleA();
createBundleB();
+ createBundleC();
createApplicationA();
+ createApplicationB();
createdTestFiles = true;
}
@@ -91,11 +103,22 @@ public class ApplicationTest extends Sub
createBundle(BUNDLE_B, "1.0.0", headers);
}
+ private static void createBundleC() throws IOException {
+ Map<String, String> headers = new HashMap<String, String>();
+ headers.put(Constants.REQUIRE_BUNDLE, BUNDLE_B);
+ createBundle(BUNDLE_C, "1.0.0", headers);
+ }
+
private static void createApplicationA() throws IOException {
createApplicationAManifest();
createSubsystem(APPLICATION_A, BUNDLE_A);
}
+ private static void createApplicationB() throws IOException {
+ createApplicationBManifest();
+ createSubsystem(APPLICATION_B, BUNDLE_C);
+ }
+
private static void createApplicationAManifest() throws IOException {
Map<String, String> attributes = new HashMap<String, String>();
attributes.put(SubsystemConstants.SUBSYSTEM_SYMBOLICNAME, APPLICATION_A);
@@ -103,6 +126,13 @@ public class ApplicationTest extends Sub
createManifest(APPLICATION_A + ".mf", attributes);
}
+ private static void createApplicationBManifest() throws IOException {
+ Map<String, String> attributes = new HashMap<String, String>();
+ attributes.put(SubsystemConstants.SUBSYSTEM_SYMBOLICNAME, APPLICATION_B);
+ attributes.put(SubsystemConstants.SUBSYSTEM_CONTENT, BUNDLE_C);
+ createManifest(APPLICATION_B + ".mf", attributes);
+ }
+
private static void createApplication(String name, String[] content) throws Exception {
ZipFixture feature = ArchiveFixture
.newZip()
@@ -169,8 +199,27 @@ public class ApplicationTest extends Sub
assertBundleState(Bundle.RESOLVED|Bundle.ACTIVE, "org.apache.aries.subsystem.itests.tb3", getRootSubsystem());
}
finally {
- stopSubsystem(application1);
- uninstallScopedSubsystem(application1);
+ stopSubsystemSilently(application1);
+ uninstallSubsystemSilently(application1);
+ }
+ }
+
+ @Test
+ public void testRequireBundle() throws Exception {
+ File file = new File(BUNDLE_B);
+ Bundle b = getRootSubsystem().getBundleContext().installBundle(file.toURI().toString(), new FileInputStream(file));
+ try {
+ Subsystem application = installSubsystemFromFile(APPLICATION_B);
+ try {
+ startSubsystem(application);
+ }
+ finally {
+ stopSubsystemSilently(application);
+ uninstallSubsystemSilently(application);
+ }
+ }
+ finally {
+ b.uninstall();
}
}
@@ -184,8 +233,8 @@ public class ApplicationTest extends Sub
startSubsystem(application);
}
finally {
- stopSubsystem(application);
- uninstallScopedSubsystem(application);
+ stopSubsystemSilently(application);
+ uninstallSubsystemSilently(application);
}
}
finally {
Modified: aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/BasicTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/BasicTest.java?rev=1297702&r1=1297701&r2=1297702&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/BasicTest.java (original)
+++ aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/BasicTest.java Tue Mar 6 20:42:27 2012
@@ -115,7 +115,7 @@ public class BasicTest extends Subsystem
}
finally {
try {
- uninstallUnscopedSubsystem(emptyFeature);
+ uninstallSubsystemSilently(emptyFeature);
}
catch (AssertionError e) {
if (error == null)
@@ -152,7 +152,7 @@ public class BasicTest extends Subsystem
}
finally {
try {
- uninstallScopedSubsystem(emptySubsystem);
+ uninstallSubsystemSilently(emptySubsystem);
}
catch (AssertionError e) {
if (error == null)
Modified: aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/CompositeTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/CompositeTest.java?rev=1297702&r1=1297701&r2=1297702&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/CompositeTest.java (original)
+++ aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/CompositeTest.java Tue Mar 6 20:42:27 2012
@@ -146,8 +146,8 @@ public class CompositeTest extends Subsy
}
}
finally {
- stopSubsystem(composite);
- uninstallScopedSubsystem(composite);
+ stopSubsystemSilently(composite);
+ uninstallSubsystemSilently(composite);
}
}
@@ -166,7 +166,7 @@ public class CompositeTest extends Subsy
}
}
finally {
- uninstallScopedSubsystem(compositeC);
+ uninstallSubsystemSilently(compositeC);
}
}
finally {
@@ -189,7 +189,7 @@ public class CompositeTest extends Subsy
}
}
finally {
- uninstallScopedSubsystem(compositeB);
+ uninstallSubsystemSilently(compositeB);
}
}
finally {
@@ -212,7 +212,7 @@ public class CompositeTest extends Subsy
}
}
finally {
- uninstallScopedSubsystem(compositeD);
+ uninstallSubsystemSilently(compositeD);
}
}
finally {
Modified: aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/FeatureTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/FeatureTest.java?rev=1297702&r1=1297701&r2=1297702&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/FeatureTest.java (original)
+++ aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/FeatureTest.java Tue Mar 6 20:42:27 2012
@@ -112,7 +112,7 @@ public class FeatureTest extends Subsyst
}
finally {
try {
- uninstallUnscopedSubsystem(feature1);
+ uninstallSubsystem(feature1);
if (feature2 != null) {
assertEvent(feature2, Subsystem.State.UNINSTALLING, 5000);
assertEvent(feature2, Subsystem.State.UNINSTALLED, 5000);
@@ -135,7 +135,7 @@ public class FeatureTest extends Subsyst
try {
assertFeature3(feature3Before);
// Uninstall then reinstall the subsystem for a more robust test of the subsystem ID persistence.
- uninstallUnscopedSubsystem(feature3Before);
+ uninstallSubsystem(feature3Before);
feature3Before = installSubsystemFromFile("feature3.esa");
assertLastId(2);
assertFeature3(feature3Before);
@@ -156,7 +156,7 @@ public class FeatureTest extends Subsyst
try {
if (feature3After != null) {
stopSubsystem(feature3After);
- uninstallUnscopedSubsystem(feature3After);
+ uninstallSubsystem(feature3After);
}
}
catch (AssertionError e) {
@@ -178,7 +178,7 @@ public class FeatureTest extends Subsyst
while (!feature2.getState().equals(Subsystem.State.INSTALLED))
Thread.sleep(100);
assertConstituent(feature2, "org.apache.aries.subsystem.itests.tb3", Version.parseVersion("1.0.0"), IdentityNamespace.TYPE_BUNDLE);
- uninstallUnscopedSubsystem(feature2);
+ uninstallSubsystem(feature2);
assertNotChild(feature1, feature2);
assertConstituent(feature1, "org.apache.aries.subsystem.itests.tb3", Version.parseVersion("1.0.0"), IdentityNamespace.TYPE_BUNDLE);
}
@@ -188,7 +188,7 @@ public class FeatureTest extends Subsyst
}
finally {
try {
- uninstallUnscopedSubsystem(feature1);
+ uninstallSubsystem(feature1);
}
catch (AssertionError e) {
if (error == null)
Modified: aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/InstallTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/InstallTest.java?rev=1297702&r1=1297701&r2=1297702&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/InstallTest.java (original)
+++ aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/InstallTest.java Tue Mar 6 20:42:27 2012
@@ -77,7 +77,7 @@ public class InstallTest extends Subsyst
assertSame(subsystem1, subsystem2);
}
finally {
- uninstallUnscopedSubsystem(subsystem1);
+ uninstallSubsystemSilently(subsystem1);
}
}
}
Modified: aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/SubsystemTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/SubsystemTest.java?rev=1297702&r1=1297701&r2=1297702&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/SubsystemTest.java (original)
+++ aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/SubsystemTest.java Tue Mar 6 20:42:27 2012
@@ -600,16 +600,23 @@ public abstract class SubsystemTest exte
assertState(State.RESOLVED, subsystem);
}
- protected void uninstallScopedSubsystem(Subsystem subsystem) throws Exception {
- Bundle b = getRegionContextBundle(subsystem);
- uninstallSubsystem(subsystem);
- assertEquals("Region context bundle not uninstalled", Bundle.UNINSTALLED, b.getState());
+ protected void stopSubsystemSilently(Subsystem subsystem) {
+ try {
+ stopSubsystem(subsystem);
+ }
+ catch (Throwable t) {
+ t.printStackTrace();
+ }
}
protected void uninstallSubsystem(Subsystem subsystem) throws Exception {
assertState(EnumSet.of(State.INSTALLED, State.RESOLVED), subsystem);
subsystemEvents.clear();
Collection<Subsystem> parents = subsystem.getParents();
+ Bundle b = null;
+ if (subsystem.getType().equals(SubsystemConstants.SUBSYSTEM_TYPE_APPLICATION)
+ || subsystem.getType().equals(SubsystemConstants.SUBSYSTEM_TYPE_COMPOSITE))
+ b = getRegionContextBundle(subsystem);
subsystem.uninstall();
assertEvent(subsystem, State.UNINSTALLING, 5000);
assertEvent(subsystem, State.UNINSTALLED, 5000);
@@ -617,10 +624,17 @@ public abstract class SubsystemTest exte
for (Subsystem parent : parents)
assertNotChild(parent, subsystem);
assertNotDirectory(subsystem);
+ if (b != null)
+ assertEquals("Region context bundle not uninstalled", Bundle.UNINSTALLED, b.getState());
}
- protected void uninstallUnscopedSubsystem(Subsystem subsystem) throws Exception {
- uninstallSubsystem(subsystem);
+ protected void uninstallSubsystemSilently(Subsystem subsystem) {
+ try {
+ uninstallSubsystem(subsystem);
+ }
+ catch (Throwable t) {
+ t.printStackTrace();
+ }
}
protected static void write(String file, ArchiveFixture.AbstractFixture fixture) throws IOException {