Декларативные сервисы OSGi / Felix: Как отфильтровать сервисы, которые нужно связать? - PullRequest
4 голосов
/ 21 ноября 2008

Я использую Apache Felix и его декларативные службы (SCR) для связи сервисных зависимостей между пакетами.

Например, если мне нужен доступ к java.util.Dictionary, я могу сказать следующее, чтобы SCR предоставил один:

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

protected void bindProperties(Dictionary d) {
}

protected void unbindProperties(Dictionary d) {
}

Теперь у меня есть более одной доступной службы словаря, и я хочу отфильтровать их, используя свойство службы «name» (я хочу только «name = myDictionary»). Я могу сделать это с помощью кода (используя ServiceTracker), но вместо этого я бы лучше указать фильтр в аннотации @scr.

Ответы [ 2 ]

4 голосов
/ 15 декабря 2008

Я думаю

target="(name=myDictionary)"

должен сделать трюк в аннотации @scr.reference. Смотри http://felix.apache.org/site/apache-felix-maven-scr-plugin.html

1 голос
/ 27 ноября 2008

В стандартном DS вы можете использовать целевой атрибут ссылочного элемента. В мире Феликса, где можно использовать аннотации, я не знаю, что такое эквивалент.

Целевой атрибут - это фильтр LDAP, который сопоставляется со свойствами службы. Итак, ваш фильтр должен быть:

(name=myDictionary)

...