Thursday, June 24, 2010

Apache ODE 1.3.4 released

Apache ODE 1.3.4 has been released recently. You can grab it from here It has a few new features and a lot of bugfixes.

First of new features is Instance Replayer ( In short, it's able to restore business process instance by reexecuting every step again based on incoming and outgoing instance communication (it mocks up outgoing requests).
The basic use cases for replayer are:
1. migrate existing log running instances to newest process version given their communication (incoming and outgoing requests)
2. reproduce error scenarios between two instances of ODE (eg. production and development)
Instance Replayer extends management api by 2 operations: replay and getCommunication. In order to do 1, you can invoke following request:

You get a new instance in the newest process version. The old one will be deleted.
In order to do 2, you need to retrieve exchanges from existing instance (or instances) by following request:

Then, you can execute replay operation on another ODE installation in order to replicate instance:
     <pmap:replay xmlns:ns="">
           ... exchanges

In order to have time control in bpel process, there is introduced special variable $ode:currentEventDateTime. It's equivalent to $fn:current-dateTime() standard XPath function during live session (while no replaying takes place) and it's set to corresponding time in past during replaying.

The next new feature is SMX4 OSGi bundle distibution. Some detailed information on how to configure it is here: In short, it's possible to deploy ODE and processes as OSGi bundles in ServiceMix4. This simplifies project structure compared to ServiceAssembly and ServiceUnit double zipped packages.

Third feature is small, but may be useful. It makes possible to define Spring properties and use them inside business process. All you need to do is to put beans.xml file in process directory (example is here: You need to define bean of name properties, like this:
  <util:properties id="properties">
      <prop key="weirdProp">myWeirdPropValue2</prop>

ODE will instantiate it and you can use it later, like this: