felix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Marcel Offermans (JIRA)" <j...@apache.org>
Subject [jira] Resolved: (FELIX-1464) issue when using a negation in ldap service dependency filter
Date Tue, 11 Aug 2009 08:33:15 GMT

     [ https://issues.apache.org/jira/browse/FELIX-1464?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Marcel Offermans resolved FELIX-1464.
-------------------------------------

    Resolution: Fixed

Please review the applied patch and comment and re-open if this is not satisfactory.

> 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
>            Assignee: Marcel Offermans
>            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 {
>     mgr.add(createService()
>         .setInterface(Toto.class.getName(), new Hashtable() {{
>           put("key", "toto");
>         }})
>         .setImplementation(new Toto() {
>           public String toString() { return "toto"; }
>         }));
>     mgr.add(createService()
>         .setImplementation(this)
>         .add(createServiceDependency()
>           .setService(Toto.class, "(!(key=tutu))")
>           .setAutoConfig("_toto").setRequired(true)));
>   }
>   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,
> Arjun

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


Mime
View raw message