Recently I came across an issue in the Oracle community site related to behaviour of transactions in BPEL component. The issue was when a BPEL component is having a database call followed by a synchronous webservice call. Though the database call is part of the XA transaction that is started when BPEL instance is created, the database changes are not getting rolled back incase of Exception after the webservice call. This happens only when the nonBlockingInvoke property is set to TRUE for the webservice invoke activity. If nonBlockingInvoke property is set to FALSE the database changes are getting rolled back as expected.
In one of the old Oracle documentation it is mentioned that, the invoke activity of a synchronous service with nonBlockingInvoke property set to true, will create a "New Transaction". That could be the reason why the previous database adapter call has got commited before the Webservice invocation. So rollback of database changes has not happened.
It was interesting to know this. The key takeaway is to be careful to check whether the properties we define while implementations meets the requirement expectation. Please feel free to share your experience if you have faced similar issue.