Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java iPOJO和组件iPOJO之间的连接_Java_Ipojo - Fatal编程技术网

Java iPOJO和组件iPOJO之间的连接

Java iPOJO和组件iPOJO之间的连接,java,ipojo,Java,Ipojo,我有一个关于我的问题的例子。(联合档案:) 我有3个ipojo组件(3个包): CallHello使用在HelloDelay或HelloComponentReplace中实现的DelayService服务 HelloDelay和HelloComponentReplace使用在HelloPrint中实现的HelloService服务 在部署时,我部署了5个捆绑包: service.hello.service.jar printer.hello.printer.jar delay.hello.

我有一个关于我的问题的例子。(联合档案:)

我有3个ipojo组件(3个包):

  • CallHello使用在HelloDelay或HelloComponentReplace中实现的DelayService服务

  • HelloDelay和HelloComponentReplace使用在HelloPrint中实现的HelloService服务

在部署时,我部署了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网站上阅读,我可以使用“comparator”。但我不明白如何应用“比较器”来控制上面两个组件之间的选择。这是为了改变优先级吗?我知道我们可以更改捆绑包的优先级,但我不知道如何应用于我的文件(Main.java)和iPOJO

  • 我们能否控制一个需要的组件和多个提供组件(相同的服务或接口)之间的连接(绑定)

我希望这次你能帮助我克服困难


非常感谢,

您可以使用拦截器操纵服务绑定:


使用拦截器,您可以隐藏服务和/或对服务提供程序进行排序,以强制执行您要使用的提供程序。

谢谢您的回复。我可以将这个拦截器实现为一个独立的组件,动态控制服务绑定操作吗?我在网上读了你们的链接和例子,我不明白拦截器是如何影响现有捆绑包的(对于需要捆绑包服务的变更)。在这方面,拦截器是独立的组件,因此它们可以独立于应用程序进行开发和部署。他们使用“目标”属性以“服务依赖项”为目标。此属性是一个LDAP筛选器,用于选择要处理的依赖项。例如:(dependency.id=foo)选择id为foo的依赖项,而(dependency.specification=org.acme.foo)选择需要org.acme.foo服务接口的所有依赖项。