Yes, I understand the intention of managed service factories, I would just like to be able to attache service properties to the services created by the factory.
In my situation, my managed service factory would be creating services based on a generic interface, so many bundles will be contributing services based on this single generic interface and I use service properties to differentiate between them.
For a contrived example, the Spring docs have a managed service factory that creates a java.util.Queue. Imagine I'd like to create lots of Queue services, but of different types, like java.util.Queue<String> and java.util.Queue<Long>. One bundle would like to use the Queue<String> and another the Queue<Long>. The way I went about this was to register the services with properties, like
Code:
<osgi:service ref="myStringQueue" interface="java.util.Queue">
<osgi:service-properties>
<entry key="targetClassName" value="java.lang.String"/>
</osgi:service-properties>
</osgi:service>
<osgi:service ref="myLongQueue" interface="java.util.Queue">
<osgi:service-properties>
<entry key="targetClassName" value="java.lang.Long"/>
</osgi:service-properties>
</osgi:service>
so consumers of these services can be wired up like
Code:
<osgi:reference id="stringQueueConsumer" interface="java.util.Queue"
filter="(targetClassName=java.lang.String)"/>
<osgi:reference id="longQueueConsumer" interface="java.util.Queue"
filter="(targetClassName=java.lang.Long)"/>
In this situation I don't have extending interfaces to differentiate between different gerneric Queue implementations, so the OSGi filters help.