iPOJO и связь между компонентом ipojo

У меня есть пример, касающийся моей проблемы. (объединение файлов: https://drive.google.com/file/d/0B8ThLrV6-uchaFlTZTNGQ1FnT1E/view?usp=sharing )

У меня есть 3 компонента ipojo (3 пучка):

  • CallHello использует службу DelayService, реализованную как в HelloDelay, так и в HelloComponentReplace.

  • HelloDelay и HelloComponentReplace используют службу HelloService, реализованную в HelloPrint.

При развертывании я развертываю 5 пакетов:

  • service.hello.service.jar

  • принтер.hello.printer.jar

  • delay.hello.delay.jar

  • заменить.привет.заменить.банку

  • call.hello.call.jar

Результат: DelayService всегда использует реализацию в HelloDelay.

Наконец, я запускаю Main.java для ручного управления выбором между HelloDelay и HelloComponentReplace.

  • Я реализовал функцию для запуска/остановки или удаления/установки пакетов в Main.java (и она работает хорошо). Однако допускается либо HelloDelay, либо HelloComponentReplace.

  • В случае, если оба активны и действительны, я читаю на веб-сайте iPOJO и могу использовать «компаратор». Но я не понимаю, как применить «компаратор» для управления выбором между двумя компонентами выше. Это для смены приоритета? Я знаю, что мы можем изменить приоритет пакета, но я не знаю, как применить его к моему файлу (Main.java) и iPOJO.

  • Можем ли мы управлять соединением (связыванием) между требующим компонентом и многими предоставляющими компонентами (одной и той же службой или интерфейсом)?

Я надеюсь, что вы могли бы помочь моей трудности в это время.

С наилучшими пожеланиями,


person HNT    schedule 05.11.2014    source источник


Ответы (1)


Вы можете управлять привязкой службы с помощью перехватчиков: http://felix.apache.org/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics/service-binding-interceptors.html

С помощью перехватчиков вы можете скрывать службы и/или сортировать поставщиков услуг, чтобы принудительно использовать поставщика, которого вы хотите использовать.

person Clement    schedule 05.11.2014
comment
Спасибо за ваш ответ. Могу ли я реализовать этот перехватчик как независимый компонент, который динамически управляет манипуляциями с привязкой службы? я прочитал вашу ссылку и примеры в Интернете github.com/apache/felix я не понимаю, как перехватчик может воздействовать на существующие пакеты (для изменений, требующих обслуживания пакета). С уважением, - person HNT; 06.11.2014
comment
Перехватчики — это отдельные компоненты, поэтому их можно разрабатывать и развертывать независимо от приложения. Они нацелены на «сервисные зависимости», используя свое свойство target. Это свойство представляет собой фильтр LDAP, выбирающий зависимости, которые вы хотите обработать. Например: (dependency.id=foo) выбирает зависимость с идентификатором foo, а (dependency.specification=org.acme.Foo) выбирает все зависимости, требующие интерфейса службы org.acme.Foo. - person Clement; 08.11.2014