I understand what you mean but I think dynamic import is already a bad
thing and loading different classes depending on service impl would only
make it more complex but not really cleaner.
So the question is if your problem could perhaps be solved cleanly with
the current OSGi features.
Can you influence how the bundles 1 and 2 work? If yes then why let the
service consumer create the objects? A factory implemented in bundle 1
and bundle 2 sounds like a much better solution to me. You would then
not even need the dynamic import. Of course I may completely
misunderstand what you try to do.
Can you explain in more details how the bundles 1 and 2 work and what
the client has to do?
Christian
Am 20.04.2012 16:08, schrieb Charles Moulliard:
Bundle 1 and Bundle 2 export correctly the packages. This is simply
the client which is not able to loads the classes according to the
interface name only as we have 2 different implementations. When the
bundle client starts, its classloader has to load the classes from
bundle 1 or bundle 2. As we are using DynamicImport, this is not done
at the starting up of the bundle but when the bean is instantiated by
blueprint. Nevertheless, we have no possibilities today to tell using
DynamicImport that it must loads classes implemented in Bundle 1 or
Bundle 2 depending on info provided in the <reference interface=""
filter=""/> and the filter. That should be a great improvement of OSGI
+ Blueprint if we could have that. That will allow us to really design
/ use OSGI as a modular platform.
On Fri, Apr 20, 2012 at 3:37 PM, Christian Schneider
<[email protected] <mailto:[email protected]>> wrote:
I don´t think that you can influence this... and honestly I don´t
think you should.
The clean way of loading impl classes for the service would be to
offer two impls of a Factory interface as an OSGi service. So you
could define the interfaces at one point and let the Factory
service in Bundle1 load the classes from bundle 1 and the Factory
service in Bundle2 load those in Bundle2.
Christian
Am 20.04.2012 13:43, schrieb Charles Moulliard:
Hi,
I would like to know if this is possible for a bundle to know
based on info defined in the OSGI Service registered in the OSGI
Registry that it must loads package by example
com.mycompany.poc.service.Feedback from a bundle A and not bundle
B when its service definition contain a reference to a specific
filter ?
Bundle 1
<service ref="service"
interface="com.mycompany.poc.service.Feedback">
<service-properties>
<entry key="version" value="1"/>
</service-properties>
</service>
Bundle 2
<service ref="service"
interface="com.mycompany.poc.service.Feedback">
<service-properties>
<entry key="version" value="2"/>
</service-properties>
</service>
Bundle 3 = Client consuming service
<bean id="helloBean" class="com.mycompany.poc.client.HelloBean">
<property name="feedbackService">
<reference interface="com.xtrac.poc.service.Feedback"
filter="(version=1)"/>
</property>
</bean>
Here is the definition of the Bundle 3 Manifest
Import-Service =
com.xtrac.poc.service.Feedback
DynamicImport-Package =
com.xtrac.poc.service
This definition tells the bundle that it has do dynamically loads
classes but in this case, the OSGI runtime will load classes from
maybe Bundle A or bundle B.
Regards,
Charles Moulliard
Apache Committer
Blog : http://cmoulliard.blogspot.com
Twitter : http://twitter.com/cmoulliard
Linkedin : http://www.linkedin.com/in/charlesmoulliard
Skype: cmoulliard
--
Christian Schneider
http://www.liquid-reality.de
Open Source Architect
Talend Application Integration Divisionhttp://www.talend.com
--
Christian Schneider
http://www.liquid-reality.de
Open Source Architect
Talend Application Integration Division http://www.talend.com