The Open Services Gateway Initiative (OSGi) is
specification that defines modular based software management and its execution.
OSGi makes software management and its execution simpler by making large
application into small bunch of pieces and we call it as module. These modules
are working independent way so that when we need we can start module and we can
stop module. As for OSGi a module is Bundle or Plugin-in
OSGi provides execution environment so that we can install, start and stop module
whenever we required such a way OSGi provides OSGi containers to manage
lifecycle of these bundles.
Bundle/Plug-In/Software
component
Bundle is a collection Java classes and resources make
it as package then we call it as bundle and these bundle can be working as independent
or it can be depends on other bundle or plugin. We can say bundle is small piece
of software and as for OSGi we can specify as OSGi bundle.
Note:
As for our understand bundle is java jar file.
OSGi
specification
OSGi
implementations
After release of OSGi specification by OSGi Alliance in March 1999 then people
implemented specifications as software and the following are popular
implementation software open source groups.
Equinox
Equinox is reference implementation of OSGi from eclipse and they have implanted OSGi
software so that it provides runtime environment for OSGi based software
development.
Apache
Felix
Felix is also implemented OSGi specification from
Apache and its open source implementation.
Knopflerfish
Knopflerfish is another Open source Implementation for
OSGi
Note:
All above implementation covered all specifications of
OSGi R3 and OSGi R4 specifications.
Software Developers can use any one of the implementation
to implement their software as modular based way. We can also inherited features
from above all implementations.
All OSGi implementations they packages as jar file so
that it will provide execution environment for OSGi bundles. OSGi have basic
standalone container to execute bundles and if we want other environments
support we need to take relevant environment support bundle so that it will
provide execution environment for different kind of environment.
Basic
OSGi implementation Jars
From
Apache Felix
Start
the framework 
From the installation directory by typing in the
terminal
From
Eclipse Equinox
 
  | 
 
org.eclipse.osgi_3.2.0.jar 
 | 
Start OSGi Framework
 
  | 
 
java -jar org.eclipse.osgi_3.2.0.jar –console 
 | 
The above implementation jars covered all
specification that defined by OSGi so that we can develop OSGi bundles then we
can run it on OSGi containers.
OSGi
bundle Lifecycle
As for software development mode each software component
have its own lifecycle same way OSGi bundle also have its own lifecycle and
these lifecycle will be manged by OSGi Framework implementation software or we
can say OSGi containers.
The following are OSGi bundle lifecycle stages
 
  | 
 
Install 
Resolved 
Uninstall 
Start  
Active 
Stop 
 | 
Install
Install is start point to OSGi bundle and we need to install
OSGi bundle with help OSGi commands then Bundle will be available in OSGi
container.
Resolve
In the resolve stage it will check all dependent
bundles and its required bundles if everything satisfied then it will moved to other
stage otherwise it will be uninstalled.
Uninstall
Uninstall is completely removing OSGi bundle from OSGi
container and this we can manually uninstall with command or If the bundle not
resolved by all decencies then it’s automatically uninstalled.
Start
After all dependencies and required bundles are resolved then
bundle will be started, once bundle is started then it will be available for
use.
Active
Once bundle available to use in OSGi container then we
will make it active so that it will be under real usage and it we can experience
as end user.
Stop
Stop stage we can make OSGi bundle inactive so that it
will not available for real use but still Bundle available for OSGi container.
The following are the commands to working with OSGi
Bundle lifecycle
Apache
Felix 
The following are the commands to working with bundle lifecycle
and we need to provide bundle path as variable for each command.
 
  | 
 
felix:install
  file:/path/to/bundle/bundle.jar 
 
felix:start
  file:/path/to/bundle/bundle.jar 
 
felix:stop
  file:/path/to/bundle/bundle.jar 
 
felix:update
  file:/path/to/bundle/bundle.jar 
 
felix:uninstall
  file:/path/to/bundle/bundle.jar 
 | 
To work with shell based commands Apache Felix uses
another OSGi bundle called Apache Felix GOGO
Apache
Felix GOGO
Apache Felix GOGO is sub project of Apache Felix and it
provide command based interface to working with OSGi bundles lifecycle.
The Gogo subproject of Apache Felix and its consists
of three bundles
Runtime
Implements the core command processing functionality.
The following is Bundle implemented Runtime
org.apache.felix.gogo.runtime.jar
Shell
 Provides a
simple textual user interface to interact with the command processor.
The following is Bundle implemented Shell
org.apache.felix.gogo.shell.jar
Command
 Implements a
