What is a JBI SU and how do I create one?
The JBI spec includes deployment units for packaging of JBI components and JBI service units (SUs). SU is an abbreviation for a JBI service unit. JBI Components are JBI compliant components that are deployed into ServiceMix and are awaiting a configuration to tell them how to run. A SU is essentially the packaging for a configuration for a JBI component and any of the necessary dependencies for the SU to be deployed. From a packaging perspective, the JBI SU is similar to a JavaEE WAR file if you're familiar with web application development. It's really just an archive to bundle together everything to deploy to the server. So to make use of one of the JBI components, all you really need to do is create a configuration.
To create a configuration, a JBI SU, you can use the Maven archetypes that are provided with ServiceMix. Maven archetypes are used to create a Maven project skeleton to jumpstart project creation via the automation of repetitive tasks by following standard conventions. The result of using a Maven archetype to create a Maven project is a directory structure, a Maven POM file and, depending on the archetype being used, sometimes Java objects and JUnit tests.
Creating the SU
Here is an example of creating a SU for the servicemix-http component that comes with ServiceMix. The servicemix-http component is a JBI binding component (BC). It is deployed to the ServiceMix container and just sits there awaiting a configuration SU to be deployed to it so it knows how to behave. If you're familiar with JavaEE resource adapters (RARs), the concept of JBI components is very similar to this. The JBI components don't do anything until they're configured, just like a RAR file. In order to tell the JBI component what to do, a configuration for it must be deployed.
What we'll do now is use a Maven archetype to create a Maven project to create a SU for specific to the servicemix-http component. However, before creating a SU, we need to know if it's a consumer or a provider. Below is a diagram to help explain the difference:
A Consumer SU or a Provider SU?
JBI components (Service Engines and Binding Components) can act as a service consumer, a service provider or both. The diagram above below outlines these concepts using the example of a ServiceMix HTTP Consumer BC and a ServiceMix HTTP Provider BC. Notice Below is a diagram to help explain the difference:
In the diagram above, notice where requests are initiated and the direction of the arrows to denote the flow from the initiator.
Creating a SU Maven Project
For this example, let's suppose that we're creating a consumer SU. A consumer SU contains a configuration that tells the servicemix-http component to expose an endpoint via HTTP for some service that is already running on the JBI Normalized Message Router (NMR). Below is the command to create the consumer SU for the servicemix-http component:
...
The only requirement of a JBI SU is that it contain a JBI deployment descriptor located in META-INF/jbi.xml
. As mentioned above, the Maven archetypes for SUs create a pom.xml
file that includes configuration and use of the Maven JBI plugin. This is a plugin that automatically generates the META-INF/jbi.xml
file based on other information in the pom.xml
file. Below is the hierarchy of the contents of the SU archive that is created when running the Maven install goal as noted above:
Panelcode |
---|
$ jar tvf ./target/my-consumer-su-1.0-SNAPSHOT.jar 0 Wed Mar 28 0 Wed Mar 28 20:19:52 MDT 2007 META-INF/ 126 Wed Mar 28 20:19:50 MDT 2007 META-INF/MANIFEST.MF 292 Wed Mar 28 20:19:50 MDT 2007 META-INF/jbi.xml 1281 Wed Mar 28 20:19:40 MDT 2007 xbean.xml 0 Wed Mar 28 0 Wed Mar 28 20:19:52 MDT 2007 META-INF/maven/ 0 Wed Mar 28 0 Wed Mar 28 20:19:52 MDT 2007 META-INF/maven/com.mycompany/ 0 Wed Mar 28 0 Wed Mar 28 20:19:52 MDT 2007 META-INF/maven/com.mycompany/my-consumer-su/ 2613 Wed Mar 28 17:30:46 MDT 2007 META-INF/maven/com.mycompany/my-consumer-su/pom.xml 119 Wed Mar 28 20:19:50 MDT 2007 META-INF/maven/com.mycompany/my-consumer-su/pom.properties |
Notice that this SU archive contains a META-INF/jbi.xml
file. This was created by the Maven JBI plugin. Below is the pom.xml
file for the project above:
...