You have modeled a composite that has two BPEL processes: X and Y. The WSDL for Y defines
a single portType with a one-way operation. The WSDL for X defines a single portType with a
request-response operation. The component property bpel.config.trancation is set to requiresNew
for Process X, and the component property bpel.config.oneWayDeliveryPolicy is set to
async.persist for process Y. You have wired these components so that Y invokes X.
What is the result when X throws a remoteFault at runtime, assuming that X has no catch blocks
defined within it?
A.
The transaction of X is rolled back, and process Y gets a remoteFault that can be caught and
handled.
B.
A Fault policy defined for X for handling the remoteFault is triggered and handles the fault.
C.
The transaction of X is committed, and process gets a Fault back that can be caught and
handled.
D.
The transactions of X and Y are both rolled back even If you have fault handlers configured for
handling the remote fault in Y.
Explanation:
* Main Process Calls the Subprocess Asynchronously
IfonewayDeliveryPolicy=async.persist
(The BPELCallee process runs in a separate thread/transaction.)
then If The Subprocess Throws Any Fault…
The BPELCaller does not get a response because the message is saved in the delivery service.
The BPELCallee transaction is rolled back if the fault is not handled
“… X has no catch blocks defined.” = X doesn’t handle the fault = answer B is wrong.
Correct answer is (A), check out http://docs.oracle.com/cd/E28280_01/dev.1111/e10224/soa_transactions.htm#autoId4
A
B. When onewayDeliveryPolicy=async.persist, the BPELCaller does not get a response because the message is saved in the delivery service. The BPELCallee transaction is rolled back if the fault is not handled.
Also, if no catch block defined the fault is processed by the default fault handler.
http://docs.oracle.com/cd/E15586_01/integration.1111/e10224/bp_faults.htm
1) the fault is in Sync-called service, not in OneWay. The BPELCaller does get response.
2) fault policy for remoteFault will handle will hanlde faults in invoke another services (that’s the point where Y calls X). It would triggers in Y but not in X.
X has it’s own transaction, so it is rolled back on fault. The Y has it’s own one and can handle remoteFault (for example with fault policy for remoteFault)
The answer is A.
Yeah x has its own transaction but It is not rolled back because it is rolled back when it has a not handled error, and an error is not handled when you use Throws, but if there not catch block defined that indicates that the throws node it is not used, thus the error is saved and handle in the callee process whether it is handled by fault policy defined or by a default policy.
Answer is B
This is a fucked up page god damn
A