What is the difference between OSGi Components and Services

“Components” are less formally defined than services.

A service is any object that is registered in the OSGi Service Registry and can be looked up using its interface name(s). The only prerequisite is that a service should implement some interface… any interface. For example I could register a runnable object under the java.lang.Runnable interface, and clients could look it up using that interface name.

A “component” tends to be an object whose lifecycle is managed, usually by a component framework such as Declarative Services (DS), Blueprint or iPOJO. See this page on the OSGi Community Wiki for a discussion of the different component frameworks available.

A component may have any of the following features, in combination or alone:

  • A component may be started and stopped; this would be considered an “active” component, though that is also an informal term. A component that doesn’t need to be started or stopped is called passive.
  • A component may publish itself as an OSGi service.
  • A component may bind to or consume OSGi services.

In general, using a component framework is the easiest way to work with OSGi services because the framework will manage the binding to the services that you want to consume. For example you could say that your component “depends on” a particular service, in which case the component will only be created and activated when that service is available — and also it will be destroyed when the service becomes unavailable.

Leave a Comment