| Filter ComponentFactories by properties [message #671550] |
Wed, 18 May 2011 05:38  |
Eclipse User |
|
|
|
Hi,
actually i am trying to filter component factory definitions by their specific properties. But it seems that the only properties which can be used to filter provided component factories are component.name and component.factory.
That is my factory component definition:
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0"
factory="org.redvaadin.addon.apparea.eos.services.factory.component.IPartWrapper"
name="org.redvaadin.addon.apparea.eos.services.impl.wrapper.factory.framework">
<implementation class="org.redvaadin.addon.apparea.eos.services.impl.wrapper.framework.FrameworkPartWrapper"/>
<service>
<provide interface="org.osgi.service.component.ComponentFactory"/>
</service>
<property name="org.redvaadin.addon.apparea.eos.parttype"
type="String"
value="org.redvaadin.addon.apparea.eos.parttype.IFrameworkAreaPart"/>
</scr:component>
A different bundle references this ComponentFactory service:
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0"
factory="org.redvaadin.addon.apparea.core.services.IAppAreaBuilder"
name="org.redvaadin.addon.apparea.eos.services.impl.builder">
<implementation class="org.redvaadin.addon.apparea.eos.services.impl.builder.AppareaBuilder"/>
<service>
<provide interface="org.osgi.service.component.ComponentFactory"/>
</service>
<reference bind="bindPartWrapperComponentFactory"
cardinality="0..1"
interface="org.osgi.service.component.ComponentFactory" name="frameworkWrapperComponentFactory"
policy="dynamic"
target="(&(component.factory=org.redvaadin.addon.apparea.eos.services.factory.component.IPartWrapper)
(org.redvaadin.addon.apparea.eos.parttype=org.redvaadin.addon.apparea.eos.parttype.IFrameworkAreaPart))"
unbind="unbindPartWrapperComponentFactory"/>
</scr:component>
The filter arguments seem to match:
// from provided service
factory="org.redvaadin.addon.apparea.eos.services.factory.component.IPartWrapper"
<property name="org.redvaadin.addon.apparea.eos.parttype"
type="String"
value="org.redvaadin.addon.apparea.eos.parttype.IFrameworkAreaPart"/>
// from referenced definition
target="(&(component.factory=org.redvaadin.addon.apparea.eos.services.factory.component.IPartWrapper)
(org.redvaadin.addon.apparea.eos.parttype=org.redvaadin.addon.apparea.eos.parttype.IFrameworkAreaPart))"
But the factory will be never bound to the specified target.
So i tried the "services" command from the OSGi console. But no results had been returned by the filter defined above as the target of the referenced service.
osgi> services (&(component.factory=org.redvaadin.addon.apparea.eos.services.factory.component.IPartWrapper)
(org.redvaadin.addon.apparea.eos.parttype=org.redvaadin.addon.apparea.eos.parttype.IFrameworkAreaPart))
No registered services.
So i tried the remove the component.factory filter.
osgi> services (org.redvaadin.addon.apparea.eos.parttype=org.redvaadin.addon.apparea.eos.parttype.IFrameworkAreaPart)
No registered services.
But if i am using the component.factory filter for its own, everything works pretty fine.
osgi> services (component.factory=org.redvaadin.addon.apparea.eos.services.factory.component.IPartWrapper)
// comment by Florian
---> 8 registered factories found with different org.redvaadin.addon.apparea.eos.parttype properties.
In the next step i have removed the component.factory entry from the component definition xml. So the component was not a component factory anymore.
Then i used the filter for my parttype property again:
osgi> services (org.redvaadin.addon.apparea.eos.parttype=org.redvaadin.addon.apparea.eos.parttype.IFrameworkAreaPart)
// comment by Florian
---> 8 registered factories found with different org.redvaadin.addon.apparea.eos.parttype properties.
Amazing, all services could be found.
So i suppose, that ComponentFactory services can not be filtered by its properties.
Can anybody confirm my assumption? Or did i understand something really wrong?
Many thanks in advance for your kind help,
Florian Pirchner
|
|
|
|
|
|
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.26502 seconds