Monthly Archives: February 2009

BPEL Processes failing without a trace

I am running Oracle BPEL and had a mysterious problem: Some workflows would fail without leaving any trace. They did not show up in the BPEL Control as Faulted – indeed they did not show at all. My process had a CatchAll branch, but this was not triggered. It was like my BPEL instances never existed. The only way I could see that anything happened at all was because the flow was triggered by a Database Adapter monitoring a table and using a sequence table. And the BPEL process did update the sequence table.

I created a test case initiated from the Initiate tab in BPEL Control and saw the same thing: The curious case of the disappearing BPEL instances. After commenting out almost everything, I finally found the culprit: I referred directly to output variable from a Database Adapter call in a switch case.

<case condition="xp20:lower-case(bpws:getVariableData('QueryCapNordicOutput','QueryCapNordicOutputCollection','/ns2:QueryCapNordicOutputCollection/ns2:QueryCapNordicOutput/ns2:capnordic_type')) = 'none'">

<variable name="ExistingCapNordicAccess" type="xsd:string"/>
<assign name="AssignFromQueryCapNordic">
<from variable="QueryCapNordicOutput"
part="QueryCapNordicOutputCollection" query="/ns2:QueryCapNordicOutputCollection/ns2:QueryCapNordicOutput/ns2:capnordic_type"/>
<to variable="ExistingCapNordicAccess"/>
<case condition="xp20:lower-case(bpws:getVariableData('ExistingCapNordicAccess')) = 'none'">

The same thing happens when you try to use the input variables for an asynchronous BPEL process in a switch case – the process disappears into the BPELmuda triangle.

Morale: There seems to be an undocumented limitation in Oracle BPEL, where you cannot refer to variables set by partner links. You need to immediately assign your partner link values to another variable and refer to this variable later in your flow.

Being way behind my project schedule, I don’t have time to create a test case and convince Oracle Support this is a bug – I hope someone else does…