ServiceMix OSWorkflow

The ServiceMix OSWorkflow component provides workflow functionality to the ESB. You can specify one or more workflows and it's processing will start when a valid message is received.

Availability

Note that this component is not yet available in the current smx release version. It is part of the actual trunk so maybe a developer snapshot will contain it.

OSWorkflow HowTo

If you have no experience with the OSWorkflow itself, then it would be a good idea to have a look at the website http://www.opensymphony.com/osworkflow/ and reading the documentation and tutorials there.

Installation

Installing the servicemix-osworkflow component can be done in several ways:

  • drop the installer zip in an hotdeploy directory monitored by ServiceMix
  • using ant tasks

Note that when using ant tasks, the component is not started, you will have to start it manually using ant tasks or a console.

Creation

You can use Maven to create a service unit.

mvn archetype:create \
    -DarchetypeGroupId=org.apache.servicemix.tooling \
    -DarchetypeArtifactId=servicemix-osworkflow-service-unit \
    -DgroupId=com.mycompany.myproduct \
    -DartifactId=mycomponent.artifact

You can also use the helper tool smx-arch in the bin folder of your servicemix installation. Look
at the help to see the needed parameters.

This will give you a simple workflow example to start with.

<dir>
|--- src
     |--- main
          |--- java
          |    |--- ExampleFunction.java
          |    |--- ExampleCondition.java
          |--- resources
               |--- exampleflow.xml
               |--- osworkflow.xml
               |--- workflows.xml
               |--- xbean.xml

XBean deployment

You can deploy Service Units containing a file named xbean.xml for activating endpoints.
Note that you have to define the namespace with

<beans xmlns:osworkflow="http://servicemix.apache.org/osworkflow/1.0">
    ...
</beans>

Any numbers of endpoints can be specified in the xbean.xml file.

Endpoints

The endpoint will receive messages from the NMR and will start then the processing of the workflow. You
can send both, InOnly and InOut messages to this endpoint. Sending an InOnly message will start the workflow in
a separate thread, while sending an InOut will result in sychronous processing of the workflow.

OSWorkflow endpoint
<osworkflow:endpoint service="test:workflow"
                       endpoint="workflowEndpoint"
                       action="1"
                       caller="callerName"
                       workflowName="testflow" />
OSWorkflow endpoint attributes
Name Type Description Required
service QName the service name of the exposed jbi endpoint yes
endpoint String the endpoint name of the exposed jbi endpoint yes
action String the initial action called in workflow (must be a int value) yes
caller String if set, this will be set as the caller user name of the workflow no
workflowName String the name of the workflow to start. This name must be specified in workflows.xml yes

For all xbean file endpoint configuration take a look at Xml schemas

TransientVars

To help you working with this component, there are several variables predefined in the transientVars.

TransientVars
Key-Constant Value-Type Value-Description
OSWorkflow.KEY_EXCHANGE MessageExchange the message exchange which was received before this workflow was started
OSWorkflow.KEY_IN_MESSAGE NormalizedMessage the "in" message which was received before this workflow was started
OSWorkflow.KEY_ENDPOINT OSWorkflowEndpoint the endpoint managing this workflow (provides useful helper methods)
OSWorkflow.KEY_CALLER String The caller user name defined in the endpoints configuration (caller in xbean)
OSWorkflow.KEY_ASYNC_PROCESSING Boolean if true, the workflow is running in a separate thread


Attention

You are completly responsible for doing the message handling. If you received a InOnly exchange for example, you have to set it's state to DONE yourself. Also when working with InOut exchanges you have to send the answer yourself in the workflow. For the error handling it's the same.