You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by ma...@apache.org on 2010/09/03 12:48:00 UTC
svn commit: r992259 - in /incubator/aries/trunk/application:
application-itests/src/test/java/org/apache/aries/application/runtime/itests/
application-runtime-framework/src/main/java/org/apache/aries/application/runtime/framework/
Author: mahrwald
Date: Fri Sep 3 10:48:00 2010
New Revision: 992259
URL: http://svn.apache.org/viewvc?rev=992259&view=rev
Log:
Support application uninstall with subsequent reinstall
Modified:
incubator/aries/trunk/application/application-itests/src/test/java/org/apache/aries/application/runtime/itests/IsolatedRuntimeTest.java
incubator/aries/trunk/application/application-runtime-framework/src/main/java/org/apache/aries/application/runtime/framework/BundleFrameworkImpl.java
Modified: incubator/aries/trunk/application/application-itests/src/test/java/org/apache/aries/application/runtime/itests/IsolatedRuntimeTest.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-itests/src/test/java/org/apache/aries/application/runtime/itests/IsolatedRuntimeTest.java?rev=992259&r1=992258&r2=992259&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-itests/src/test/java/org/apache/aries/application/runtime/itests/IsolatedRuntimeTest.java (original)
+++ incubator/aries/trunk/application/application-itests/src/test/java/org/apache/aries/application/runtime/itests/IsolatedRuntimeTest.java Fri Sep 3 10:48:00 2010
@@ -97,118 +97,111 @@ public class IsolatedRuntimeTest extends
try
{
ctx.start();
-
- BundleContext appContext = null;
- for (Bundle sharedBundle : bundleContext.getBundles())
- {
- if (sharedBundle.getSymbolicName().equals("shared.bundle.framework"))
- {
- BundleContext sharedContext = ((CompositeBundle)sharedBundle).getCompositeFramework().getBundleContext();
- for (Bundle appBundle : sharedContext.getBundles())
- {
- if (appBundle.getSymbolicName().equals("test.eba"))
- {
- appContext = ((CompositeBundle)appBundle).getCompositeFramework().getBundleContext();
- break;
- }
- }
- break;
- }
- }
-
- if (appContext != null) {
- // Dive into the context and pull out the composite bundle for the app
- Filter osgiFilter = FrameworkUtil.createFilter("(" + Constants.OBJECTCLASS + "=" + HelloWorld.class.getName() + ")");
- ServiceTracker tracker = new ServiceTracker(appContext,
- osgiFilter,
- null);
- tracker.open();
-
- Object hw = tracker.waitForService(DEFAULT_TIMEOUT);
-
- tracker.close();
+ assertHelloWorldService("test.eba");
+ } finally {
+ ctx.stop();
+ manager.uninstall(ctx);
+ }
+ }
+
+ @Test
+ public void testAppWithApplicationManifest() throws Exception {
- // We can cast to our version of HelloWorld as it is in a different classloader
- // so reflect into it to get the single method
- Class returnClass = hw.getClass();
- Method method = returnClass.getDeclaredMethod("getMessage",null);
- result = (String)method.invoke(hw);
-
- }
- else
- fail("No service found inside application framework");
-
- } catch (Exception e)
+ AriesApplicationManager manager = getOsgiService(AriesApplicationManager.class);
+ AriesApplication app = manager.createApplication(FileSystem.getFSRoot(new File("test2.eba")));
+ AriesApplicationContext ctx = manager.install(app);
+
+ try
{
- System.out.println("MOOP");
+ ctx.start();
- e.printStackTrace();
+ assertHelloWorldService("org.apache.aries.sample2");
} finally {
ctx.stop();
manager.uninstall(ctx);
}
-
- assertEquals (result, "hello world");
}
-
+
@Test
- public void testAppWithApplicationManifest() throws Exception {
-
+ public void testUninstallReinstall() throws Exception {
AriesApplicationManager manager = getOsgiService(AriesApplicationManager.class);
AriesApplication app = manager.createApplication(FileSystem.getFSRoot(new File("test2.eba")));
AriesApplicationContext ctx = manager.install(app);
+ app = ctx.getApplication();
+
try
{
ctx.start();
- BundleContext appContext = null;
- for (Bundle sharedBundle : bundleContext.getBundles())
- {
- if (sharedBundle.getSymbolicName().equals("shared.bundle.framework"))
- {
- BundleContext sharedContext = ((CompositeBundle)sharedBundle).getCompositeFramework().getBundleContext();
- for (Bundle appBundle : sharedContext.getBundles())
- {
- if (appBundle.getSymbolicName().equals("org.apache.aries.sample2"))
- {
- appContext = ((CompositeBundle)appBundle).getCompositeFramework().getBundleContext();
- break;
- }
- }
- break;
- }
- }
+ assertHelloWorldService("org.apache.aries.sample2");
- if (appContext != null) {
- // Dive into the context and pull out the composite bundle for the app
- Filter osgiFilter = FrameworkUtil.createFilter("(" + Constants.OBJECTCLASS + "=" + HelloWorld.class.getName() + ")");
- ServiceTracker tracker = new ServiceTracker(appContext,
- osgiFilter,
- null);
- tracker.open();
-
- Object hw = tracker.waitForService(DEFAULT_TIMEOUT);
-
- tracker.close();
-
- // We can cast to our version of HelloWorld as it is in a different classloader
- // so reflect into it to get the single method
- Class returnClass = hw.getClass();
- Method method = returnClass.getDeclaredMethod("getMessage",null);
- String result = (String)method.invoke(hw);
- assertEquals (result, "hello world");
-
-
- }
- else
- fail("No service found inside application framework");
+ ctx.stop();
+ manager.uninstall(ctx);
+
+ ctx = manager.install(app);
+ ctx.start();
+
+ assertHelloWorldService("org.apache.aries.sample2");
} finally {
ctx.stop();
manager.uninstall(ctx);
+ }
+ }
+
+
+
+ private void assertHelloWorldService(String appName) throws Exception
+ {
+ BundleContext appContext = getAppIsolatedBundleContext(appName);
+
+ if (appContext != null) {
+ // Dive into the context and pull out the composite bundle for the app
+ Filter osgiFilter = FrameworkUtil.createFilter("(" + Constants.OBJECTCLASS + "=" + HelloWorld.class.getName() + ")");
+ ServiceTracker tracker = new ServiceTracker(appContext,
+ osgiFilter,
+ null);
+ tracker.open();
+
+ Object hw = tracker.waitForService(DEFAULT_TIMEOUT);
+
+ tracker.close();
+
+ // We can cast to our version of HelloWorld as it is in a different classloader
+ // so reflect into it to get the single method
+ Class returnClass = hw.getClass();
+ Method method = returnClass.getDeclaredMethod("getMessage",null);
+ String result = (String)method.invoke(hw);
+
+ assertEquals("hello world", result);
}
+ else {
+ fail("No service found inside application framework");
+ }
+
+ }
+
+ private BundleContext getAppIsolatedBundleContext(String appName)
+ {
+ for (Bundle sharedBundle : bundleContext.getBundles())
+ {
+ if (sharedBundle.getSymbolicName().equals("shared.bundle.framework"))
+ {
+ BundleContext sharedContext = ((CompositeBundle)sharedBundle).getCompositeFramework().getBundleContext();
+ for (Bundle appBundle : sharedContext.getBundles())
+ {
+ if (appBundle.getSymbolicName().equals(appName))
+ {
+ return ((CompositeBundle)appBundle).getCompositeFramework().getBundleContext();
+ }
+ }
+ break;
+ }
+ }
+
+ return null;
}
Modified: incubator/aries/trunk/application/application-runtime-framework/src/main/java/org/apache/aries/application/runtime/framework/BundleFrameworkImpl.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-runtime-framework/src/main/java/org/apache/aries/application/runtime/framework/BundleFrameworkImpl.java?rev=992259&r1=992258&r2=992259&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-runtime-framework/src/main/java/org/apache/aries/application/runtime/framework/BundleFrameworkImpl.java (original)
+++ incubator/aries/trunk/application/application-runtime-framework/src/main/java/org/apache/aries/application/runtime/framework/BundleFrameworkImpl.java Fri Sep 3 10:48:00 2010
@@ -78,6 +78,7 @@ public class BundleFrameworkImpl impleme
}
_compositeBundle.stop();
+ _compositeBundle.uninstall();
}
public void start(Bundle b) throws BundleException