The Apache CXF Distributed OSGi subproject provides the Reference Implementation of the Distribution Provider component of the OSGi Remote Services Specification (Chapter 13 in the OSGi 4.2 Compendium Specification).
It implements the Remote Services functionality using Web Services, leveraging SOAP over HTTP and exposing the Service over a WSDL contract. Starting from version 1.1, Java interfaces can also be exposed and consumed as RESTful JAX-RS services.
An implementation of an OSGi Remote Service Admin compliant Discovery Service is also worked on in this project. (For more information on the Remote Service Admin specification see http://www.osgi.org/download/osgi-4.2-enterprise-early-draft4.pdf).
This page is about getting started and the demos, further links:
Getting Started
To get started, get yourself a CXF-DOSGi distribution. The following distributions are available:
- Multi Bundle Distribution: This distribution is a zip file containing the Distributed OSGi bundles, as well as all their dependencies.
- Single Bundle Distribution: This is a convenience distribution of a single bundle that embeds all the dependencies.
Which distribution to take? That depends on what you are doing. The single-bundle distribution is a really convenient way of getting started as it provides all of Distributed OSGi plus its dependencies in one.
The multi-bundle distribution is obviously a little more work to install, but the fine-grained bundles do have an extra benefit: they allow sharing. So if your application depends on one or more of the library bundles, it can use them from the multi-bundle distribution. Similarly, the multi-bundle distribution makes it possible to update the dependency bundles - if compatible - without having to replace the Distributed OSGi bundles.
Get a distribution by:
- Downloading a built distribution. See the DOSGi Releases page.
- Alternatively, built the distribution yourself. See the DOSGi Build page.
Setting up your OSGi container
Setting up the single-bundle distribution is really simple, see below. For instructions on setting up the multi-bundle distribution see the Multi Bundle Setup page.
Prerequisites for the single-bundle distribution:
The single-bundle distribution requires some of the interfaces of the OSGi compendium specification. These are provided with the Equinox and Felix OSGi distributions, but not installed by default.
Setting up Felix
The compendium interfaces can be downloaded from the following here: http://archive.apache.org/dist/felix/org.osgi.compendium-1.2.0.jar or from a local mirror as per the Felix Download page.
To set up Felix you can follow these steps:
Verified with: Felix 1.8.0
../felix-1.8.0> java -jar bin/felix.jar Welcome to Felix. ================= -> start http://repo1.maven.org/maven2/org/osgi/org.osgi.compendium/4.2.0/org.osgi.compendium-4.2.0.jar -> start http://www.apache.org/dist/cxf/dosgi/1.1/cxf-dosgi-ri-singlebundle-distribution-1.1.jar ... some log messages may appear... -> ps START LEVEL 1 ID State Level Name [ 0] [Active ] [ 0] System Bundle (1.8.0) [ 1] [Active ] [ 1] Apache Felix Shell Service (1.2.0) [ 2] [Active ] [ 1] Apache Felix Shell TUI (1.2.0) [ 3] [Active ] [ 1] Apache Felix Bundle Repository (1.4.0) [ 4] [Active ] [ 1] osgi.cmpn (4.2.0.200908310645) [ 5] [Active ] [ 1] Distributed OSGi Distribution Software Single-Bundle Distribution (1.1)
However, you can also change the conf/config.properties
file to automatically load these bundles. This approach is described in the Multi Bundle Setup page.
Setting up Equinox
The compendium interfaces are part of the Equinox/Eclipse distribution and can be found in a file called plugins/org.eclipse.osgi.services_3.2.0.v20090520-1800.jar (the timestamp could vary).
To set up Equinox you can follow these steps:
Verified with: Eclipse 3.5 RC 3
.../eclipse> java -jar plugins/org.eclipse.osgi_3.5.0.v20090520.jar -console osgi> install file:plugins/org.eclipse.osgi.services_3.2.0.v20090520-1800.jar Bundle id is 1 osgi> install http://www.apache.org/dist/cxf/dosgi/1.1/cxf-dosgi-ri-singlebundle-distribution-1.1.jar Bundle id is 2 osgi> start 2 ... some log messages may appear... osgi> ss Framework is launched. id State Bundle 0 ACTIVE org.eclipse.osgi_3.5.0.v20090520 1 RESOLVED org.eclipse.osgi.services_3.2.0.v20090520-1800 2 ACTIVE cxf-dosgi-ri-singlebundle-distribution_1.1.0
However, you can also create a config.ini
file to automatically load these bundles. This approach is described in the Multi Bundle Setup page.
Using Equinox from within the Eclipse IDE
This option is really handy for debugging. Verified with: Eclipse 3.5M4
Setting up Eclipse for Running and Debugging Distributed OSGi
Setting up CXF/DOSGi Discovery
See the DOSGi Discovery page and the DOSGi Discovery Demo page.
The Samples
The samples directory contains these sample projects:
Sample |
Description |
Doc Page |
---|---|---|
greeter |
a very simple demo of a Greeter OSGi Service exposed remotely and a Consumer invoking on it. |
|
greeter_rest |
(starting from 1.1-SNAPSHOT) a very simple demo of a Greeter OSGi Service exposed remotely as a RESTful service and a Consumer invoking on it. Virtually identical to a greeter sample |
|
spring_dm |
a demo created using Spring-DM. Rather than invoking on the OSGi API's directly, the Spring-DM demo shows how you can use Spring to configure your beans as OSGi Services and similarly how to use Spring-DM to invoke a (remote) OSGi Service. |
|
ds |
this demo shows how Distributed OSGi can be used with OSGi Declarative Services (DS). |
|
discovery |
this demo shows how to use Distributed OSGi with a dynamic Discovery system such as the one based on Zookeeper that comes with CXF/DOSGi. |
|
iPOJO |
this demo shows how Distributed OSGi can be used with iPOJO |
The samples can be installed directly from the maven release repository (as described in the demo documentation pages), but you can also build them yourself.
To build the samples from source:
- simply check out the DOSGi trunk from SVN (http://svn.apache.org/repos/asf/cxf/dosgi/trunk
)
- go into the
samples
directory - and build them using
mvn install