LibraryLink ToToggle FramesPrintFeedback

Setting up a FUSE ESB OSGi project

A Maven project for building an OSGi bundle can be a simple single level project. It does not require any sub-projects. However, it does require that you do the following:

  1. Add the bundle plug-in to your POM.

  2. Instruct Maven to package the results as an OSGi bundle.

[Tip]Tip

There are several Maven archetypes you can use to set up your project with the appropriate settings.

A project that constructs an OSGi bundle can be a single level project. It only requires that you have a top-level POM file and a src folder. As in all Maven projects, you place all Java source code in the src/java folder, and you place any non-Java resources in the src/resources folder.

Non-Java resources include Spring configuration files, JBI endpoint configuration files, and WSDL contracts.

[Note]Note

FUSE ESB OSGi projects that use Apache CXF, Apache Camel, or another Spring configured bean also include a beans.xml file located in the src/resources/META-INF/spring folder.

Before you can use the bundle plug-in you must add a dependency on Apache Felix. After you add the dependency, you can add the bundle plug-in to the plug-in portion of the POM.

Example B.1 shows the POM entries required to add the bundle plug-in to your project.

Example B.1. Adding an OSGi bundle plug-in to a POM

...
<dependencies>
  <dependency> 1
    <groupId>org.apache.felix</groupId>
    <artifactId>org.osgi.core</artifactId>
    <version>1.0.0</version>
  </dependency>
...
</dependencies>
...
<build>
  <plugins>
    <plugin> 2
      <groupId>org.apache.felix</groupId>
      <artifactId>maven-bundle-plugin</artifactId>
      <configuration>
        <instructions>
          <Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName> 3
          <Import-Package>*,org.apache.camel.osgi</Import-Package> 4
          <Private-Package>org.apache.servicemix.examples.camel</Private-Package> 5
        </instructions>
      </configuration> 
    </plugin>
  </plugins>
</build>
...

The entries in Example B.1 do the following:

1

Adds the dependency on Apache Felix

2

Adds the bundle plug-in to your project

3

Configures the plug-in to use the project's artifact ID as the bundle's symbolic name

4

Configures the plug-in to include all Java packages imported by the bundled classes; also imports the org.apache.camel.osgi package

5

Configures the plug-in to bundle the listed class, but not to include them in the list of exported packages

[Note]Note

Edit the configuration to meet the requirements of your project.

For more information on configuring the bundle plug-in, see Configuring the Bundle Plug-In.

To have Maven use the bundle plug-in, instruct it to package the results of the project as a bundle. Do this by setting the POM file's packaging element to bundle.

There are several Maven archetypes to generate a project that is preconfigured to use the bundle plug-in:

The Spring OSGi archetype creates a generic project for building an OSGi project using Spring DM, as shown:

You invoke the archetype using the following command:

The Apache CXF code-first archetype creates a project for building a service from Java, as shown:

You invoke the archetype using the following command:

The Apache CXF wsdl-first archetype creates a project for creating a service from WSDL, as shown:

You invoke the archetype using the following command:

The Apache Camel archetype creates a project for building a route that is deployed into FUSE ESB, as shown:

You invoke the archetype using the following command: