LibraryToggle FramesPrintFeedback

Building JBI Components Using Maven

Overview

Fuse ESB Enterprise provides Maven tooling that simplifies the creation and deployment of JBI artifacts. Among the tools provided are:

  • Plug-ins for packaging JBI components

  • A plug-in for packaging shared libraries

  • Archetypes that create starting point projects for JBI artifacts

The Fuse ESB Enterprise Maven tools also include plug-ins for creating service units and service assemblies. However, those plug-ins are not described in this book.

Setting up the Maven tools

In order to use the Fuse ESB Enterprise Maven tools, you add the elements shown in Example 16 to your POM file.

Example 16. POM elements for using Fuse ESB Enterprise Maven tools

...
<pluginRepositories>
  <pluginRepository>
    <id>fusesource.m2</id>
    <name> Open Source Community Release Repository</name>
    <url>http://repo.fusesource.com/maven2</url>
    <snapshots>
      <enabled>false</enabled>
    </snapshots>
    <releases>
      <enabled>true</enabled>
    </releases>
  </pluginRepository>
</pluginRepositories>
<repositories>
  <repository>
    <id>fusesource.m2</id>
    <name> Open Source Community Release Repository</name>
    <url>http://repo.fusesource.com/maven2</url>
    <snapshots>
       <enabled>false</enabled>
    </snapshots>
    <releases>
      <enabled>true</enabled>
    </releases>
  </repository>
  <repository>
    <id>fusesource.m2-snapshot</id>
    <name> Open Source Community Snapshot Repository</name>
    <url>http://repo.fusesource.com/maven2-snapshot</url>
    <snapshots>
      <enabled>true</enabled>
    </snapshots>
    <releases>
      <enabled>false</enabled>
    </releases>
  </repository>
</repositories>
  ...
<build>
  <plugins>
    <plugin>
      <groupId>org.apache.servicemix.tooling</groupId>
      <artifactId>jbi-maven-plugin</artifactId>
      <version>${servicemix-version}</version> 
      <extensions>true</extensions>
    </plugin>
  </plugins>
</build>
  ...

These elements point Maven to the correct repositories to download the Fuse ESB Enterprise Maven tools and to load the plug-in that implements the tools.

Creating a JBI Maven project

The Fuse ESB Enterprise Maven tools provide a number of archetypes that can be used to seed a JBI project. The archetype generates the proper file structure for the project along with a POM file that contains the metadata required for the specified project type.

Example 17 shows the command for using the JBI archetypes.

Example 17. Command for JBI maven archetypes

mvn archetype:create -DarchetypeGroupId=org.apache.servicemix.tooling -DarchetypeArtifactId=servicemix-archetype-name -DarchetypeVersion=fuse-4.0.0.0 [-DgroupId=org.apache.servicemix.samples.embedded] [-DartifactId=servicemix-embedded-example]


The value passed to the -DarchetypeArtifactId argument specifies the type of project you are creating.

JBI components

As shown in Example 18, you specify a value of jbi-component for the project's packaging element, which informs the Fuse ESB Enterprise Maven tooling that the project is for a JBI component.

Example 18. Specifying that a maven project results in a JBI component

<project ...>
  ...
  <groupId>org.apache.servicemix</groupId>
  <artifactId>MyBindingComponent</artifactId>
  <packaging>jbi-component</packaging>
  ...
</project>

The plugin element responsible for packaging the JBI component is shown in Example 19. The groupId element, the artifactId element, the version element, and the extensions element are common to all instances of the Fuse ESB Enterprise Maven plug-in. If you use the Maven archetypes to generate the project, you should not have to change them.

Example 19. Plug-in specification for packaging a JBI component

...
<plugin>
  <groupId>org.apache.servicemix.tooling</groupId>
  <artifactId>jbi-maven-plugin</artifactId>
  <version>${servicemix-version}</version> 
  <extensions>true</extensions>
  <configuration>
    <type>service-engine</type>
    <bootstrap>org.apache.servicemix.samples.MyBootstrap</bootstrap>
    <component>org.apache.servicemix.samples.MyComponent</component>
  </configuration>
</plugin>
...

The configuration element, along with its children, provides the Fuse ESB Enterprise tooling with the metadata necessary to construct the jbi.xml file required by the component.

type

Specifies the type of JBI component the project is building. Valid values are:

  • service-engine for creating a service engine

  • binding-component for creating a binding component

bootstrap

Specifies the name of the class that implements the JBI Bootstrap interface for the component.

[Tip]Tip

You can omit this element if you intend to use the default Bootstrap implementation provided with Fuse ESB Enterprise.

component

Specifies the name of the class that implements the JBI Component interface for that component.

Once the project is properly configured, you can build the JBI component by using the mvn install command. The Fuse ESB Enterprise Maven tooling will generate a standard jar containing both the component and an installable JBI package for the component.

Shared libraries

As shown in Example 20, to instruct the Fuse ESB Enterprise Maven tooling that the project is for a shared library you specify a value of jbi-shared-library for the project's packaging element.

Example 20. Specifying that a maven project results in a JBI shared library

<project ...>
  ...
  <groupId>org.apache.servicemix</groupId>
  <artifactId>MyBindingComponent</artifactId>
  <packaging>jbi-shared-library</packaging>
  ...
</project>

You build the shared library using the mvn install command. The Fuse ESB Enterprise Maven tooling generates a standard jar containing the shared library and an installable JBI package for the shared library.

Comments powered by Disqus