蓝图服务列表:等待所有服务

时间:2013-01-22 16:10:18

标签: java spring osgi eclipse-virgo blueprint-osgi

我正在使用Eclipse Virgo / Gemini Blueprint并拥有一个具有多个实现的接口:

实施1:

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">

<bean id="MyID1"
    class="ImplementationCLass1">
</bean>

<service ref="MyID1"
    interface="MyInterface" />

实施2:

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">

<bean id="MYID2"
    class="ImplementationClass2">
</bean>

<service ref="MYID2"
    interface="MyInterface" />

实施3:

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">

<bean id="MyID3"
    class="ImplementationClass3">
</bean>

<service ref="MyID3"
    interface="MyInterface" />

和客户:

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">

<reference-list id="MyImplementations"
    interface="MyInterface" />

<bean id="clientID" class="ClientClass"
    init-method="startUp">

    <property name="services" ref="MyImplementations"></property>

</bean>

startUp方法是一个简单的方法,它迭代整个列表并打印出一个简单的字符串(用于测试目的)

问题是如果我安装了客户端Bundle,那么只有两个树服务在我的列表中。 如果我再次停止并启动Bundle,则所有三项服务都在我的列表中。

任何想法/意见为什么?

是否可以告诉处女座列表必须包含与MyInterface匹配的所有服务?

如果您需要其他信息,请随时提出

2 个答案:

答案 0 :(得分:2)

参考列表的内容是动态的,随着匹配服务的进出,将添加和删除项目。但是,您可以实现在列表更改时通知的引用侦听器,以跟踪可用服务。 Se discussion and examples here

答案 1 :(得分:1)

列表确实包含与MyInterface匹配的所有服务...在某个任意时刻。但随后出现了一项新服务。

真的是这个&#34;所有服务的概念&#34;毫无意义。你永远不可能真正知道你是否已经获得了所有服务,因为有些人总是可以在以后发布一个新服务。您可以做的最好的事情是获取当前服务的快照,然后在新服务出现后动态调整。