Лучший подход для обработки динамического добавления услуг

У меня есть этот компонент (псевдокод):

@Component
class ServiceComponent {
  Set<MyService> set = synchronizedSet();

  @Activate
  activate(){... process set...}

  @Reference
  addService(MyService service){set.add(service)}
}

Теперь, изначально, когда компонент активирован, он будет добавлять все доступные экземпляры MyService. Но как мне лучше обрабатывать добавления после активации компонента?

2 ответа

В последней версии DS вы можете делать полевые аннотации. Если вы укажете поле, которое будет изменчивым, оно будет обновляться при входе новых сервисов.

 @Reference
 volatile Set<MyService>   services;

На самом деле ваш код, как написано, получит только один экземпляр MyServiceпотому что ссылки имеют кардинальность 1..1 по умолчанию.

Для привязки ко всем экземплярам измените объявление ссылки следующим образом:

@Reference(cardinality = ReferenceCardinality.MULTIPLE,
           policy = ReferencePolicy.DYNAMIC)
void addService(MyService service) {
    set.add(service);
}

Имейте в виду, что этот метод может быть вызван после или даже во время activate() метод.

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