Now partnerlinks in sync processes participate in global tx in 2 ways
1. set transaction=participate at the partnerlink (child BPEL or esb call) level
2. set transaction=participate at global level under
Now for the global tx to work, you have to use datasource with global tx enabled and using an XA driver(may not be true XA).
So when there is error (bindingfault) from dbadapter calls, it will mark the tx for rollback, but it will actually not rollback.
What we have seen is you have to set handleTopLevelFault=false in the configurations/bpel.xml so that rollback works. The other approach is to throw rollback exception in catch-all block.
The following seems to be best-way for global tx handling (10.1.3.4 on weblogic 9.2)
1. XA driver with Global tx enabled
2. in catch-all throwing rollback exception
This is rolling back the db inserts, as well dehydrating the bpel.
As bpel dehydration is happening, it seems it’s happening in a separate thread/tx (need to check if its a supported feature in 10.1.3.4). However we also saw the instance getting into recover(invoke) while using handleTopLevelFault=false.
a good discussion in OTN here and here
some good bpel tx details here and here
update on 23/10
10.1.3.4 does support audit in a seprate thread in async mode as per release notes.