Eric D. Schabell: Enhancing your JBoss Integration with JBoss BRMS in Practice

Monday, November 4, 2013

Enhancing your JBoss Integration with JBoss BRMS in Practice

In the previous article in this series, we talked about extending and expanding your enterprise integration to account for an expanding architectural landscape that included diverse backend systems.

In this article we want to provide an example project, called the BRMS Fuse Integration Demo, that demonstrates how to achieve some of the discussed use cases, specifically how to integrate your service bus with a business process engine.

Introduction

The main focus of this article will be an actual integration project that provides you with an architectural blueprint for calling out to your Red Hat JBoss Business Rules Management System (BRMS) engine from your Red Hat JBoss Fuse service bus messaging routes. The use cases that were discussed in the previous article were as follows:

Use cases

  • call JBoss Fuse (Camel) services from a business process (BPM)
  • call JBoss BRMS to apply rules from JBoss Fuse (Camel) route, such as content based routing rules
  • call a business process from a JBoss Fuse (Camel) route
The project we provide covers the last use case, where we want to trigger a business process from one of our JBoss Fuse (Camel) routes. Our project provides the following aspects to provide you with a quick way to get started and an architectural blueprint.

Example project

  • Automated installation of JBoss Fuse
  • Automated installation of JBoss BRMS
  • Example BPM project deployed to JBoss BRMS
    • Process is a three step process (Start → “Hello World” → End) that logs a message on execution
  • Example (Camel) route deployed to JBoss Fuse
    • Fuse (Camel) route that is triggered by messages from a specific data directory
    • Logging of message from route
    • SOAP Web service call from route to collect external information
    • REST service call from a Bean from the camel route to start the external business process 

JBoss BRMS and Fuse demo project

The reference project shows an example of integrating JBoss BRMS with a focus on the BPM component and JBoss Fuse. The environment consists of a JBoss Fuse instance with a Fuse (Camel) deployment and a JBoss BRMS instance with a BPM project. We touched on the business process, but let us examine the rest of the projects in more detail.

We have designed our architecture to loosely couple the business process allowing access by other components, like our JBoss Fuse example project, by using a REST client from our Camel route. The REST client uses the Process ID and the proper user credentials to start a new instance of the business process.

Peek under the hood

The demo project will execute a lot of the mechanics out of our sight, so let us take you on a tour of what is happening under the hood of our project. If all goes according to plan it would step through our project as follows:
  1. The src/data directory defined in the Camel route is checked for xml messages which contain a stock code in a SOAP message. In our example we are using RHT as the symbol to get stock data on from the external SOAP Web Service. Open up the message1.xml file to see the sample SOAP envelope and body.
  2. When a xml file is found then the body of the message is read in and displayed in the log message.
  3. Next the message is sent to the external SOAP web service to get the stock information.
  4. The response that is returned is then displayed in the log message.
  5. Next the startProcessFromCamel method in the RestClientSimple is called to start the business process that prints hello world. Additional information on calling the RestAPI that is provided by JBoss BRMS BPM component is found below. As noted in the section Future work, the stock data will be sent to to the business process.
  6. The process id is displayed in the log message.

The Fuse Component

The Fuse project starts with our simpleRoute project, which contains two parts. The first is our RestClientSimple class, which allows us to define the business process ID and the user credentials. We need this class in when dealing with starting our process through the JBoss BRMS BPM RestAPI. The second is our camel-spring.xml file which contains our bean and route. A bean is defined with startit as the ID and RestClientSimple as the class.

Here is a closer look at a section of the camel-spring-xml file.

<bean id="startit" class="com.jboss.examples.RestClientSimple"/>
<camelContext trace="false" xmlns="http://camel.apache.org/schema/spring">
<route id="my_Sample_Camel_Route_with_CXF">
<from uri="file:src/data?noop=true"/>
<log message="&gt;&gt;&gt; ${body}" loggingLevel="INFO"/>
<to uri="cxf://http://www.webservicex.net/stockquote.asmx?wsdlURL=src/main/resources/META-INF/stockquote.wsdl&serviceName={http://www.webserviceX.NET/}StockQuote&amp;portName={http://www.webserviceX.NET/}StockQuoteSoap&amp;dataFormat=MESSAGE"/>
<log message="&gt;&gt;&gt; ${body}" loggingLevel="INFO"/>
<to uri="bean:startit?method=startProcessFromCamel"/>
<log message="&gt;&gt;&gt; ${body}" loggingLevel="INFO"/>
</route>
</camelContext>

Note that the SOAP web service call to get stock data and then the call for the startProcessFromCamel method in the RestClientSimple class. We aren't currently passing the stock data to the business process, but that is possible, see the section on future work.

Our RestSimpleClient gives three options for interaction with our JBoss BRMS BPM deployment.

  1. RestClientSimple starts a process without parameters
  2. RestClientStartWithParam starts a process with parameters
  3. RestClientTask starts a process and complete a task with form data

In our case we are will be  using the first option, but for more information on the RestAPI see the Red Hat Customer Portal Knowledge base article.

Future work

This article has demonstrated how to integrate your service bus with a business process engine. This example project solved only one of the use cases and there are interesting extensions that could be added.

  • The business process can be replaced by a more extensive example process, such as the Customer Evaluation Demo to show both BPM and rule integration.
  • Parametrize the REST service such that diverse processes could be called. 
  • Pass the Stock data that was looked up in the Camel route as a parameter into the business process for display like the current Hello World.
  • Deploy the SimpleRestClient service in apart bundle within JBoss Fuse container. Currently it is a bean in the route but it could be set as a proxy service that would receive a processID, user name, and user password.)

These extensions we leave for you to work out, like homework exercises, as you explore the integration scenarios that JBoss BRMS and JBoss Fuse can solve for you.

(Co-authored by Kenny Peeples & Eric D. Schabell)