[equinox-dev] plugin host problem

2008-12-02 Thread Fabien Autrel

Dear all,

I am new to the osgi framework and I have a question.
I have developped an application in which I want to add plugins. I have 
chosen the osgi framework to implement that but I am now facing a 
problem: my application manages the bundles through an instance of 
BundleContext obtained via a call to EclipseStarter.startup();
I have defined an interface which the plugins must implement, I have 
developped a plugin implementing the interface, the bundle is loaded and 
started without any problem but a  ClassCastException is raised when I 
try to obtain the service implementation in my application though this 
piece of code:
IPolicyProcessorService service = (IPolicyProcessorService) 
context.getService(serviceRefs[i]);
where serviceRefs[i] is the ServiceReference object corresponding to the 
plugin.


If my understanding of classloaders is correct, this exception is raised 
because the IPolicyProcessorService class file has been loaded by two 
different class loaders in the application and in the bundle so even 
though the loaded data on the disk is the same, I cannot make the cast.
So I understand that I could encapsulate my application in a bundle, my 
plugin in a bundle and import the plugin interface class from another 
bundle but it would be quite a big amount of work to modify my application.


So my final question is, is there a way of using the services exposed by 
bundles from a host application running equinox like I'm trying to do?


Thank you!
___
equinox-dev mailing list
equinox-dev@eclipse.org
https://dev.eclipse.org/mailman/listinfo/equinox-dev


Re: [equinox-dev] plugin host problem

2008-12-02 Thread Fabien Autrel

I answer to myself as I have understood how to work around the problem.
I realize that the way I'm developing my application is not the good way 
using osgi, I might soon repackage it into a bundle.
So by changing the system property osgi.parentClassloader, I can set the 
system to use the same class loader so the cast I'm doing to get the 
service implementation is ok.


Fabien Autrel a écrit :

Dear all,

I am new to the osgi framework and I have a question.
I have developped an application in which I want to add plugins. I 
have chosen the osgi framework to implement that but I am now facing a 
problem: my application manages the bundles through an instance of 
BundleContext obtained via a call to EclipseStarter.startup();
I have defined an interface which the plugins must implement, I have 
developped a plugin implementing the interface, the bundle is loaded 
and started without any problem but a  ClassCastException is raised 
when I try to obtain the service implementation in my application 
though this piece of code:
IPolicyProcessorService service = (IPolicyProcessorService) 
context.getService(serviceRefs[i]);
where serviceRefs[i] is the ServiceReference object corresponding to 
the plugin.


If my understanding of classloaders is correct, this exception is 
raised because the IPolicyProcessorService class file has been loaded 
by two different class loaders in the application and in the bundle so 
even though the loaded data on the disk is the same, I cannot make the 
cast.
So I understand that I could encapsulate my application in a bundle, 
my plugin in a bundle and import the plugin interface class from 
another bundle but it would be quite a big amount of work to modify my 
application.


So my final question is, is there a way of using the services exposed 
by bundles from a host application running equinox like I'm trying 
to do?


Thank you!
___
equinox-dev mailing list
equinox-dev@eclipse.org
https://dev.eclipse.org/mailman/listinfo/equinox-dev



___
equinox-dev mailing list
equinox-dev@eclipse.org
https://dev.eclipse.org/mailman/listinfo/equinox-dev