For one of my customers, I was involved in extensive high availability testing of an Oracle SOA Suite 10g (10.1.3.3) cluster in order to determine the behaviour of BPEL processes during failover of BPEL Process Manager.
Essentially, various scenarios were designed, configured, and tested. The various failover tests included:
- Behavior of Synchronous Transactions
- Behavior of Asynchronous Transactions
- Behavior of Queue-based Transactions
- Behavior of Asynchronous Callback Transactions
- Behavior when External Asynchronous Callback Services are invoked from an Internal Client
- Behavior when Internal Asynchronous Callback Services are invoked from Internal Client
- Behavior when Internal Asynchronous Callback Services are invoked from External Client
- Behavior during OHS failover
Test Case 2: Asynchronous Transactions
This scenario is simple: An external client invokes an asynchronous BPEL process.
If the asynchronous BPEL process is in-flight on the first node and that node crashes (e.g., OC4J_SOA dies), the process is automatically resumed on the second container and runs successfully to completion. Since no response is expected by the client, operations resume normally.
Test Case 7: Invoke Internal Asynchronous Callback Service from External Client
This scenario is somewhat complicated: An external client synchronously invokes a BPEL process which in turn invokes another asynchronous BPEL process.
In normal operations, one of the following occurs when the callback is received successfully by the first BPEL process:
- A synchronous response is returned to the client.
- No response is sent to the client, in which the client eventually times out.
The diagrams below detailed the following:
- Red lines --> Request made by client.
- Blue lines --> Callback from 2nd BPEL process.
- Green lines --> Synchronous response to client.