felix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Arjun Panday (JIRA)" <j...@apache.org>
Subject [jira] Created: (FELIX-1464) issue when using a negation in ldap service dependency filter
Date Mon, 10 Aug 2009 15:22:14 GMT
issue when using a negation in ldap service dependency filter

                 Key: FELIX-1464
                 URL: https://issues.apache.org/jira/browse/FELIX-1464
             Project: Felix
          Issue Type: Bug
          Components: Dependency Manager
    Affects Versions: dependencymanager-2.0.1
            Reporter: Arjun Panday
            Priority: Minor

I found an issue when using a negation in the service dependency ldap filter (or more generally
when the filter alone is not sufficient to narrow the search down to the required service).

Let's consider the following bundle activator:

public class Activator extends DependencyActivatorBase {
  interface Toto { }

  private Toto _toto; //injected
  public void init(BundleContext ctx, DependencyManager mgr) throws Exception {
        .setInterface(Toto.class.getName(), new Hashtable() {{
          put("key", "toto");
        .setImplementation(new Toto() {
          public String toString() { return "toto"; }
          .setService(Toto.class, "(!(key=tutu))")
  public void start() {
    System.out.println("got _toto="+_toto);
  public void destroy(BundleContext ctx, DependencyManager mgr) throws Exception {

When deployed in a framework with a WebConsole, we can see under the "Configuration Status"
tab that ALL the services in the registry (like all the org.apache.felix.shell.Command for
instance) are shown as being used by our test bundle (list of "Using bundles").
>From our test bundle point of view, only the correct service is bound because DM's ServiceTrackerCustomizer
will filter out all services whose name don't match the expected one.
But from the service registry point of view it looks quite messy.

Besides being very confusing on the WebConsole page, it becomes a real problem when, for example,
lazy activated services managed by DeclarativeService are activated when they should not.

Merely as a suggestion, I found the following patch which corrects the issue:

Index: src/main/java/org/apache/felix/dependencymanager/ServiceDependency.java
--- src/main/java/org/apache/felix/dependencymanager/ServiceDependency.java    (revision 802768)
+++ src/main/java/org/apache/felix/dependencymanager/ServiceDependency.java    (working copy)
@@ -530,7 +530,9 @@
             throw new IllegalArgumentException("Service name cannot be null.");
         m_trackedServiceName = serviceName;
-        m_trackedServiceFilter = serviceFilter;
+    if(m_trackedServiceName != null && serviceFilter != null && serviceFilter.indexOf("objectClass")
< 0) {
+      m_trackedServiceFilter = "(&(objectClass="+m_trackedServiceName.getName()+")"+serviceFilter+")";
+        } else m_trackedServiceFilter = serviceFilter;
         m_trackedServiceReference = null;
         return this;

Best regards,

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message