You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by ej...@apache.org on 2012/03/07 00:16:23 UTC

svn commit: r1297784 - /aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/impl/AriesApplicationManagerImpl.java

Author: ejiang
Date: Tue Mar  6 23:16:23 2012
New Revision: 1297784

URL: http://svn.apache.org/viewvc?rev=1297784&view=rev
Log:
ARIES-830: Service registration is not removed when an application is uninstalled (Patch from Iain Duncan)

Modified:
    aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/impl/AriesApplicationManagerImpl.java

Modified: aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/impl/AriesApplicationManagerImpl.java
URL: http://svn.apache.org/viewvc/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/impl/AriesApplicationManagerImpl.java?rev=1297784&r1=1297783&r2=1297784&view=diff
==============================================================================
--- aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/impl/AriesApplicationManagerImpl.java (original)
+++ aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/impl/AriesApplicationManagerImpl.java Tue Mar  6 23:16:23 2012
@@ -25,7 +25,6 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.net.JarURLConnection;
-import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.Collections;
 import java.util.Dictionary;
@@ -74,6 +73,7 @@ import org.osgi.framework.BundleExceptio
 import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.framework.ServiceException;
 import org.osgi.framework.ServiceReference;
+import org.osgi.framework.ServiceRegistration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -89,6 +89,8 @@ public class AriesApplicationManagerImpl
 
   private DeploymentManifestManager deploymentManifestManager;
   
+  private Map<AriesApplication, ServiceRegistration> serviceRegistrations = new HashMap<AriesApplication, ServiceRegistration>();
+  
   private static final Logger _logger = LoggerFactory.getLogger("org.apache.aries.application.management.impl");
 
   public void setApplicationMetadataFactory (ApplicationMetadataFactory amf) { 
@@ -316,9 +318,10 @@ public class AriesApplicationManagerImpl
     if (ref == null || ref.length == 0) {
         Dictionary dict = new Hashtable();
         dict.put(BundleRepository.REPOSITORY_SCOPE, appScope);
-        _bundleContext.registerService(BundleRepository.class.getName(), 
+        ServiceRegistration serviceReg = _bundleContext.registerService(BundleRepository.class.getName(), 
             new ApplicationRepository(app), 
             dict);
+        serviceRegistrations.put(app, serviceReg);
     }
   
     AriesApplicationContext result = _applicationContextManager.getApplicationContext(app);
@@ -350,9 +353,21 @@ public class AriesApplicationManagerImpl
     return result;
   }
   
-  public void uninstall(AriesApplicationContext app) throws BundleException 
+  public void uninstall(AriesApplicationContext appContext) throws BundleException 
   {
-    _applicationContextManager.remove(app);
+    _applicationContextManager.remove(appContext);
+    
+    // Also unregister the service if we added one for it
+    AriesApplication app = appContext.getApplication();
+    if (app != null) {
+      ServiceRegistration reg = serviceRegistrations.remove(app);
+      if (reg != null) 
+        try {
+          reg.unregister();
+        } catch (IllegalStateException e) {
+          // Must be already unregistered - ignore
+        }
+    }
   }
 
   public void addApplicationListener(AriesApplicationListener l) {