[ 
https://issues.apache.org/jira/browse/FELIX-5337?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15660449#comment-15660449
 ] 

Pierre De Rop commented on FELIX-5337:
--------------------------------------

Ok; so the contract of the @ServiceDependency is the same as the 
"ServiceDependency.setService(Class serviceType, String filter)" method in the 
DM API. So, the serviceType is inferred from the bind method or from the class 
field.

Now, to allow to inject all services to a "bind(Object service)" callback, 
since we need to internally use the  "ServiceDependency.setService(String 
filter)" method from the DM API, I introduced a new "Any" marker interface in 
the ServiceDependency annotation, and you can now set the "service" attribute 
to it. This will make sure that the service type won't be inferred from the 
bind method parameters or from the field type:

{code}
@ServiceDenpendency(service=Any.class)
void bindServices(Object allServices) {
}
{code}

Of course, you can specify a filter. In the following, all services having the 
foo=bar property will be injected:

{code}
@ServiceDenpendency(service=Any.class, filter="(foo=bar)")
void bindServices(Object allServices) {
}
{code}


(committed patch in  revision 1769436). 

> Filter-based dependencies working differently for annotations
> -------------------------------------------------------------
>
>                 Key: FELIX-5337
>                 URL: https://issues.apache.org/jira/browse/FELIX-5337
>             Project: Felix
>          Issue Type: Bug
>    Affects Versions: dependencymanager-4.3.0
>            Reporter: J.W. Janssen
>            Assignee: Pierre De Rop
>
> I've got a "catch all" service dependency that simply wants to see *all* 
> services being registered. In the activator based implementation I simply 
> express my dependency as 
> {{createServiceDependency().setService("(objectClass=*)").setRequired(false).setCallbacks("addService",
>  "removeService")}} and I get all services I'm interested in (I mean: each 
> and every registered service).
> However, if I rewrite my code to use annotations using 
> {{@ServiceDependency(filter="(objectClass=*)", required = false, removed = 
> ...)}}, I suddenly do not see all services I expect: only services that seem 
> to be compatible with the class-space of the bundle my code lives in.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to