Когда использовать ServiceTracker против ServiceReference - PullRequest
11 голосов
/ 18 ноября 2009

Я только начинаю программировать на OSGi и наткнулся на два способа прослушивания активируемых сервисов.

Первый способ из книги EclipseRCP использует ServiceReference:

String filter="(objectclass="+IModelCreator.class.getName()+")";
context.addServiceListener(this, filter);
modelCreators = Collections.synchronizedMap(
    new HashMap<ModelID, List<IModelCreator>>());
ServiceReference references[] = context.getServiceReferences(null, filter);
if(references==null) return;
for(int i=0;i<references.length;++i) {
    this.serviceChanged(new ServiceEvent(ServiceEvent.REGISTERED,
        references[i]));
}

Второй из примеров в Интернете использует ServiceTracker:

ServiceTracker logReaderTracker = new ServiceTracker(context,
                org.osgi.service.log.LogReaderService.class.getName(), null);
logReaderTracker.open();
Object[] readers = logReaderTracker.getServices();
if (readers != null) {
        for (int i = 0; i < readers.length; i++) {
        LogReaderService lrs = (LogReaderService) readers[i];
        m_readers.add(lrs);
        lrs.addLogListener(m_logger);
    }
}
logReaderTracker.close();

Какой из них является правильным и / или наилучшим способом ведения реестра всех служб, которые реализуют данный интерфейс? Есть ли другой способ сделать это? Почему существует два способа сделать одно и то же?

1 Ответ

15 голосов
/ 18 ноября 2009

Как вы уже можете получить из имени пакета, org.osgi.util.tracker.ServiceTracker - это ServiceTracker служебный класс, который (в некоторых случаях)

упрощает использование услуг из Реестр сервисов фреймворка.

В программировании всегда есть несколько способов сделать что-то. Вы можете сами управлять своими ServiceReferences или, если вам это подходит или ваша проблема, использовать встроенный служебный класс, который имеет свои варианты использования.

Также отметьте это Рекомендации по доступу к услугам

Некоторые другие источники, которые утверждают, что большую часть времени целесообразно использовать ServiceTracker

Сравнение Eclipse Extensions и OSGi Services

OSGi Service Tracker

Начало работы с OSGi: использование службы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...