You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@felix.apache.org by Peter Cheung <mc...@hotmail.com> on 2013/10/17 06:31:31 UTC

adopt to OSGi

Dear All    I have a app, which is a debugger, it works with qemu and bochs. I am planning to support more VM, so I want to independent the middle part to OSGi. I am not sure i am doing it correctly:
1) I changed my app to start felix immediately after main(), in the activator, i create a new object which is the original app. So my original app is running inside OSGi container completely, this will let me avoid class-casting error.
2) I got two new projects : Interface project and Impl project. The interface project doesn't have to be a bundle. Both host app and impl project just include it in maven. Is it the best practice? or I have to make it as a bundle? but i don't see advantage.
Thanksfrom Peter 		 	   		  

Re: adopt to OSGi

Posted by Christian Schneider <ch...@die-schneider.net>.
Am 17.10.2013 06:31, schrieb Peter Cheung:
> Dear All    I have a app, which is a debugger, it works with qemu and bochs. I am planning to support more VM, so I want to independent the middle part to OSGi. I am not sure i am doing it correctly:
> 1) I changed my app to start felix immediately after main(), in the activator, i create a new object which is the original app. So my original app is running inside OSGi container completely, this will let me avoid class-casting error.
Why are you starting felix inside you main? Wouldn′t it make more sense
to just start felix from the shell and let it run your application? Or
do you need parts of your application to be non OSGi?
> 2) I got two new projects : Interface project and Impl project. The interface project doesn't have to be a bundle. Both host app and impl project just include it in maven. Is it the best practice? or I have to make it as a bundle? but i don't see advantage.
It depends on where the interface is needed. If you only need it in OSGi
then make it a bundle. If you need the interface to communicate between
OSGi and th main() then you have to make it a normal maven dependency
for your starter and export the package of the interface using a system
package export. This is the only way to share code between OSGi and non
OSGi parts of your app. Btw. the impl bundle has to have an
Import-Package for the interface package of course.

Christian
> Thanksfrom Peter 		 	   		  


-- 
 
Christian Schneider
http://www.liquid-reality.de

Open Source Architect
Talend Application Integration Division http://www.talend.com 


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
For additional commands, e-mail: users-help@felix.apache.org


Re: adopt to OSGi

Posted by "Richard S. Hall" <he...@ungoverned.org>.
On 10/17/13 00:31 , Peter Cheung wrote:
> Dear All    I have a app, which is a debugger, it works with qemu and bochs. I am planning to support more VM, so I want to independent the middle part to OSGi. I am not sure i am doing it correctly:
> 1) I changed my app to start felix immediately after main(), in the activator, i create a new object which is the original app. So my original app is running inside OSGi container completely, this will let me avoid class-casting error.
> 2) I got two new projects : Interface project and Impl project. The interface project doesn't have to be a bundle. Both host app and impl project just include it in maven. Is it the best practice? or I have to make it as a bundle? but i don't see advantage.

If the host app has to access it then it can *not* be in a bundle
(unless you plan to only access it via reflection or some other
proxy-like means in the host app).

What you will likely want to do is to include the interface in your host
app and then configure the framework to export the interface package via
the see bundle (see config property
org.osgi.framework.system.packages.extras). Then in your bundles you
import the interface package which will get it from the system bundle
(which will get it from the class loaded that loaded the framework and
is most likely the app class loader). Thus the host app and the bundles
inside the framework will all be using the same class definition.

Do *not* include multiple copies of the interface in the host and/or
bundles.

Keep in mind that as an OSGi newbie you are picking one of the more
complicated use cases as your starting point...

-> richard

> Thanksfrom Peter 		 	   		  


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
For additional commands, e-mail: users-help@felix.apache.org