我有一个关于我的问题的例子。(文件接头:https://drive.google.com/file/d/0B8ThLrV6-uchaFlTZTNGQ1FnT1E/view?usp=sharing)
我有3个ipojo组件(3个bunbles):
-
CallHello使用DelayService服务,该服务在HelloDelay或HelloComponentReplace 中都实现
-
HelloDelay和HelloComponentReplace使用在HelloPrint中实现的HelloService服务。
在部署时,我部署了5个捆绑包:
-
service.hello.service.jar
-
printer.hello.inter.jar
-
delay.hello.delay.jar
-
replace.hello.replace.jar
-
呼叫.hello.all.jar
结果:DelayService始终使用HelloDelay中的实现。
最后,我运行Main.java来手动控制HelloDelay和HelloComponentReplace之间的选择。
-
我在Main.java中实现了一个启动/停止或卸载/安装捆绑包的功能(效果很好)。但是,HelloDelay或HelloComponentReplace都是有效的。
-
如果两者都是有效的,我在iPOJO网站上阅读,我可以使用"比较器"。但我不明白如何应用"比较器"来控制上面两个组件之间的选择。这是为了改变优先级吗?我知道我们可以更改捆绑包的优先级,但我不知道如何应用于我的文件(Main.java)和iPOJO。
-
我们能控制一个需要的组件和许多提供组件(相同的服务或接口)之间的连接(绑定)吗?
我希望你能在这段时间帮我解决困难。
致问候,
您可以使用拦截器操作服务绑定:http://felix.apache.org/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics/service-binding-interceptors.html
使用拦截器,您可以隐藏服务,和/或对服务提供程序进行排序,以便强制执行要使用的提供程序。