Open Services Gateway Initiative
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
Import the same project in IntelliJ and add framework support for maven.
This is the basic pom.xml
file to use
Then run mvn clean install 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)
Doing everything from the (very limited) felix command shell is tedious, so we try to get the web console working.
The primary bundle is the full webconsole bundle
After fiddling a lot with required bundles I finally got it working. The required bundles in addition to the webconsole were:
OSGi Compendium
and the Jetty http service
and I also installed the Log service
, this is not required however.
This makes up the following bundle list :
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)
15|Active | 1|Apache Felix Log Service (1.0.1)
19|Active | 1|OSGiTutorial (1.0.0.SNAPSHOT)
25|Active | 1|Apache Felix Web Management Console (All In One) (4.2.0.all)
41|Active | 1|Apache Felix Http Jetty (2.2.2)
42|Resolved | 1|OSGi R4 Compendium Bundle (4.1.0)
And there we have our web console
. user=admin, password=admin.