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 modulewhenever 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
felix.jar |
Start the framework
From the installation directory by typing in the terminal
java -jar bin/felix.jar |
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 |
SSwill 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 |
0 comments:
Post a Comment