4

I am using Apache Felix and its Declarative Services (SCR) to wire the service dependencies between bundles.

For example, if I need access to a java.util.Dictionary I can say the following to have SCR provide one:

/**
* @scr.reference name=properties interface=java.util.Dictionary
*/

protected void bindProperties(Dictionary d) {
}

protected void unbindProperties(Dictionary d) {
}

Now, I have more than one Dictionary service available, and I want to filter them using the "name" service property (I only want "name=myDictionary"). I can do that with code (using a ServiceTracker), but I'd rather specify the filter in the @scr annotation instead.

skaffman
  • 398,947
  • 96
  • 818
  • 769
Thilo
  • 257,207
  • 101
  • 511
  • 656

2 Answers2

4

I think

target="(name=myDictionary)"

should do the trick in the @scr.reference annotation. See http://felix.apache.org/site/apache-felix-maven-scr-plugin.html

Alexander Klimetschek
  • 3,585
  • 31
  • 36
1

In standard DS, you can use target attribute of the reference element. In Felix world, where annotations can be used, I don't know what is the equivalent.

The target attribute is an LDAP filter, which matches against the service properties. So, your filter should be:

(name=myDictionary)

Danail Nachev
  • 19,231
  • 3
  • 21
  • 17
  • 1
    I think target="(name=myDictionary)" should do the trick in the @scr.reference annotation. See http://felix.apache.org/site/apache-felix-maven-scr-plugin.html – Alexander Klimetschek Dec 11 '08 at 00:06