LuciadLightspeed is compatible with the OSGi framework. The OSGi framework is a module system and service platform for the Java programming language. The Eclipse Rich Client Platform, for instance, uses it as its module system. This means that you can use LuciadLightspeed in applications which are based on the Eclipse Rich Client Platform , for instance.

For more information about OSGi , see http://www.osgi.org.

To use the LuciadLightspeed OSGi bundles in Eclipse, you need to add the Eclipse Plug-in Development Environment software to your Eclipse installation.

Creating bundles with the make_osgi_bundles script

Before you can use LuciadLightspeed within an OSGi framework, you must create the necessary OSGi bundles for LuciadLightspeed . These are JAR files with additional, OSGi -specific manifest headers. To create the bundles, run the make_osgi_bundles script in the build/osgi directory of your LuciadLightspeed installation.

The script creates the OSGi bundles in the distrib/osgi directory. You can add these bundles to your OSGi framework. In Eclipse, for instance, you can do this by editing the target platform. Click the Add button in the Window → Preferences → Plug-in Development → Target Platform window and add the distrib/osgi directory to the target platform.

The make_osgi_bundles script runs a Java application to make the OSGi bundles. The source files for the Java application are available in the src directory in the build/osgi directory. This way you can inspect and, if required, modify the way the script works.

Running the OSGi sample

The build/osgi directory also contains the directory com.luciad.osgi.sample. This directory contains a sample bundle that demonstrates how to develop applications based on OSGi and LuciadLightspeed .

The sample is similar to the lightspeed.fundamentals.step1 sample. The difference is that it is now delivered as an OSGi bundle. It includes the required information in the MANIFEST.MF file:

  • The LuciadLightspeed packages used by the sample are specified in the Import-Package header.

  • The Activator of the bundle is specified in the Bundle-Activator header. The activator is responsible for actually starting the sample.

Running the sample from the command prompt

To start the sample, run the start_felix script in the distrib directory. This script starts the Apache Felix OSGi runtime. The runtime is configured to load the LuciadLightspeed OSGi bundles and start the sample.

Running the sample from Eclipse

The sample directory is also a full Eclipse project. You can import it into Eclipse as an Existing Project, using Eclipse’s File → Import…​ menu item.

You can run the sample by creating a run configuration of the 'OSGi Framework' category. To run the sample without Eclipse-specific errors, you need to disable and enable specific plug-ins in the 'Bundles' tab of the run configuration.

To enable the appropriate plug-ins in the run configuration:

  1. In the 'Bundles' tab, click 'Deselect All'.

  2. Enable the 'com.luciad.osgi.sample' bundle in the 'Workspace' node in the list of bundles.

  3. Click the 'Add Required Bundles' button.

  4. Enable the 'org.eclipse.equinox.console' bundle.

  5. Enable all bundles starting with 'org.apache.felix.gogo'.

Created bundles are fragments, use Require-Bundle and rely on boot delegation

The make_osgi_bundles script converts all regular LuciadLightspeed jars to OSGi Fragments of the com.luciad.osgi bundle. All OSGi Fragments logically become a part of their host bundle. This means that they all share the same classloader. LuciadLightspeed uses this approach because it was not built from the ground up with OSGi in mind.

The make_osgi_bundles script also creates a thirdparty bundle, which contains all the third-party libraries used by LuciadLightspeed . The fragments use the Require-Bundle OSGi header to import the classes from these libraries. LuciadLightspeed uses this approach because not all third-party dependencies work well in the alternative setup, in which each library is a bundle on its own.

For the same reasons, the bundles created by the make_osgi_bundles script rely on the OSGi boot delegation feature to import the classes from the JRE. You need to configure your OSGi runtime to allow boot delegation for all classes. The startup script of the OSGi sample shows an example for the Apache Felix runtime.