Last week I have been learning OSGi.
I got my first application running in OSGi. I am not going to write another getting started post with code that will show a hello world. But rather give you an idea how to start getting in the mud. And then may be show you more than a direction :)
I used Equinox 3.4 (OSGi R4) implementation. I prefered it over Felix. Why - Eqinox is simple, and a single jar download. But I guess that aint a thing to notice. You can get Equinox jar from here. If the link is broken, go here, download the equinox framework, it should be ~0.95MB.
Start equinox framework as
As per the spec, (and by now, you know) a bundle is a jar with some special informtion in MANIFIEST.MF. A Bundle jar need not DO anything. It could just sit installed or be active (by exporting packages and services). So if you have a jar with just one interface that defines a static final variable: It can be jar-ed to a bundle too. It may not do much (other than exposing the constant). but it is a Bundle.
And then, There is a starter interface is BundleActivator. No I am not writing Hello World program. This interface can be used by adding
errr.. its 22:10, I gotta go to bed now.. If you want to learn more, Dont download a book. Start with the code. You can figure? Start with this one. I will see you in the next post..
I got my first application running in OSGi. I am not going to write another getting started post with code that will show a hello world. But rather give you an idea how to start getting in the mud. And then may be show you more than a direction :)
I used Equinox 3.4 (OSGi R4) implementation. I prefered it over Felix. Why - Eqinox is simple, and a single jar download. But I guess that aint a thing to notice. You can get Equinox jar from here. If the link is broken, go here, download the equinox framework, it should be ~0.95MB.
Start equinox framework as
java -jar equinox.jar -consoleYou would have seen this on a lot of sites. but I did fall on two things flat on my face; missing -console and doing it wrong --console :P
As per the spec, (and by now, you know) a bundle is a jar with some special informtion in MANIFIEST.MF. A Bundle jar need not DO anything. It could just sit installed or be active (by exporting packages and services). So if you have a jar with just one interface that defines a static final variable: It can be jar-ed to a bundle too. It may not do much (other than exposing the constant). but it is a Bundle.
And then, There is a starter interface is BundleActivator. No I am not writing Hello World program. This interface can be used by adding
Import-Package: org.osgi.frameworkmanifest header(mind the space after the colon). Along with that, You need to point (only one) a class that implements this interface (start() and stop()) to handle the call backs by adding
Bundle-Activator: fully.qualified.class.name.of.HelloWorldBundleActivatorThat gives you enormous power to do a loooot of things in OSGi. You are now literally the master of the universe (or atleast of the framework instance :P). Because with these two hooks (callback methods) you can traverse through the BundleContext. The BundleContext(, like ServletContext) exposes you to a lot of things around you. The framwork, The bundles living with you, Thier metadata, Their statuses, mechanism to programatically do stuff..
errr.. its 22:10, I gotta go to bed now.. If you want to learn more, Dont download a book. Start with the code. You can figure? Start with this one. I will see you in the next post..