JBI Deployment

Overview

Here's a quick overview to deploy ODE on a JBI container (e.g. ServiceMix)

1) Download the JBI distribution

Check our download page and get the latest JBI-based distribution. Unzip it in a directory of your choice. We'll now refer to this directory as ODE_HOME.

2) Install on JBI container

For example, with ServiceMix you can use file-system deployment:

(from ode/jbi directory)
cp ODE_HOME/ode-jbi-1.1.zip SERVICEMIX_DIR/install

The above will result in ODE being installed with the default settings. You may wish to first modify the ode-jbi.properties file found in the root of the installer ZIP.

3) Deploying Processes

We are assuming that the reader is familiar with JBI deployment concepts. Deploying a process consists of the following steps:

  1. Create a temporary service unit directory for the BPEL processes
  2. Place the relevant .bpel, .wsdl and .xsd files into the temporary directory
  3. Create an ODE deployment descriptor ([deploy.xml](deploy.xml.html)) and place it in the temporary directory
  4. (Optional) Compile the the BPEL processes using the [bpelc](bpelc.html) command.
  5. Zip up the contents of the temporary directory into a service unit archive
  6. Create a temporary service assembly directory
  7. Place the service unit archive in a temporary service assembly directory
  8. Update the service assembly's jbi.xml descriptor
  9. Zip up the contents of the service assembly directory into a service assembly archive
  10. Copy the service assembly archive into the appropriate deploy directory

Examples

Some JBI examples are available under the examples directory of the ODE distro:

  • HelloWorld2
  • PingPong
  • Async2

Extract the distro-jbi-2.0-SNAPSHOT.zip created in the build instructions above.

To compile the examples, you may wish to define the ODE_HOME environment variable.  The build script does a good job of figuring this out without ODE_HOME set, however.

# On Linux/Unix
export ODE_HOME=/path/to/ode/distribution

# On Windows
set ODE_HOME=C:\Path\To\ODE\Distribution

and run Ant in the example's directory:

cd %ODE_HOME%/examples/PingPong
ant

This will create a JBI service assembly in the "build" subdirectory. With ServiceMix you can simply copy it to the file-system hot deployment directory:

(from PingPong directory)
cp build/PingPing-sa.zip SERVICEMIX_DIR/deploy

Finally, you can test the example by typing:

(from PingPong directory)
ant test

JBI Endpoints

ODE now relies strictly on abstract web service definitions (i.e., without binding/service/port definitions), meaning that you only need abstract WSDLs when compiling processes. Since JBI uses normalized messages (in theory, at least), there is no need to define bindings for the BPEL service engine.

In deploy.xml, you simply define the JBI internal endpoints invoked or provided by your partnerLinks,

<?xml version="1.0" encoding="UTF-8"?>
<deploy xmlns="http://www.apache.org/ode/schemas/dd/2007/03"
        xmlns:process="urn:/Ping.bpel"
        xmlns:ping="urn:/Ping.wsdl"
        xmlns:pong="urn:/Pong.wsdl">

    <process name="process:Ping">
        <active>true</active>
        <provide partnerLink="PingPartnerLink">
            <service name="ping:PingService" port="PingPort"/>
        </provide>
        <invoke partnerLink="PongPartnerLink">
            <service name="pong:PongService" port="PongPort"/>
        </invoke>
    </process>

</deploy>

One may use JBI binding components to make services externally available and therefore providing concrete bindings to those binding components. An example of exposing process services via SOAP/HTTP can be found in the PingPong ping-http service unit.

Database

The generated installer will use an internally-managed embedded Derby database. No configuration is required. To use an external database one needs to modify ode-jbi.properties found in the component installer zip.

Compatibility Caveat

Many binding components are not very good about delivering messages in the correct format for WSDL11 services.

Known Issues with ServiceMix

ServiceMix' so-called lightweight components make it difficult to properly expose process services since they do not fully implement the JBI contract and do not allow the process engine to enquire about its external endpoints. * SoapHelper needs to properly resolve the WSDL operation name (patch available) https://issues.apache.org/activemq/browse/SM-488

  • The servicemix-http binding component does not normalize messages