Lean OSGi Launch Configurations with Jetty
Over the last years I have seen many OSGi project, and while I am pretty happy with most of them there is a tendency to oversized launch configurations. Keeping the launch configs lean is not easy because the automatic dependency resolver can not always pick the smallest set possible. And maybe even worse it is not always obvious which bundles you need to select to make a configuration complete.
I recently developed a small mobile app for iOS and Android with Tabris and RAP and want to share my way of creating a minimal launch config with you.
There are basically 3 categories of bundles in the launch configuration that my app relies on which I use as a “mind hook”:
1. OSGi and Eclipse Code Bundles 2. Bundles for the embedded Jetty server 3. Bundles for the Remote Application Platform (RAP)
So this is how my launch configuration looks like:
1. OSGi and Eclipse Core
org.eclipse.osgi
(Level:-1, Auto:true)
org.eclipse.equinox.ds
(Level:1, Auto:true)
org.eclipse.osgi.services
org.eclipse.equinox.console
org.apache.felix.gogo.command
org.apache.felix.gogo.runtime
org.apache.felix.gogo.shell
org.eclipse.equinox.util
org.eclipse.equinox.http.servlet
org.eclipse.equinox.common
(Level:2, Auto:true)
org.eclipse.core.commands
2. Jetty Webserver
javax.servlet
org.eclipse.equinox.http.jetty
org.eclipse.jetty.continuation
org.eclipse.jetty.http
org.eclipse.jetty.io
org.eclipse.jetty.security
org.eclipse.jetty.server
org.eclipse.jetty.servlet
org.eclipse.jetty.util
3. Remote Application Platform (RAP)
org.eclipse.rap.rwt
org.eclipse.rap.rwt.osgi
org.eclipse.rap.jface
com.eclipsesource.tabris
(optional bundle to enable native mobile apps)
Configuration Arguments
Program arguments:
-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl en -consoleLog -console -clean
VM arguments:
-Declipse.ignoreApp=true
-Dosgi.noShutdown=true
-Dorg.osgi.service.http.port=9090
-Dorg.eclipse.equinox.http.jetty.context.sessioninactiveinterval=0
-Xmx700m
Semi-automatic Bundle Selection
Select the following bundle and “Add Required Bundles” to obtain a working Jetty:
org.eclipse.equinox.http.jetty
For a minimal RAP you only need:
org.eclipse.rap.rwt.osgi
org.eclipse.equinox.ds
Don’t forget to “Add Required Bundles”
If you would like to use the Felix OSGi Shell you have to add the “-console
” Program Argument and select all Bundles starting with:
org.apache.felix.gogo.*
Please note: 1. You should not forget to add your own project(s) to your launch configuration! 2. Setting sessioninactiveinterval
to 0
forces sessions to never time out. This can be handy for debugging purposes. 3. At the RAP Developer’s Guide you find a detailed listing of all RAP related bundles.
If you have feedback or something to add, please feel free to leave a comment below.