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) {