!!! OSGi
[{TableOfContents }]
\\
__Open Services Gateway Initiative__
!! Resources
* [OSGi Alliance Home|http://www.osgi.org]
* [OSGi Core Release 5 Specification|osgi.core-5.0.0.pdf]
* [OSGi In Practice (Draft)|http://njbartlett.name/files/osgibook_preview_20091217.pdf]
* [Developing enterprise OSGi applications for WebSphere Application Server|http://www.ibm.com/developerworks/websphere/techjournal/1007_robinson/1007_robinson.html]
* [Manifest Headers|http://wiki.osgi.org/wiki/Category:Manifest_Header]
* [Tooling|http://wiki.osgi.org/wiki/Category:Tooling]
* [Building Modular Cloud Apps with OSGi|http://shop.oreilly.com/product/0636920028086.do]
* [Apache Felix, an implementation of the OSGi R4 Service Platform and other interesting OSGi-related technologies|http://felix.apache.org]
* [Apache Karaf, a small OSGi based runtime|http://karaf.apache.org]
* [Apache Aries, a set of pluggable Java components enabling an enterprise OSGi application programming model|http://aries.apache.org]
* [Pax Runner, a tool to provision OSGi bundles in all major open source OSGi framework implementations (Felix, Equinox, Knopflerfish, Concierge)|https://ops4j1.jira.com/wiki/display/paxrunner/Pax+Runner]
* [Equinox, a set of bundles that implement various optional OSGi services and other infrastructure for running OSGi-based systems. |http://www.eclipse.org/equinox/]
* [Apache ACE, an (OSGi based) software distribution framework to centrally manage and distribute software components|http://ace.apache.org/]
* [bnd tool|http://www.aqute.biz/Bnd/Bnd]
* [Apache Felix downloads (bundles)|http://mirror.switch.ch/mirror/apache/dist/felix/]
!! 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|http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fmisc%2Fruntime-options.html]
Install the bndtools from Eclipse update site [http://bndtools-updates.s3.amazonaws.com/]
Create the HelloWorldActivator.java file :
%%prettify
{{{
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) :
%%prettify
{{{
# 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 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)
}}}
!! Apache Felix Web Console
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|http://mirror.switch.ch/mirror/apache/dist/felix/org.apache.felix.webconsole-4.2.0.jar]
After fiddling a lot with required bundles I finally got it working. The required bundles in addition to the webconsole were:
[OSGi Compendium|http://mirror.switch.ch/mirror/apache/dist/felix/org.osgi.compendium-1.4.0.jar] and the [Jetty http service|http://mirror.switch.ch/mirror/apache/dist/felix/org.apache.felix.http.jetty-2.2.2.jar] and I also installed the [Log service|http://mirror.switch.ch/mirror/apache/dist/felix/org.apache.felix.webconsole-4.2.0.jar], 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|http://localhost:8080/system/console] . user=admin, password=admin.