Есть ли более простой метод для обработки нескольких ссылок в OSGi?

1

Предположим, у меня есть класс:

@References(
        value={
                @Reference(name="dataSources",cardinality=ReferenceCardinality.OPTIONAL_MULTIPLE,policy=ReferencePolicy.DYNAMIC,strategy=ReferenceStrategy.EVENT,bind="bind",unbind="unbind",referenceInterface=DataSourceProvider.class)
        })      
public class DataSourceStoreServiceImpl implements DataSourceStoreService {

    List<DataSourceProvider> dataSourceProviders = new CopyOnWriteArrayList<DataSourceProvider>();

    public void bind(DataSourceProvider dataSourceProvider) {
        dataSourceProviders.add(dataSourceProvider);
    }

    public void unbind(DataSourceProvider dataSourceProvider) {
        dataSourceProviders.remove(dataSourceProvider);
    }

}

Вот как я обрабатываю рефери с MULTIPLE мощностями.

Мой вопрос: можно ли это сделать без шаблона? Я имею в виду что-то вроде этого:

public class DataSourceStoreServiceImpl implements DataSourceStoreService {

    @CollectionType(CopyOnWriteArrayList.class)
    @Reference(name="dataSources",cardinality=ReferenceCardinality.OPTIONAL_MULTIPLE,policy=ReferencePolicy.DYNAMIC,strategy=ReferenceStrategy.EVENT,bind="bind",unbind="unbind",referenceInterface=DataSourceProvider.class)
    List<DataSourceProvider> dataSourceProviders

}
  • 0
    Если вы используете felix, пробовали ли вы iPOJO, поскольку это сделано для того, чтобы решить эти проблемы намного проще.
  • 0
    Пока нет, но я посмотрю на это. Спасибо!
Показать ещё 4 комментария
Теги:
osgi
apache-felix
whiteboard

1 ответ

0
Лучший ответ

Использование аннотаций IPojo.

Просто объявляя массив с аннотацией "требуется", как в этом примере:

@Requires
private Hello[] m_hello; // Service Dependency

Затем вы можете позвонить в свои службы следующим образом:

for(Hello helloService: m_hello){
       helloService.ohHai("Test");
}

О, я забыл, ваш класс провайдера требует 2 аннотации: @Component и @Provides а ваш потребительский класс нуждается в @Component и @Instantiate

Ещё вопросы

Сообщество Overcoder
Наверх
Меню