* 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
4 Responses to Oracle BPEL Fault Policies