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);
+ }
+ }
}
/**