You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by no...@apache.org on 2010/02/15 19:29:54 UTC

svn commit: r910286 - in /incubator/aries/trunk/application: application-api/src/main/java/org/apache/aries/application/management/ application-management/src/main/java/org/apache/aries/application/management/impl/ application-runtime/src/main/java/org...

Author: not
Date: Mon Feb 15 18:29:54 2010
New Revision: 910286

URL: http://svn.apache.org/viewvc?rev=910286&view=rev
Log:
ARIES-162 Ensure when we uninstall an ApplicationContext the ApplicationContextManager forgets about it, and the ApplicationContext state changes to UNINSTALLED.

Modified:
    incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/management/ApplicationContextManager.java
    incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/impl/AriesApplicationManagerImpl.java
    incubator/aries/trunk/application/application-runtime/src/main/java/org/apache/aries/application/runtime/impl/ApplicationContextImpl.java
    incubator/aries/trunk/application/application-runtime/src/main/java/org/apache/aries/application/runtime/impl/ApplicationContextManagerImpl.java

Modified: incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/management/ApplicationContextManager.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/management/ApplicationContextManager.java?rev=910286&r1=910285&r2=910286&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/management/ApplicationContextManager.java (original)
+++ incubator/aries/trunk/application/application-api/src/main/java/org/apache/aries/application/management/ApplicationContextManager.java Mon Feb 15 18:29:54 2010
@@ -44,4 +44,11 @@
    * @return The set of all ApplicationContexts.
    */
   public Set<ApplicationContext> getApplicationContexts();
+
+  /**
+   * Remove the provided ApplicationContext from the running system.
+   * 
+   * @param app the application to remove.
+   */
+  public void remove(ApplicationContext app);
 }

Modified: incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/impl/AriesApplicationManagerImpl.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/impl/AriesApplicationManagerImpl.java?rev=910286&r1=910285&r2=910286&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/impl/AriesApplicationManagerImpl.java (original)
+++ incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/impl/AriesApplicationManagerImpl.java Mon Feb 15 18:29:54 2010
@@ -231,12 +231,14 @@
     return result;
   }
   
-  public void uninstall(ApplicationContext app) throws BundleException {
+  public void uninstall(ApplicationContext app) throws BundleException 
+  {
     Set<Bundle> bundles = app.getApplicationContent();
     for (Bundle b : bundles) { 
       b.uninstall();
     }
 
+    _applicationContextManager.remove(app);
   }
 
   public void addApplicationListener(ApplicationListener l) {

Modified: incubator/aries/trunk/application/application-runtime/src/main/java/org/apache/aries/application/runtime/impl/ApplicationContextImpl.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-runtime/src/main/java/org/apache/aries/application/runtime/impl/ApplicationContextImpl.java?rev=910286&r1=910285&r2=910286&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-runtime/src/main/java/org/apache/aries/application/runtime/impl/ApplicationContextImpl.java (original)
+++ incubator/aries/trunk/application/application-runtime/src/main/java/org/apache/aries/application/runtime/impl/ApplicationContextImpl.java Mon Feb 15 18:29:54 2010
@@ -160,4 +160,9 @@
     }
     _state = ApplicationState.RESOLVED;
   }
+
+  public void setState(ApplicationState state)
+  {
+    _state = state;
+  }
 }

Modified: incubator/aries/trunk/application/application-runtime/src/main/java/org/apache/aries/application/runtime/impl/ApplicationContextManagerImpl.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-runtime/src/main/java/org/apache/aries/application/runtime/impl/ApplicationContextManagerImpl.java?rev=910286&r1=910285&r2=910286&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-runtime/src/main/java/org/apache/aries/application/runtime/impl/ApplicationContextManagerImpl.java (original)
+++ incubator/aries/trunk/application/application-runtime/src/main/java/org/apache/aries/application/runtime/impl/ApplicationContextManagerImpl.java Mon Feb 15 18:29:54 2010
@@ -20,6 +20,7 @@
 package org.apache.aries.application.runtime.impl;
 
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
@@ -29,16 +30,17 @@
 import org.apache.aries.application.management.ApplicationContextManager;
 import org.apache.aries.application.management.AriesApplication;
 import org.apache.aries.application.management.ManagementException;
+import org.apache.aries.application.management.ApplicationContext.ApplicationState;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.BundleException;
 
 public class ApplicationContextManagerImpl implements ApplicationContextManager {
 
-  ConcurrentMap<AriesApplication, ApplicationContext> _appToContextMap;
-  BundleContext _bundleContext;
+  private ConcurrentMap<AriesApplication, ApplicationContextImpl> _appToContextMap;
+  private BundleContext _bundleContext;
   
   public ApplicationContextManagerImpl () { 
-    _appToContextMap = new ConcurrentHashMap<AriesApplication, ApplicationContext>();
+    _appToContextMap = new ConcurrentHashMap<AriesApplication, ApplicationContextImpl>();
   }
   
   public void setBundleContext (BundleContext b) { 
@@ -46,12 +48,12 @@
   }
   
   public ApplicationContext getApplicationContext(AriesApplication app) throws BundleException, ManagementException {
-    ApplicationContext result;
+    ApplicationContextImpl result;
     if (_appToContextMap.containsKey(app)) { 
       result = _appToContextMap.get(app);
     } else { 
       result = new ApplicationContextImpl (_bundleContext, app);
-      ApplicationContext previous = _appToContextMap.putIfAbsent(app, result);
+      ApplicationContextImpl previous = _appToContextMap.putIfAbsent(app, result);
       if (previous != null) { 
         result = previous;
       }
@@ -61,10 +63,28 @@
 
   public Set<ApplicationContext> getApplicationContexts() {
     Set<ApplicationContext> result = new HashSet<ApplicationContext>();
-    for (Map.Entry<AriesApplication, ApplicationContext> entry: _appToContextMap.entrySet()) {
+    for (Map.Entry<AriesApplication, ApplicationContextImpl> entry: _appToContextMap.entrySet()) {
       result.add (entry.getValue());
     }
     return result;
   }
 
-}
+  public void remove(ApplicationContext app)
+  {
+    Iterator<Map.Entry<AriesApplication, ApplicationContextImpl>> it = _appToContextMap.entrySet().iterator();
+    
+    while (it.hasNext()) {
+      Map.Entry<AriesApplication, ApplicationContextImpl> entry = it.next();
+      
+      ApplicationContextImpl potentialMatch = entry.getValue();
+      
+      if (potentialMatch == app) {
+        it.remove();
+        
+        potentialMatch.setState(ApplicationState.UNINSTALLED);
+        
+        break;
+      }
+    }
+  }
+}
\ No newline at end of file