Декларативные сервисы OSGi / Felix: Как отфильтровать сервисы, которые нужно связать?
-
08-07-2019 - |
Вопрос
Я использую 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 = myDictionary "). Я могу сделать это с помощью кода (используя ServiceTracker), но вместо этого я бы лучше указал фильтр в аннотации @scr.
Решение
я думаю
target="(name=myDictionary)"
должен добиться цели в аннотации @ scr.reference
. См. http://felix.apache.org/site/apache -felix-Maven-И-plugin.html р>
Другие советы
В стандартном DS вы можете использовать целевой атрибут ссылочного элемента. В мире Феликса, где можно использовать аннотации, я не знаю, что такое эквивалент.
Целевой атрибут - это фильтр LDAP, который сопоставляется со свойствами службы. Итак, ваш фильтр должен быть:
<код> (Имя = MyDictionary) Код>