I've the following scenario:
To simplify, let's say that DBAdapter1 deletes records from a database table and DBAdapter2 (invoked through OSB proxy) inserts a record in a different table. I want to be able to rollback the first DBAdapter invocation in case of a failure in the 2nd one.
Within a BPEL process I'm invoking DBAdapter1 and an OSB Proxy using SOADIRECT. My bpel process has transaction=REQUIRED.
In the OSB Proxy, I'm setting TransactionRequired=ENABLED in message handling tab, as well as setting QOS as 'EXACTLY-ONCE' in the Route activity to invoke DBAdapter2.
This configuration works fine, i.e., if an error occurs in DBAdapter2 (or osb proxy), all the transaction is rolled back, however I'm not able to send the fault back from OSB Proxy to BPEL. BPEL Invoke will finish with:
oracle.soa.api.invocation.InvocationException: com.bea.wli.sb.transports.client.SBTransportException: A Transport Exception occurred during an SB Transport message processing.
JTA transaction is not in active state.
which doesn't seems to make any sense for me, because OSB Proxy shouldn't end the global transaction initiated in BPEL. If I add an Error Handler in my proxy service, I can capture the proper error coming from the DBAdapter2, however this fault is never propagated back to BPEL.
Any idea what am I doing wrong here? How can I propagate transactions and faults using soadirect from osb to bpel?
Thanks,