* See this post for SOA 11g fault policy framework.
Fault Policy Overview
* Since 10.1.3.3
* Catches all faults from an invoke activity (both run time and business faults)
* Important: overrides all catch activities in BPEL process.
* A fault policy defines conditions and their corresponding fault recovery actions.
* Fault policies are defined in multiple files under directory:
– bpel\domains\default\config\fault-policies
* XSD files are:
– bpel\system\xmllib\fault-policy.xsd
– bpel\system\xmllib\fault-policy-binding.xsd
* A fault policy can be associated at the following levels:
– Partner link
– Port type
– Process level via bpel.xml
– Domain level via fault-bindings.xml
* Fault policy binding order:
-> bpel.xml: partner link -> port type -> process
-> domain: partner link -> port type -> process
-> Catch blocks defined in bpel diagram.
SOA Fault Types
Business Faults
* Programmer defined.
* Defined in WSDL.
Runtime Faults
* Predefined, e.g.
– remoteFault
– bindingFault
* Infrastructure faults, e.g.
– Service down
– Network outage
* Data format errors
Design a Fault Policy
Create a Fault Policy File
* Create policy file (e.g. my-policies.xml) in bpel\domains\domain_name\config\fault-policies directory
Define conditions
* Conditions are based on faultName. e.g.
<faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension" name="bpelx:remoteFault">
* Multiple conditions are allowed for a single faultName
– if so, conditions are evaluated sequentially
<condition> <test>$fault.code/code="WSDLReadingError"</test> <action ref="ora-terminate"/> </condition> <condition> <action ref="ora-java"/> </condition>
* Each condition has
– one test section which is an XPath expression against fault variable
<test>$fault.code/code="WSDLReadingError"</test>
– one action section which references to the action defined in the same file
<action ref="ora-terminate"/>
– No test condition catches all
<condition> <action ref="ora-rethrow"/> </condition>
– No faultName catches all faults
<faultName > . . . </faultName>
Define actions
* See examples below.
Fault Policy Examples
* Conditions
<Conditions> <!-- when bpelx:remoteFault, retry --> <faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension" name="bpelx:remoteFault"> <condition> <action ref="ora-retry"/> </condition> </faultName> <!-- when bpelx:bindingFault, rethrow fault --> <faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension" name="bpelx:bindingFault"> <condition> <action ref="ora-rethrow-fault"/> </condition> </faultName> </Conditions>
* Actions
<!-- retry Action --> <Action id="ora-retry"> <retry> <retryCount>8</retryCount> <retryInterval>2</retryInterval> <retryFailureAction ref="ora-terminate"/> <exponentialBackoff/> </retry> </Action> <!-- replayScope Action --> <Action id="ora-replay-scope"> <replayScope/> </Action> <!-- rethrowFault Action --> <Action id="ora-rethrow-fault"> <rethrowFault/> </Action> <!-- humanIntervention Action --> <Action id="ora-human-intervention"> <humanIntervention/> </Action> <!-- abort Action --> <Action id="ora-terminate"> <abort/> </Action> <!-- Custom Java Action --> <Action id="ora-java"> <javaAction className="mypackage.myClass" defaultAction="ora-terminate" propertySet="propSet1"> <returnValue value="R_TRM" ref="ora-terminate"/> <returnValue value="R_THRW" ref="ora-rethrow-fault"/> </javaAction> </Action>
– Java class must implement IFaultRecoveryJavaClass interface
public interface IFaultRecoveryJavaClass { public void handleRetrySuccess(IFaultRecoveryContext ctx ); public String handleBPELFault(IFaultRecoveryContext ctx ); }
Associate a Fault Policy
* Process level
– Configured in bpel.xml file.
– Only one fault policy can be bound to a process, port type, or partner link.
– Multiple port types or partner links can be bound to a single fault policy.
<faultPolicyBindings> <!-- Fault on any plink/port type not specified --> <!-- below uses policy BillingFaults --> <process faultPolicy="BillingFaults"/> <partnerLink xmlns:credit="http://services.otn.com" faultPolicy="CRM_ ServiceFaults"> <!-- Fault on these 2 plink will use policy CRM_ServiceFaults --> <name>UnitedLoanService</name> <name>StarLoanService</name> <!----Fault on these 2 port types uses policy CRM_ServiceFaults --> <portType>credit:CreditRatingService</portType> <portType xmlns:united="http://services.uninted.com/loan"> united:UnitedLoanService</portType> </partnerLink> <partnerLink faultPolicy="myOtherFaults"> <!-- Fault on this plink uses policy myOtherFaults --> <name>AnotherPartnerLink</name> </partnerLink> </faultPolicyBindings>
* Domain level
– Configured in OracleAS_2\bpel\domains\default\config\fault-bindings.xml file.
<!-- all processes in this domain use DefaultPolicy --> <process faultPolicy="DefaultPolicy"/>
<partnerLink faultPolicy="DefaultPolicy"> <!-- all invoke faults at partner link creditRatingService use DefaultPolicy --> <name>creditRatingService</name> </partnerLink>
<partnerLink faultPolicy="DefaultPolicy"> <!-- all invoke faults at specific port type use DefaultPolicy --> <portType xmlns:db="http://xmlns.oracle.com/pcbpel/adapter/db/insert/">db:insert_plt</portType> </partnerLink>
Human Intervention in Oracle BPEL Control
* Login BPEL console
* Click Activities tab
* Seach activities based on states
– All States: Displays all activities, regardless of their state.
– Open: Displays only open activities.
– Completed: Displays only completed activities.
– Cancelled: Displays only cancelled activities.
– Stale: Displays only stale activities.
– Pending: Displays only pending activities.
* Click the faulted activity
* Optionally change the variable values
* Select action to take
– Retry: Retries the activity with an option to provide a retry success action.
– Abort: Terminates the process instance of the faulted activity.
– Rethrow: Rethrows the exception and allows the BPEL fault handlers (catch branches) to handle the fault.
– Replay: Replays the scope in which the fault occurred.
– Continue: Skips the activity. The framework assumes the activity completed with no fault.
* Click the Recover button.
References
* Fault Management Framework
* http://www.oracle.com/technology/tech/soa/cab/OracleSOACabWebinar03-25-08SOAExceptions.pdf
* Oracle BPEL 10.1.3.3 Fault Policy Management
This is very interesting, You are an overly professional blogger.
I have joined your feed and look forward to looking for extra of your wonderful post.
Also, I have shared your site in my social networks
Thanks a bunch for sharing this with all folks you actually know what you are speaking approximately!
Bookmarked. Please also talk over with my web site =).
We may have a hyperlink change agreement among us
Feel free to visit my web-site personal loan
I like the valuable information you provide in your articles.
I’ll bookmark your weblog and check again here regularly.
I’m quite sure I’ll learn many new stuff right here! Best of luck for the next!
Has anyone experienced that after enabling the fault policy and retry logic work, the very first retry takes 40 + seconds to happen? Even do the policy is specified as
3
2