OSGi Concepts Bundle Life-Cycle

From CDOT Wiki
Jump to: navigation, search

Lifecycle of an OSGi Bundle

INSTALLED - The bundle has been installed into the OSGi container, but some of the bundle's dependencies have not yet been met. The bundle requires packages that have not been exported by any currently installed bundle.

RESOLVED - The bundle is installed, and the OSGi system has connected up all the dependencies at a class level and made sure they are all resolved. The bundle is ready to be started. If a bundle is started and all of the bundle's dependencies are met, the bundle skips this state.

STARTING - A temporary state that the bundle goes through while the bundle is starting, after all dependencies have been resolved. the BundleActivator.start method will be called and this method has not yet returned.

ACTIVE - The bundle is running. Disabled while Spring is doing its stuff. Spring scans the Spring configuration and builds the context, then hands the context to the plugin. The plugin needs the context in order to create instances of each plugin module.

STOPPING - A temporary state that the bundle goes through while the bundle is stopping. The BundleActivator.stop method has been called but the stop method has not yet returned.

UNINSTALLED - The bundle has been removed from the OSGi container.

Bundle-lifecycle.png SpringSource® dm Server™

For instance a typical Java class implementing the BundleActivator interface is shown below in the Sample Bundle from your course:

package cs.ecl.osgi.simple.bookfinderservice;

import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;

import cs.ecl.osgi.simple.bookfinder.BookFinder;
import cs.ecl.osgi.simple.bookfinderservice.internals.BookFinderImplementation;

public class Activator implements BundleActivator {

	private static BundleContext context;

	static BundleContext getContext() {
		return context;
	public void start(BundleContext bundleContext) throws Exception {
		Activator.context = bundleContext;
		BookFinder bookService = new BookFinderImplementation();
		context.registerService(BookFinder.class.getName(), bookService, null);
		System.out.println(" Bookfinder service registered ");
	public void stop(BundleContext bundleContext) throws Exception {
		Activator.context = null;
		System.out.println(" Bookfinder service stopped ");