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
printer.hello.printer.jar
delay.hello.delay.jar
replace.hello.replace.jar
call.hello.call.jar
Результат: DelayService всегда использует реализацию в HelloDelay.
Наконец, я запускаю Main.java для управления выбором между HelloDelay и HelloComponentReplace вручную.
Я реализовал функцию запуска / остановки или удаления / установки пакетов в Main.java (и она работает хорошо). Однако допустимы либо HelloDelay, либо HelloComponentReplace.
В случае, если оба активны и действительны, я читаю на сайте iPOJO, и я могу использовать "компаратор". Но я не понимаю, как применить "компаратор" для контроля выбора между двумя компонентами выше. Это чтобы изменить приоритет? Я знаю, что мы можем изменить приоритет пакета, но я не знаю, как подать заявку на мой файл (Main.java) и iPOJO.
Можем ли мы контролировать связь (связывание) между требуемым компонентом и множеством предоставляющих компонентов (один и тот же сервис или интерфейс)?
Я надеюсь, что вы могли бы помочь моей трудности в этот раз.
С наилучшими пожеланиями,
1 ответ
Вы можете управлять связыванием службы, используя перехватчики: http://felix.apache.org/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics/service-binding-interceptors.html
С помощью перехватчиков вы можете скрыть службы и / или отсортировать поставщиков услуг, чтобы обеспечить работу поставщика, которого вы хотите использовать.