У меня есть пример, связанный с моей проблемой. (Файлы сустав: https://drive.google.com/file/d/0B8ThLrV6-uchaFlTZTNGQ1FnT1E/view?usp=sharing)iPOJO и соединение между компонентом ipojo
У меня есть 3 ipojo компоненты (3 bunbles):
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.
Можем ли мы контролировать соединение (привязку) между требуемым компонентом и многими предоставляющими компонентами (такой же сервис или интерфейс)?
Я надеюсь, что вы могли бы помочь мне в этом.
С наилучшими пожеланиями,
Благодарим вас за ответ. Могу ли я реализовать этот перехватчик в качестве независимого компонента, который управляет динамической обработкой привязки сервисов? Я прочитал вашу ссылку и примеры на веб-странице https: // github.com/apache/felix я не понимаю, как перехватчик может воздействовать на существующие пакеты (для изменений, требующих обслуживания пакета). С уважением, – HNT
Перехватчики являются отдельными компонентами, поэтому их можно разрабатывать и развертывать независимо от приложения. Они нацеливают «сервисные зависимости», используя свое свойство «target». Это свойство является фильтром LDAP, определяющим зависимости, которые вы хотите обрабатывать. Например: (dependency.id = foo) выбирает зависимость с id foo, тогда как (dependency.specification = org.acme.Foo) выбирает все зависимости, требующие сервисного интерфейса org.acme.Foo. – Clement