Runtime Fault Handling with the Fault Management Framework

0 0
Read Time:3 Minute, 10 Second

Fault handling allows a SOA suite component to handle error situations caused by outside web services.
The error situations can be both business (e.g. invalid data value) and runtime faults (service unavailable).
I’m aiming to handle business fault as much as possible in the composite (catch) while handle runtime faults outside the composite.

In the remaining of this blog I will describe an implementation of the Fault Management Framework to handle runtime faults.

I have implemented the following policy:
1) RemoteFault (invocation of a service fails)

  • Start a retry cycle
    standaard retryCount:                 5
    standaard retryInterval:              300 (seconden)
    standaard exponentialBackoff:   2
    Retry will take place after 5, 10, 20, 40 en 80 minutes.
  • If it still fails, start a human intervention

2) All other unhandled (runtime) faults

  • Start a human intervention

The specification of these fault policy is located in the Fault Policy Files.
The fault policy files are loaded at startup, so when any changes are made to them a server restart is required. The two fault policy files we’re  using are stored in the MDS. To use them a reference to them is required in the composite.xml file.  For this, add the following properties:


Policy Files

The content of the policy files is show below:

 

Fault-binding.xml

<?xml version="1.0" encoding="ISO-8859-1" ?>
<faultPolicyBindings version="1.0.0"
    xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
    xsi:schemaLocation=http://schemas.oracle.com/bpel/faultpolicy xsd/fault-bindings.xsd
    xmlns="http://schemas.oracle.com/bpel/faultpolicy">
    <composite faultPolicy="MOA-FaultPolicy"/>
</faultPolicyBindings>

 

Fault-policies.xml

<?xml version="1.0" encoding="ISO-8859-1" ?>
<faultPolicies
    xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
    xsi:schemaLocation=http://schemas.oracle.com/bpel/faultpolicy xsd/fault-policies.xsd
    xmlns="http://schemas.oracle.com/bpel/faultpolicy">

    <faultPolicy version="1.0.0" id="MOA-FaultPolicy"
                 xmlns:env=http://schemas.xmlsoap.org/soap/envelope/
                 xmlns:xs=http://www.w3.org/2001/XMLSchema
                 xmlns=http://schemas.oracle.com/bpel/faultpolicy
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

        <Conditions>
            <faultName xmlns:bpelx=http://schemas.oracle.com/bpel/extension
                       name="bpelx:remoteFault">
                <condition>
                    <action ref="ora-retry"/>
                </condition>
            </faultName>
            <faultName>
                <condition>
                    <action ref="ora-human-intervention"/>
                </condition>
            </faultName>
        </Conditions>

        <Actions>
            <Action id="ora-retry">
               <retry>
                  <retryCount>5</retryCount>
                  <retryInterval>300</retryInterval>
                  <exponentialBackoff>2</exponentialBackoff>
                  <retryFailureAction ref="ora-human-intervention"/>
               </retry>
            </Action>      
            <Action id="ora-human-intervention">
                <humanIntervention/>
            </Action>
        </Actions>

    </faultPolicy>
</faultPolicies>

Human Intervention with the Enterprise Manager

The following screenshot show a Medewerker (Employee) process instance that invokes the unavailable AccountService.

 

After three retries, the instance is waiting for a human intervention.
After the first Error Message at the top of the screen the recovery flag is set. Click on the message and then on the recover now button or immediately on the recovery flag.

 

After selecting the message, the following screen appears.

In this screen you have the possibility to select a Recovery action, change process variables, and invoke the recover operation.

In situation when services are down, after bringing it up again, a retry is quite common (without changing any content).

After recovery the process continues normally.

Also check Greg Mally’s blog post ‘Fault Management Framework by Example’ on Aug 22, 2011 to get a good impression of the functionality of the Framework (https://blogs.oracle.com/ateamsoab2b/entry/fault_management_framework_by_example).

 

About Post Author

Marcel van de Glind

As a SOA and BPM professional, Marcel is an experienced consultant in the field of process design and process modeling. Within this field system integration and IT-transcending business processes have Marcel's special interest.
Happy
Happy
0 %
Sad
Sad
0 %
Excited
Excited
0 %
Sleepy
Sleepy
0 %
Angry
Angry
0 %
Surprise
Surprise
0 %

Average Rating

5 Star
0%
4 Star
0%
3 Star
0%
2 Star
0%
1 Star
0%

4 thoughts on “Runtime Fault Handling with the Fault Management Framework

  1. I included your configuration files into my proyect and at least the automatic part worked excelent for me, thanks a lot!

  2. Hi Ahmed,

    I want to retry invoking BSSV in case of remote and binding fault and I am using same above fault policy file in my Synch Bpel process to achieve the same.

    I tried using “humanIntervention” instead of RetryAction and it worked
    but “RetryAction” dont work..

    Please suggest me what i can do.

    1. Hi Ahmed,

      Sorry for the late reaction.
      All the source code I have used is allready in the post. You do not need anything more.
      If you want ful running examples you probably best can get the source code from the post of Greg Mally’s I referenced to in the post.

Comments are closed.

Next Post

Generating a PDF-document with some plsql: as_pdf_mini => as_pdf3

It has been more than a year since I published my previous blog on generating PDF with pl/sql. In that time I’ve rewritten as_pdf two times, so now its time for as_pdf3 Related posts: Solving SOA Suite installation issues Session announcement: Oracle Service Bus (25 feb 2009) AYTS: summary of […]
%d bloggers like this: