OSGi#
Table of Contents
Open Services Gateway Initiative
Resources#
- OSGi Alliance Home
- OSGi Core Release 5 Specification
- OSGi In Practice (Draft)
- Developing enterprise OSGi applications for WebSphere Application Server
- Manifest Headers
- Tooling
- Building Modular Cloud Apps with OSGi
- Apache Felix, an implementation of the OSGi R4 Service Platform and other interesting OSGi-related technologies
- Apache Karaf, a small OSGi based runtime
- Apache Aries, a set of pluggable Java components enabling an enterprise OSGi application programming model
- Pax Runner, a tool to provision OSGi bundles in all major open source OSGi framework implementations (Felix, Equinox, Knopflerfish, Concierge)
- Equinox, a set of bundles that implement various optional OSGi services and other infrastructure for running OSGi-based systems.
- Apache ACE, an (OSGi based) software distribution framework to centrally manage and distribute software components
- bnd tool
OSGi Tutorial#
I started a simple exercise (see OSGi In Practice above).
Starting with Eclipse Kepler, downloaded the Equinox runtime first from http://download.eclipse.org/equinox/
.
Unzip it to /usr/local/equinox-sdk-keplersr1.
Then add the Equinox named User Library to Eclipse, pointing to /usr/local/equinox-sdk-keplersr1/plugins/org.eclipse.osgi_3.9.1.v20130814-1242.jar .
Create a new Java project named "OSGi Tutorial", and make sure you use the above User Library.
Create a new runtime configuration, new Java Application, enter search this should find org.eclipse.core.runtime.adaptor.EclipseStarter and program arguments -console -configuration runtime. However, this does not work, you have to add the -consoleLog, or the (error) logging will go to a file by default.
You also need a configuration/config.ini file with (example) the following contents to be able to run a basic OSGi runtime:
# contents of config.ini osgi.bundles=\ /usr/local/equinox-sdk-keplersr1/plugins/org.apache.felix.gogo.command_0.10.0.v201209301215.jar,\ /usr/local/equinox-sdk-keplersr1/plugins/org.apache.felix.gogo.runtime_0.10.0.v201209301036.jar,\ /usr/local/equinox-sdk-keplersr1/plugins/org.apache.felix.gogo.shell_0.10.0.v201212101605.jar,\ /usr/local/equinox-sdk-keplersr1/plugins/org.eclipse.equinox.console_1.0.100.v20130429-0953.jar,\ /usr/local/equinox-sdk-keplersr1/plugins/org.eclipse.osgi_3.9.1.v20130814-1242.jar@-1:start
All parameters for the config.ini are documented on the Eclipse Help platform
Install the bndtools from Eclipse update site http://bndtools-updates.s3.amazonaws.com/
Create the HelloWorldActivator.java file :
package org.osgi.tutorial;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
public class HelloWorldActivator implements BundleActivator {
public void start(BundleContext context) throws Exception {
System.out.println(" Hello , World ! ");
}
public void stop(BundleContext context) throws Exception {
System.out.println(" Goodbye , World ! ");
}
}
&&
And the helloworld.bnd file (in root of project) :
# helloworld . bnd Private-Package: org.osgi.tutorial Bundle-Activator: org.osgi.tutorial.HelloWorldActivator Bundle-Version: 1.0 Bundle-Name: HelloWorld Sampletje Bundle-Description: Wat een prachtvoorbeeld ! Bundle-Category: Tutor Bundle-License: Apache Bundle-Vendor: DirtyHarry Bundle-ContactAddress: NL Bundle-DocURL: http://www.computerhok.nl
Switch to IntelliJ and maven-bundle-plugin#
Import the same project in IntelliJ and add framework support for maven.
This is the basic pom.xml
file to use
Then run mvn org.apache.felix:maven-bundle-plugin:bundle to create the first bundle in ./target.
Fire up the Felix shell : cd /usr/local/felix && java -jar bin/felix.jar
The lb command lists the currently installed bundles, and we install our bundle with :
g! install file:/home/metskem/workspace/OSGiTutorial/target/OSGiTutorial-1.0-SNAPSHOT.jar
Bundle ID: 13
g! lb
START LEVEL 1
ID|State |Level|Name
0|Active | 0|System Bundle (4.2.1)
1|Active | 1|Apache Felix Bundle Repository (1.6.6)
2|Active | 1|Apache Felix Gogo Command (0.12.0)
3|Active | 1|Apache Felix Gogo Runtime (0.10.0)
4|Active | 1|Apache Felix Gogo Shell (0.10.0)
13|Installed | 1|file:/home/metskem/workspace/OSGiTutorial/target/OSGiTutorial-1.0-SNAPSHOT.jar (0.0.0)
g! start 13
g!
Install Felix web console with g! install http://mirror.switch.ch/mirror/apache/dist/felix/org.apache.felix.webconsole-4.2.0.jar and the Felix log service with g! install http://mirror.switch.ch/mirror/apache/dist/felix/org.apache.felix.log-1.0.1.jar
g! install http://mirror.switch.ch/mirror/apache/dist/felix/org.apache.felix.log-1.0.1.jar
Bundle ID: 15
g! lb
START LEVEL 1
ID|State |Level|Name
0|Active | 0|System Bundle (4.2.1)
1|Active | 1|Apache Felix Bundle Repository (1.6.6)
2|Active | 1|Apache Felix Gogo Command (0.12.0)
3|Active | 1|Apache Felix Gogo Runtime (0.10.0)
4|Active | 1|Apache Felix Gogo Shell (0.10.0)
13|Active | 1|file:/home/metskem/workspace/OSGiTutorial/target/OSGiTutorial-1.0-SNAPSHOT.jar (0.0.0)
14|Installed | 1|Apache Felix Web Management Console (4.2.0)
15|Installed | 1|Apache Felix Log Service (1.0.1)