2014-11-05 62 views
0

我有一个关于我的问题的例子。 (文件关节:https://drive.google.com/file/d/0B8ThLrV6-uchaFlTZTNGQ1FnT1E/view?usp=sharingiPOJO和组件ipojo之间的连接

我有3个ipojo部件(3个bunbles):

  • CallHello使用这两者HelloDelay或HelloComponentReplace

  • HelloDelay和HelloComponentReplace使用HelloService中实现的DelayService服务在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中启动/停止或卸载/安装bundle(它运行良好)。但是,HelloDelay或HelloComponentReplace是有效的。

  • 在这两种情况都有效且有效的情况下,我在iPOJO网站上阅读,我可以使用“比较器”。但我不明白如何应用'比较'来控制上述两个组件之间的选择。这是否改变优先权?我知道我们可以改变bundle的优先级,但是我不知道如何应用到我的文件(Main.java)和iPOJO。

  • 我们可以控制需求组件和许多提供组件(相同的服务或接口)之间的连接(绑定)吗?

我希望你能在这段时间帮助我的困难。

最好的问候,

回答

0

你可以操纵的服务中使用拦截器绑定:http://felix.apache.org/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics/service-binding-interceptors.html

随着拦截器,你可以隐藏的服务,和/或以强制要使用提供商的服务提供商排序。

+0

谢谢您的回复。 我可以实现这个拦截器作为一个独立的组件,它动态地控制服务绑定操作吗?我在网上https:// github上阅读你的链接和例子。com/apache/felix我不明白拦截器如何影响现有的bundle(对于需要捆绑服务的更改)。 Regards, – HNT 2014-11-06 11:34:23

+0

拦截器是单独的组件,因此它们可以独立于应用程序进行开发和部署。他们使用他们的“目标”属性来定位“服务依赖”。该属性是一个LDAP筛选器,用于选择要处理的依赖关系。例如:(dependency.id = foo)选择id为foo的依赖项,while(dependency.specification = org.acme.Foo)选择需要org.acme.Foo服务接口的所有依赖项。 – Clement 2014-11-08 08:01:12