Я работаю над приложением OSGi (с аннотациями felix scr), которое предоставляет услугу. Служба регистрируется с помощью внешнего API, передавая строковые значения.
listener.addSchemaChangeListener(new ChangeListener()
{
@Override
public void schemaChange(ChangeEvent changeEvent)
{
String schemaName = changeEvent.getSchemaName();
if (null != myBuilder && schemaList.contains(schemaName))
{
initVariables();
}
}
}, "SCHEMA1");
Служба использует приведенный выше фрагмент кода для регистрации слушателей для нескольких значений «SCHEMA1», «SCHEMA1», «SCHEMA3» ... Я планирую повторно использовать эту службу в различных пакетах. Но я хочу слушать только изменения SCHEMA1, а не все.
@Reference (name = "ServiceListener" ", policy = ReferencePolicy.DYNAMIC, cardinality = ReferenceCardinality.MANDATORY_UNARY, bind =" bind ", unbind =" unbind ", referenceInterface = ServiceListener.class) private AtomicReference myServiceListener = new AtomicReference‹> () ;
Если я попытаюсь использовать его в другой службе с @Reference, тогда не будет возможности передавать значения службе для прослушивания только определенных изменений схемы, чтобы служба могла быть возобновлена в моем пакете, передавая только список схемы для прослушивания вместо все. Потому что метод активации будет вызван после того, как служба будет правильно привязана к классу использования (компоненту). Есть ли в OSGi какие-либо положения для реализации этой функции?