set of basic commands.
org.apache.felix.gogo.command.jar
Note:
Apache
Felix GoGo is already included in the Apache Felix Framework Software
so as soon as we start Felix OSGi jar file then it will be available as console
so that we can use above specified commands to manage bundle lifecycle.
Example
Gogo Console
Open your terminal in you system start Felix Framework
jar file then you can see Apache Felix GoGo console.
 
  | 
 
$ cd felix-framework-3.0.0 
$ java -jar bin/felix.jar 
_______________ 
Welcome to Apache Felix Gogo 
 g! lb START LEVEL 1    ID|State      |Level|Name     0|Active     |    0|System Bundle (3.0.0)     1|Active     |    1|Apache Felix Bundle Repository (1.6.2)     2|Active     |    1|Apache Felix Gogo Command (0.6.0)     3|Active     |    1|Apache Felix Gogo Runtime (0.6.0)     4|Active     |    1|Apache Felix Gogo Shell (0.6.0)     5|Installed  |    1|Example Bundle (1.0.0) g! start 5 Hello from Bundle 5. g! 
 | 
lb command
list the available bundle in OSGi container and to start the bundle we can
specify the bundle order number as
argument.
Equinox
Similar to Apache Felix equinox also have similar
commands and its console to work with bundle lifecycle
 
  | 
 
install <bundle URL>  
 
Installs
  the bundle from the given URL 
 
start <bundle # or bundle name>  
 
Starts
  the bundle with the given numeric or symbolic id 
 
stop <bundle # or bundle name>  
 
Stops
  the bundle with the given numeric or symbolic id 
 
ss  
 
Reports
  a summary status of all installed bundles 
 
diag <bundle # or bundle name>  
 
 Reports any resolution problems for the
  bundle with the given numeric or symbolic id 
 | 
Equinox also implemented OSGi console using following bundle
 
  | 
 
org.eclipse.equinox.console.jar 
 | 
Internally Equinox also used Apache Felix gogo to provide command line interface and along with
Equinox console.
Example
of Equinox Console
 
  | 
 
osgi>
  ss 
"Framework
  is launched." 
 
 
id         State       Bundle 
0          ACTIVE      org.eclipse.osgi_3.10.0.v20140606-1445 
1          ACTIVE     
  org.apache.felix.gogo.runtime_0.10.0.v201209301036 
2          ACTIVE     
  org.apache.felix.gogo.command_0.10.0.v201209301215 
3          ACTIVE     
  com.meera.sample.HelloWorld_1.0.0.qualifier 
4          ACTIVE     
  org.apache.felix.gogo.shell_0.10.0.v201212101605 
5          ACTIVE     
  org.eclipse.equinox.console_1.1.0.v20140131-1639 
 
osgi>
  stop 3 
Goodbye
  World!! 
 
osgi>
  start 3 
Hello
  World!! 
Osgi 
 | 
SS
will use to list available bundles in OSGi container and we will use Bundle number
in to start or stop bundle.
To work with Basic OSGi development using Apache Felix
we need following bundles
 
  | 
 
felix.jar 
org.apache.felix.gogo.runtime.jar 
org.apache.felix.gogo.command.jar 
org.apache.felix.gogo.shell.jar 
 | 
To work with Basic OSGi development using Equinox we
need following bundles
 
  | 
 
org.eclipse.osgi_3.10.0.jar 
org.apache.felix.gogo.runtime.jar 
org.apache.felix.gogo.command.jar 
org.apache.felix.gogo.shell.jar 
org.eclipse.equinox.console.jar 
 | 
If we want work with other environments such as web
applications we should have other OSGi bundle to provide execution run time
environment.
Example:
To work with web application environment using OSGi we
need following OSGi implementation bundles
 
  | 
 
Apache Felix HTTP Service 
 
 
 
Apache Felix Web Console 
 
 
 
Apache Felix Log 
 
 
 | 
Similarly we need different implementation OSGi bundle
to provide different types of environments.
In this case we need to setting up required bundles so
that we can create execution environment rather than this there is project from
Apache called Apache Arise it will
provide all types of pluggable OSGi plugins to create different types of
execution environment
Apache
Aries
The Aries project consists of a set of pluggable Java
components enabling an enterprise OSGi application programming model. This
includes implementations (and extensions) of the following Enterprise OSGi
specifications
 
  | 
 
Asynchronous
  Services and Promises Specification 
Blueprint
  Specification 
JTA
  Transaction Services Specification 
JMX
  Management Model Specification 
JNDI
  Services Specification 
JPA
  Service Specification 
Service
  Loader Mediator Specification 
Subsystem
  Service Specification 
 |