Есть ли более простой метод для обработки НЕСКОЛЬКИХ ссылок в OSGi?

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

@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

}

1 ответ

Решение

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

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

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

Тогда вы можете позвонить в ваши службы так:

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

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

Другие вопросы по тегам