Red Hat Training

A Red Hat training course is available for Red Hat Fuse

2.4. API Bundle


This section explains how to set up a Maven project for a typical API bundle.
The hello-paris bundle exemplifies an API bundle, which contains only public Java interfaces. Hence, the API bundle should export all of its own packages and associate a version number with the exported packages.

Directory structure

The hello-paris bundle has the following directory structure:
     |  |
     |  \--java/
     |     |
     |     \--org/fusesource/example/hello/paris/
     |        |
     |        \
The Java source code is located under the src/main/java sub-directory. The package is public and all of its classes and interfaces can be exported from the bundle.
There are no blueprint resources associated with this bundle.

Sample API

The hello-paris bundle is a pure API, which means it contains only Java interfaces. In this example, there is a single interface, HelloParis, which returns a localized greeting and a Clock object that tells the local time. The HelloParis interface is defined as follows:
// Java

import org.fusesource.example.time.Clock;

public interface HelloParis {
    public String getGreeting();
    public Clock getLocalTime();

Maven dependencies

In the Maven POM file, the hello-paris bundle defines dependencies on the following Maven artifact:
  • time-util

Import and export rules

The following import and export rules apply to the hello-paris bundle:
  • Exporting own packages—the package is public, and must be exported.
  • Importing own packages—none of the bundle's own packages should be imported.
  • Importing dependent packages—any external package dependencies must be imported.

Maven bundle plug-in settings

The Maven bundle plug-in is configured to export the API package, (coded as ${project.groupId}*). The Export-Package instruction also contains entries to block the export of any packages containing .impl or .internal. In this case, the bundle plug-in instructions are as follows:

Generated MANIFEST.MF file

When you build the bundle using Maven, the Maven bundle plug-in automatically generates the following MANIFEST.MF file:
Manifest-Version: 1.0
Bundle-Name: hello-paris
Build-Jdk: 1.5.0_08
Created-By: Apache Maven Bundle Plugin
Import-Package: org.fusesource.example.time;version="[1.0,2)"
Bundle-ManifestVersion: 2
Bundle-SymbolicName: org.fusesource.example.hello-paris
Tool: Bnd-1.15.0
Bnd-LastModified: 1296826928285
Bundle-Version: 1.0.0
The Import-Package header lists one external package dependency, org.fusesource.example.time. None of the bundle's own packages are imported.
The Export-Package header is used to export the API package,, while the uses clause declares a transitive dependency on the org.fusesource.example.time package.