Archive for the 'BPEL' Category

Oracle, the applications company

Leaving the details of the individual sessions aside, the impression from this year’s OpenWorld is that of a shift in Oracle’s perception of themselves.

Oracle used to present itself as a technology company that happened to use its technology to build applications. Now, Oracle is an applications company that happens to build some technology (software and hardware) as needed for its applications.

This was evident from the main keynotes that focused almost exclusively on Oracle applications present and future. There was no mention of any news in either database or middleware - this was relegated to the smaller Oracle Develop sub-conference. Looking at the tag cloud in the official Schedule Builder, you search in vain for any mention of PL/SQL or Application Express - even Fusion Development (ADF) get only a small mention.

For a developer this means:

  1. The core products used for Oracle applications (Fusion/ADF/BPEL) will be around for a very long time.
  2. The non-core products (ODP.NET, Application Express, etc.) will live only as long as there is a significant community using them.

This does not mean that either ODP.NET or APEX is going away (both have strong communities), but it means that it is up to the developer community to keep Oracle interested in these products.

No Comments »

BPEL Processes failing without a trace

I am running Oracle BPEL 10.1.3.3 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.

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

Works:
<variable name="ExistingCapNordicAccess" type="xsd:string"/>
...
<assign name="AssignFromQueryCapNordic">
<copy>
<from variable="QueryCapNordicOutput"
part="QueryCapNordicOutputCollection" query="/ns2:QueryCapNordicOutputCollection/ns2:QueryCapNordicOutput/ns2:capnordic_type"/>
<to variable="ExistingCapNordicAccess"/>
</copy>
</assign>
...
<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…

No Comments »