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