Question

I am Using Eclipse Virgo/Gemini Blueprint and have an Interface with multiple implementations:

Implementation 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" />

Implementation 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" />

Implementation 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" />

And a Client:

<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>

The startUp method is a simple method which iterates over the whole list and prints out a simple string (for testing purpose)

The Problem is if i install the client Bundle only two out of tree Services are in my List. If i stop and start the Bundle again, all three Services are in my List.

Any ideas/sugesstions why?

Is it possible to tell virgo that the list MUST contain all Services matching MyInterface?

If you need additional information feel free to ask

Was it helpful?

Solution

The content of the reference list is dynamic, items will be added and removed as matching services comes and goes. But you can implement a reference listener that is notified when the list changes to keep track of available services. Se discussion and examples here.

OTHER TIPS

The list does contain all the services matching MyInterface... at some arbitrary instant in time. But then a new service comes along.

Really this concept of "all services" is meaningless. You can never really know whether you've got all the services because somebody could always publish a new one later. The best you can do is to get a snapshot of the current services, and then dynamically adjust as new services come along later.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top