You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by pd...@apache.org on 2010/08/25 22:41:48 UTC

svn commit: r989366 - /felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ServiceLifecycleHandler.java

Author: pderop
Date: Wed Aug 25 20:41:47 2010
New Revision: 989366

URL: http://svn.apache.org/viewvc?rev=989366&view=rev
Log:
Once a component is started, make sure that all named dependencies are not in "instance bound" mode anymore, because we would like the component to be destroyed if a named dependency is not available anymore

Modified:
    felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ServiceLifecycleHandler.java

Modified: felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ServiceLifecycleHandler.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ServiceLifecycleHandler.java?rev=989366&r1=989365&r2=989366&view=diff
==============================================================================
--- felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ServiceLifecycleHandler.java (original)
+++ felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ServiceLifecycleHandler.java Wed Aug 25 20:41:47 2010
@@ -26,13 +26,19 @@ import java.util.Dictionary;
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Hashtable;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicBoolean;
 
+import org.apache.felix.dm.BundleDependency;
+import org.apache.felix.dm.ConfigurationDependency;
 import org.apache.felix.dm.Dependency;
 import org.apache.felix.dm.DependencyManager;
+import org.apache.felix.dm.ResourceDependency;
 import org.apache.felix.dm.Service;
+import org.apache.felix.dm.ServiceDependency;
+import org.apache.felix.dm.TemporalServiceDependency;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceRegistration;
@@ -222,6 +228,8 @@ public class ServiceLifecycleHandler
     public void start(Service service)
         throws IllegalArgumentException, IllegalAccessException, InvocationTargetException
     {
+        // Check if some extra service properties are returned by start method.
+        
         DependencyManager dm = service.getDependencyManager();
         Map<String, String> extraProperties = new HashMap<String, String>();
         Object[] composites = service.getCompositionInstances();
@@ -255,6 +263,25 @@ public class ServiceLifecycleHandler
                 service.setServiceProperties(new Hashtable(extraProperties));
             }
         }
+        
+        // Remove "instance bound" flag from all dependencies, because we want to be deactivated
+        // once we lose one of our named dependencies (which are instance bound dependencies).
+        
+        Iterator it = m_namedDeps.iterator();
+        while (it.hasNext())
+        {
+            Dependency d = (Dependency) it.next();
+            try
+            {
+                InvocationUtil.invokeCallbackMethod(d, "setInstanceBound",
+                                                    new Class[][] { { Boolean.TYPE }, {} },
+                                                    new Object[][] { { Boolean.FALSE }, {} });
+            }
+            catch (NoSuchMethodException e)
+            {
+                Log.instance().log(LogService.LOG_ERROR, "Lifecycle handler could not reset instanceBound of dependency: %s", e, d);
+            }
+        }
     }
 
     /**