-
Language:
English
-
Language:
English
Red Hat Training
A Red Hat training course is available for Red Hat Fuse
Chapter 7. Building JBI Components Using Maven
Important
The Java Business Integration components of Red Hat JBoss Fuse are considered deprecated. You should consider migrating any JBI applications to OSGi.
Overview
Red Hat JBoss Fuse 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 Red Hat JBoss Fuse 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 Red Hat JBoss Fuse Maven tools, you add the elements shown in Example 7.1 to your POM file.
Example 7.1. POM elements for using Red Hat JBoss Fuse Maven tools
... <pluginRepositories> <pluginRepository> <id>fusesource.m2</id> <name>JBoss Fuse 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>JBoss Fuse 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>JBoss Fuse 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 Red Hat JBoss Fuse Maven tools and to load the plug-in that implements the tools.
Creating a JBI Maven project
The Red Hat JBoss Fuse 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 7.2 shows the command for using the JBI archetypes.
Example 7.2. 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 7.3, you specify a value of
jbi-component
for the project's packaging
element, which informs the Red Hat JBoss Fuse Maven tooling that the project is for a JBI component.
Example 7.3. 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 7.4. The groupId
element, the artifactId
element, the version
element, and the extensions
element are common to all instances of the Red Hat JBoss Fuse Maven plug-in. If you use the Maven archetypes to generate the project, you should not have to change them.
Example 7.4. 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 Red Hat JBoss Fuse 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 enginebinding-component
for creating a binding component
-
bootstrap
- Specifies the name of the class that implements the JBI
Bootstrap
interface for the component.TipYou can omit this element if you intend to use the defaultBootstrap
implementation provided with Red Hat JBoss Fuse. -
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 Red Hat JBoss Fuse 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 7.5, to instruct the Red Hat JBoss Fuse 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 7.5. 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 Red Hat JBoss Fuse Maven tooling generates a standard jar containing the shared library and an installable JBI package for the shared library.