By Rajeev Misra
We have seen in several customer scenarios where a Parent BPEL process calls a child BPEL process asynchronously. If child process runs into any kind of business or system fault, fault handler sends callback to parent process with failure information. Please note, since parent had invoked child process asynchronously, child can't throw fault back to parent. Callback is only mechanism to inform parent about the failure in child process execution during asynchronous interaction. This pattern works fine if transaction of child process is not getting rolled back. If child process encounters some error where underlying JTA transaction is marked for rollback, callback may not reach parent process if parent and child are collocated. This is because, callback invoke from child to parent will use the child's JTA transaction to save callback in dehydration store, but since child's transaction is in rollback state, callback message information would be rolled back from dehydration store after JTA transaction rolls back.
Second issue is while trying to terminate an instance after it has encountered error which results into transaction rollback. Since terminate state update of instance in dehydration store will be rolled back with transaction, any attempt to execute terminate in fault handler will be futile.
We are recommending a pattern that could help resolve both of above problems. Please look at the flow: Read the complete article here.
For regular information on Oracle SOA Suite become a member in the SOA & BPM Partner Community for registration please visit www.oracle.com/goto/emea/soa (OPN account required) If you need support with your account please contact the Oracle Partner Business Center.