Oracle Fault Management Framework - how to intercept first invocation

I know the Oracle Fault Management Framework is only activated on faults that occur on invokes.
Which is fine for all internal calls.
However, is there any way to get the framework to be activated on the very first invoke?
I want to be able to get the framework to log all fault details and then rethrow. I'ms using Oracle version 10.1.3.4.
However, if an external third party calls my process (say Process A) and an error occurs in process A that is NOT from an invoke, eg xpath error.
The framework does NOT get activated.
Any ideas how to get around this other than going into every BPEL and adding in a catchAll , log, throw fault?
Thanks.

There should be no difference between managing internal and external calls using the fault handler.
If we can just talk about process A as a BPEL process which utilizes the fault management.
It should not matter where the services process A calls reside. The fault management system will only get calls as part of an error occurring on an invoke.
I don't agree with your comment that the framework will get called if a fault occurs any where within the domain. e.g. If process A has an assign activity and fails because it can't convert a string into date. The fault management system will not be called. Therefore it is independent if the services process A calls are internal or external.
What is your reasoning behind having a process that continues in the event of a fault when the first fault could cause subsequent faults.
If no fault is manged either by the framework or a catch then the raw error will be returned back to the consumer. So you will be able to debug that initial fault. Does this not fulfill your uses case?
cheers
James

Similar Messages

  • Fault Management Framework - How to use test conditions

    I am building a fault policy file based on an external service that generates custom SOAP faults. I want to query a value in these faults but I don't know how to construct the test condition.
    I can find plenty of documented examples e.g.
    <Conditions>
    <faultName
    xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
    name="bpelx:remoteFault”>
    <condition>
    *<test>$fault.code="3220"</test>*
    <action ref="ora-retry"/>
    </condition>
    </faultName>
    But where can I find the $fault object to know how to create the xpath expression?
    This is my business fault logged in Enterprise Manager -
         <bpelFault>
         <faultType>1</faultType>
         <FaultManagementFrameworkService xmlns="http://yorkshirewater.com/faultmanagementframeworkservice/">
         <part name="fault">
              <ns0:FaultManagementFrameworkServiceFault xmlns:ns0="http://yorkshirewater.com/faultmanagementframeworkservice/">
              *<FaultCode>001</FaultCode>*
              <FaultCategory>ConnectionException</FaultCategory>
              <FaultDescription>Not Found</FaultDescription>
              <ServiceName>FaultManagementFrameworkService</ServiceName>
              <Operation>CreateConnectionError</Operation>
              <User>&lt;anonymous></User>
              </ns0:FaultManagementFrameworkServiceFault>
         </part>
         </FaultManagementFrameworkService>
         </bpelFault>
    I want to access the FaultCode value but can only currently capture all errors e.g.
    <Conditions>
    <faultName xmlns:osb="http://yorkshirewater.com/faultmanagementframeworkservice/" name="osb:FaultManagementFrameworkService">
    <condition>
    <action ref="ora-human-intervention"/>
    </condition>
    </faultName>

    The code 3220 is just a copy from some Oracle documentation of an example test case.
    What I really want to do is get a value from my own business error e.g.
    <bpelFault>
    <faultType>1</faultType>
    <FaultManagementFrameworkService xmlns="http://yorkshirewater.com/faultmanagementframeworkservice/">
    <part name="fault">
    <ns0:FaultManagementFrameworkServiceFault xmlns:ns0="http://yorkshirewater.com/faultmanagementframeworkservice/">
    <FaultCode>001</FaultCode>
    <FaultCategory>ConnectionException</FaultCategory>
    <FaultDescription>Not Found</FaultDescription>
    <ServiceName>FaultManagementFrameworkService</ServiceName>
    <Operation>CreateConnectionError</Operation>
    <User><anonymous></User>
    </ns0:FaultManagementFrameworkServiceFault>
    </part>
    </FaultManagementFrameworkService>
    </bpelFault>
    If I use the following in my fault policy it will pick up all errors on the service (using Oracle Service Bus and a service call) -
    <Conditions>
    <faultName xmlns:osb="http://yorkshirewater.com/faultmanagementframeworkservice/" name="osb:FaultManagementFrameworkService">
    <condition>
    <action ref="ora-human-intervention"/>
    </condition>
    </faultName>
    But I would actually like to drill down further and query the FaultCode value (001 in the above example) -
    <Conditions>
    <faultName xmlns:osb="http://yorkshirewater.com/faultmanagementframeworkservice/" name="osb:FaultManagementFrameworkService">
    <condition>
    <test>$fault.fault/osb:FaultManagementFrameworkServiceFault/osb:FaultCode="001"</test>
    <action ref="ora-human-intervention"/>
    </condition>
    </faultName>
    Am I trying to do something that's not possible? If so how do you apply test conditions for business errors?

  • How does BPEL Fault Management Framework gel with ESB Error Handling ?

    I see that BPEL 10.1.3.3 has pretty neat Fault Management Framework (although I have to admit it is not very well advertised).
    The next logical question is: what about ESB ? Would that help in ESB error handling ? I understand that ESB has its own Error Hospital etc.; however, we have to constantly grapple with two distinct paths for any piece of integration functionality (1. ESB 2. BPEL). I guess, all of this will be moot in the 11g timeframe. Still wondering if anyone out there has somehow unified error handling for these two distinct offerings ?

    It's not available in ESB, you have to implement/extend that by your self. Off course in the next release everthing will be better :-)
    But, if you are able to use Oracle AIA (http://edelivery.oracle.com) You could use Oracle AIA Foundation, that has a fault 'hospital' implemented both for BPEL and ESB.
    Marc
    http://orasoa.blogspot.com

  • 10.1.3.3 fault management framework and catchall problem

    Hi all,
    I have a BPEL process with a catchall exception block for the entire process (in the .bpel file). The errorhandling determines if action needs to be taken on a given exception and notify's tech support with an e-mail if action needs to be taken. This works fine.
    However, it would be nice if you could retry faulted instances if for instance a web service was temporarily down. Here the fault management framework comes to the rescue. I have created default policy and fault-binding files. I have set it up so that any error goes to human interaction. Apparently this worked. An instance pending manual recovery was created, and it could be retry'ed from the BPEL console.
    So here is my problem: The fault management framework apparently overwrites the catchall exception in the BPEL process, so that while a task for human interaction is created the error block is not excuted first - meaning that no e-mail notification is sent and no differentiating between exception occurs.
    If I remove the default policy and fault-binding files then the catchall is used again.
    This may be expected behaviour, but I assume that it is possible to use both a catch all block in the bpel code AND the generic fault management framework.
    Does anybody have any ideas?
    Your assistance will be much appreciated.
    Regards,
    Aagaard

    Hi Aagaard,
    The BPEL Error Hospital that Oracle introduced with SOA Suite 10.1.3.3 will prevent you from having to model the handling of Binding Faults or Runtime Faults in BPEL processes.
    Hope in the future we will also be able to specify policies for handling custom faults that may occur anywhere in the BPEL process, i.e. not only on invoke activities.
    This framework will gives us the opportunity to handle all the business and runtime faults for an “invoke” activity. With the framework we can define one policy for every bpel domain.
    In the bpel/domains/default/config/fault-policy-binding.xml , we can setup the policies we would use and which processes,partnerlinks,port types will be part of it.
    If there is already some fault-handling (catch) defined in the the bpel process, the framework will overrule this, and use a policy if possible.
    Hope that answers your question!
    Cheers
    Anirudh Pucha

  • SOA 11g Fault Management Framework Issue

    Hi,
    I am using soa 11.1.1.3.
    I have a composite with bpel process. Bpel process invokes a external web service.
    I add fault-bindings.xml and fault policy to catch remote fault.
    When I turn off web service, bpel process has the remote fault but the fault didn't be caught by fault management framework.
    Here is my fault-policies.xml and fault-ibindings.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <faultPolicyBindings version="0.0.1"
    xmlns="http://schemas.oracle.com/bpel/faultpolicy"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <!-- only applies for the bpel process -->
         <component faultPolicy="FusionMidFaults" >
    </component>
    </faultPolicyBindings>
    <?xml version="1.0" encoding="UTF-8"?>
    <faultPolicies xmlns="http://schemas.oracle.com/bpel/faultpolicy"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <faultPolicy version="0.0.1" id="FusionMidFaults"
    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:medns="http://schemas.oracle.com/mediator/faults"
    name="medns:mediatorFault">
    <condition>
    <action ref="MediatorJavaAction"/>
    </condition>
    </faultName>
    -->
    <faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
    name="bpelx:remoteFault">
    <condition>
    <action ref="BPELJavaAction"/>
    </condition>
    </faultName>
    <faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
    name="bpelx:bindingFault">
    <condition>
    <action ref="BPELJavaAction"/>
    </condition>
    </faultName>
    <faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
    name="bpelx:runtimeFault">
    <condition>
    <action ref="BPELJavaAction"/>
    </condition>
    </faultName>
    </Conditions>
    <Actions>
    <!-- Generics -->
    <Action id="default-terminate">
    <abort/>
    </Action>
    <Action id="default-replay-scope">
    <replayScope/>
    </Action>
    <Action id="default-rethrow-fault">
    <rethrowFault/>
    </Action>
    <Action id="default-human-intervention">
    <humanIntervention/>
    </Action>
    <!--
    <Action id="MediatorJavaAction">
    <javaAction className="MediatorJavaAction.myClass"
    defaultAction="default-terminate">
    <returnValue value="MANUAL" ref="default-human-intervention"/>
    </javaAction>
    </Action>
    -->
    <Action id="BPELJavaAction">
    <!-- this is user provided class-->
    <javaAction className="com.rubiconred.faultManagement.MyFaultPolicyJavaAction"
    defaultAction="default-terminate">
    <returnValue value="MANUAL" ref="default-human-intervention"/>
    </javaAction>
    </Action>
    </Actions>
    </faultPolicy>
    </faultPolicies>

    Hi, I've the same issue. I created the fault-bindings.xml and fault-policies.xml in the same directory as composite.xml. I throw a fault in the BPEL process, but it does not get caught by the fault policy mechanism.
    fault-bindings.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <faultPolicyBindings version="2.0.1"
    xmlns="http://schemas.oracle.com/bpel/faultpolicy">
    <composite faultPolicy="MyCompositeFaultPolicy"/>
    </faultPolicyBindings>
    fault-policies.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <faultPolicies xmlns="http://schemas.oracle.com/bpel/faultpolicy"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <faultPolicy version="2.0.1" id="MyCompositeFaultPolicy"
    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">
    <!-- This section describes fault conditions. Build more conditions with faultName, test and action -->
    <Conditions>
    <faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
    name="bpelx:assertFailure">
    <condition>
    <action ref="ora-terminate"/>
    </condition>
    </faultName>
    <faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
    name="bpelx:runtimeFault">
    <condition>
    <action ref="ora-terminate"/>
    </condition>
    </faultName>
    <faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
    name="bpelx:remoteFault">
    <condition>
    <action ref="ora-terminate"/>
    </condition>
    </faultName>
    <faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
    name="bpelx:bindingFault">
    <condition>
    <action ref="ora-terminate"/>
    </condition>
    </faultName>
    </Conditions>
    <Actions>
    <Action id="ora-retry">
    <retry>
    <retryCount>3</retryCount>
    <retryInterval>10800</retryInterval>
    <retryFailureAction ref="ora-human-intervention"/>
    <!--<exponentialBackoff/>-->
    </retry>
    </Action>
    <!-- This is an action will bubble up the fault-->
    <Action id="ora-rethrow-fault">
    <rethrowFault/>
    </Action>
    <Action id="ora-human-intervention">
    <humanIntervention/>
    </Action>
    <!-- This action will cause the instance to terminate-->
    <Action id="ora-terminate">
    <abort/>
    </Action>
    </Actions>
    </faultPolicy>
    </faultPolicies>
    I tried restarting the managed server, but it did not help. If you have any suggestions, please supply them.

  • Where do I fit iSqlplus and DBCA in Oracle Enterprise Management Framework

    The Oracle Enterprise Management Framework is divided into these functional areas:
    * Managed targets
    * Management Services
    * Oracle Management Repository
    * Oracle Enterprise Manager 10g Grid Control
    * Oracle Enterprise Manager 10g Database Control
    * Application Server Control
    Where do I fit iSqlplus and DBCA in this above category ?

    The Oracle Enterprise Management Framework is divided into these functional areas:
    * Managed targets
    * Management Services
    * Oracle Management Repository
    * Oracle Enterprise Manager 10g Grid Control
    * Oracle Enterprise Manager 10g Database Control
    * Application Server Control
    Where do I fit iSqlplus and DBCA in this above category ?

  • Fault Management Framework

    Hi folks,
    I am studying the Fault Management Framework that comes with BPEL.
    It is a really nice feature: in a single place I can define a strategy for handling errors that occurs in the invoke activity of any BPEL process.
    I have a question about this: is there a similar tool or framework to handle in a single place errors that can occur in ANY activity of the BPEL process not only in the invoke activity.
    In other words, instead of using catchall in all of BPEL processes (and writing the same code in all BPEL processes) can I use the Fault Management Framework (or write some BPEL code) to catch errors like : selectionFailure, joinFailure or others and associate specific action with them?
    If anybody has an idea feels free to explain it!

    No.
    Marc
    http://orasoa.blogspot.com

  • Oracle wallet manager and how can I import a .cer f

    Hi where can I download oracle wallet manager and how can I import a .cer file to a wallet file .p12 that OAS uses in Apache configuration.

    Hi where can I download oracle wallet manager and how can I import a .cer file to a wallet file .p12 that OAS uses in Apache configuration.

  • SOA fault management framework doesn't work

    The following is my fault-policies.xml and fault-binding.xml. Both are located in the same folder as the composite.xml. I simulated a remote fault. The fault was not caught by the framework.
    I even re-started both admin server and soa managed server.
    I am using SOA 11.1.1.5
    1. fault-binding.xml:
    <?xml version="1.0" encoding="UTF-8" ?>
    <faultPolicyBindings version="2.0.1"
    xmlns="http://schemas.oracle.com/bpel/faultpolicy"
    xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance">
    <composite faultPolicy="POProcessingFaults"/>
    </faultPolicyBindings>
    2. fault-policies.xml
    <?xml version="1.0" encoding="UTF-8" ?>
    <faultPolicies xmlns="http://schemas.oracle.com/bpel/faultpolicy">
    <faultPolicy version="2.0.1"
    id="POProcessingFaults"
    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>
    <!-- Step #1: Add your fault handler for remote fault here: -->
    <faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension" name="bpelx:remoteFault">
    <condition>
    <action ref="ora-human-intervention"/>
    </condition>
    </faultName>
    <!-- Step #2: Add your fault handler for binding fault here: -->
    <!-- Step #3: Add your fault handler for mediator faults here: -->
    </Conditions>
    <Actions>
    <!-- Step #4: Add the Action definition for handling mediator faults using custom java here:-->
    <!-- Custom Java Handler: Logs the fault details to a log file -->
    <Action id="my-java-handler">
    <javaAction className="soatraining.faulthandling.MyFaultHandler"
    defaultAction="ora-terminate" propertySet="myProps">
    <returnValue value="OK" ref="ora-rethrow-fault"/>
    </javaAction>
    </Action>
    <!-- Retry -->
    <Action id="ora-retry">
    <retry>
    <retryCount>4</retryCount>
    <retryInterval>2</retryInterval>
    <exponentialBackoff/>
    </retry>
    </Action>
    <!-- Rethrow action -->
    <Action id="ora-rethrow-fault">
    <rethrowFault/>
    </Action>
    <!-- Human Intervention -->
    <Action id="ora-human-intervention">
    <humanIntervention/>
    </Action>
    <!-- Terminate -->
    <Action id="ora-terminate">
    <abort/>
    </Action>
    </Actions>
    <!-- Property sets used by custom Java actions -->
    <Properties>
    <!-- Property set for MyFaultHandler customer java action -->
    <propertySet name="myProps">
    <property name="logFileName">myfaulthandler.log</property>
    <property name="logFileDir">c:\temp</property>
    </propertySet>
    <!-- Step #5: Add new property set for MyFaultHandler for logging Mediator faults here:-->
    </Properties>
    </faultPolicy>
    </faultPolicies>

    Please use the below files and let me know...
    fault-policies.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <faultPolicies xmlns="http://schemas.oracle.com/bpel/faultpolicy">
    <faultPolicy version="2.0.1" id="bpelFaultHandling"
    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:bindingFault">
    <condition>
    <action ref="ora-retry"/>
    </condition>
    </faultName>
    <faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
    name="bpelx:remoteFault">
    <condition>
    <action ref="ora-retry"/>
    </condition>
    </faultName>
    </Conditions>
    <Actions>
    <Action id = "ora-rethrow-fault">
    <rethrowFault/>
    </Action>
    <Action id = "ora-retry">
    <retry>
    <retryCount>5</retryCount>
    <retryInterval>1</retryInterval>
    <exponentialBackoff/>
    <retryFailureAction ref = "ora-rethrow-fault"/>
    </retry>
    </Action>
    </Actions>
    </faultPolicy>
    </faultPolicies>
    fault-bindings.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <faultPolicyBindings version="2.0.1"
    xmlns="http://schemas.oracle.com/bpel/faultpolicy"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <composite faultPolicy="bpelFaultHandling"/>
    </faultPolicyBindings>
    Write two composites A and B . A is Asynchronous and B is Synchronous. Call B from A, just throw a remotefault from B; put the above two files in composite A in the folder where the composite.xml file resides.And also keep a catchALL block at the BPEL process level for the composite A. So when you execute A, The fault policies will come into play, try the same invoke for five times and rethrow the fault which will be caught by catchALL block in composite A and do something from A, either invoke back the caller or write some error message to the file or email or something else.
    Hope this helps...
    Thanks,
    N

  • Fault Management Framework is not working....

    Hi all,
    i have installed soa 10.1.3.3.0, and i am done with post installations stpes too.
    i have created a simple bple, which invokes a PL(java webservice). i stopped the webservice and intiated the bpel process so that it shud get the remoteFault.
    i am binding the defaultpolicy (given by orcle) in bple.xml . But it is not working.
    still catch block is firing. invoke is showing in red color only. which means , obusly policy file is not registered. is it? so, how can i know wheter policy file is registered or not? how to make use of plicy file? am i missing any steps???
    can anyone please help me out......
    thans in advance

    hi this my fault-binding.xml file <?xml version="1.0" encoding="UTF-8"?>
    <faultPolicyBindings version="2.0.1"
    xmlns="http://schemas.oracle.com/bpel/faultpolicy"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <!-- Enabling this will cause all processes in this domain to use this
    fault policy
         <process faultPolicy="DefaultPolicy"/>
         -->
    <!-- DefaultPolicy is defined in ./fault-policies/DefaultPolicy.xml -->
         <partnerLink faultPolicy="DefaultPolicy">
         <!-- Enabling this will cause all invoke faults at partner link
         name of "creditRatingService" to use fault policy with
         id id = DefaultPolicy
         <name>creditRatingService</name>
         <name>SampleService</name>     
         -->
    <!-- all invoke faults at partner link below port type use fault policy
    with id = DefaultPolicy
    The following entry covers the samples/tutorials/122.DBAdapter/InsertWithCatch sample. -->
         <portType xmlns:db="http://xmlns.oracle.com/pcbpel/adapter/db/insert/">db:insert_plt</portType>
         </partnerLink>
    </faultPolicyBindings>
    i have added the one more <name> branch for <patnerlink>
    <name>SamleService</name>
    even i bind the policy file in my bple.xml also,
    this is my bpel.xml flie
    <?xml version = '1.0' encoding = 'UTF-8'?>
    <BPELSuitcase>
    <BPELProcess id="Fault_DEMO" src="Fault_DEMO.bpel">
    <partnerLinkBindings>
    <partnerLinkBinding name="client">
    <property name="wsdlLocation">Fault_DEMO.wsdl</property>
    </partnerLinkBinding>
    <partnerLinkBinding name="SampleService">
    <property name="wsdlLocation">SampleService2.wsdl</property>
    </partnerLinkBinding>
    </partnerLinkBindings>
    </BPELProcess>
    <faultPolicyBindings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://schemas.oracle.com/bpel/faultpolicy ../../../../../../../../fault-policy-binding.xsd"
    xmlns="http://schemas.oracle.com/bpel/faultpolicy">
    <process faultPolicy="SamplePolicy"/>
    <partnerLink faultPolicy="SamplePolicy">
    <name>SampleService</name>
    </partnerLink>
    </faultPolicyBindings>
    </BPELSuitcase>
    is there any problem in these files?
    can anyone please help me?
    thanks in advance

  • Fault Policy Management Framework in 10.1.3.3

    Hi,
    According to the Oracle Documentation, 10133technote. It says
    1) "A fault policy can be associated at the following levels:
    Partner link,Port type, Process & Domain."
    - Here can you through a light on "Process" n what "Process" means
    - Is it Refering to a BPEL Process or a "Process" in <faultPolicyBindings>
    - Can we have multiple "Process" for a <faultPolicyBindings>
    2) "The framework looks for fault policy bindings in the following files (in order of priority):
    - In the bpel.xml file at the process level
    - In the domain level file "
    - what entry should go in bpel.xml (are we really have to edit bpel.xml, created by JDEV)
    - what does it mean Process Level & Domain Level
    - where we can have a thin line between "Process Level" & "Domain Level"
    and How they differ-in while at Implemenation level
    Lastly what are the files that we need to modify/edit to make faultPolicy work.
    Thanx in adv

    Hello,
    See comments below:
    Hi user568921,
    Thanx for an immediate reply.
    Apologize for the long list of questions.
    1) Already we can have expentional Handling in BPEL,
    then why this
    Fault Management Framework be used on top of this
    [ irrespective of your BPEL Process has Expectional
    Handling or not (pl. correct me if im wrong)]
    more over i have to restart the server for each
    modification,
    this is not that recommended when it goes to
    Production.
    1a) if i have both BPEL Expectional Handling and
    Fault Management Framework applied to my Process
    which one preceedes.
    Fault Management Framework is used for generic fault
    handling on a deployed server.
    Since the change affects all deployed processes, we do
    not recommend changing policy or bindings in production.
    We are providing a client api in 10.1.3.4.0 to reload fault
    policy and binding files.
    Fault Management Framework precedes BPEL "catch". You can
    attempt retry actions, if this fails, invoke java code to
    email an administrator and mark the activity for human
    recovery or do a rethrowFault to pass to BPEL exception
    handling.
    2) This is what my bpel.xml files contains
    <?xml version = '1.0' encoding = 'UTF-8'?>
    <BPELSuitcase>
    <BPELProcess id="FaultPolicyManagement"
    src="FaultPolicyManagement.bpel">
    <partnerLinkBindings>
    <partnerLinkBinding name="client">
    <property
    name="wsdlLocation">FaultPolicyManagement.wsdl</prope
    ty>
    </partnerLinkBinding>
    <partnerLinkBinding name="sayHelloService">
    <property
    name="wsdlLocation">sayHelloService3.wsdl</property>
    </partnerLinkBinding>
    <partnerLinkBinding
    name="FaultPolicyManagementSync">
    <property
    name="wsdlLocation">url?wsdl</property>
    </partnerLinkBinding>
    artnerLinkBindings>
    </BPELProcess>
    <faultPolicyBindings>
    process faultPolicy="defaultPolicy"/>
         <process faultPolicy="anvvPolicy"/>
    <partnerLink
    k faultPolicy="DefaultPolicy"></partnerLink>
         <partnerLink faultPolicy="anvvPolicy">
         <name>FaultPolicyManagementSync</name>
    <portType
    tType
    xmlns:db="http://FaultPolicyManagementSync">db:FaultPo
    licyManagementSync_plt</portType>
         </partnerLink>
    </faultPolicyBindings>
    /BPELSuitcase>
    when i edit the bpel.xml with
    <faultPolicyBindings></faultPolicyBindings> and
    deploy it
    all the <faultPolicyBindings></faultPolicyBindings>
    is resetting back to original bpel.xml
    ( The Content between
    <faultPolicyBindings></faultPolicyBindings> is taken
    from fault-bindings.xml file )
    why it is so ?
    and my fault-bindings.xml is
    <?xml version="1.0" encoding="UTF-8"?>
    <faultPolicyBindings version="2.0.1"
    xmlns="http://schemas.oracle.com/bpel/faultpolicy"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    <process faultPolicy="DefaultPolicy"/>
    <process faultPolicy="anvvPolicy"/>
    <partnerLink
    k faultPolicy="DefaultPolicy"></partnerLink>
         <partnerLink faultPolicy="DefaultPolicy2">
         <name>FaultPolicyManagementSync</name>
    <portType
    tType
    xmlns:db="http://FaultPolicyManagementSync">db:FaultPo
    licyManagementSync_plt</portType>
         </partnerLink>
    </faultPolicyBindings>
    and DefaultPolicy.xml & DefaultPolicy2.xml is same as
    what is there in the server.
    Is the file contents correct in Implementation.
    Only one process tag is allowed.
    2a) if Fault Management Framework applied and NO
    <faultPolicyBindings></faultPolicyBindings> is added
    to bpel.xml
    and if it is left as it is (i.e., default bpel.xml
    generated by JDEV) then what is the policy it is
    applied.
    Once the system detects an invoke has faulted, it tries
    to check if there is a fault policy attached to this faulted
    partner link (or port type, or the process), if no policy
    binding is detected, it will flow bubble up the fault. By
    default there is no policy applied.
    3) Can you please let me know
    - how many ( fault-binding.xml &) fault-policy's can
    n i have per domain.
    - how many ( fault-binding.xml &) fault-policy's can
    n i have per process.
         many to one or many to many relationship.
    We can have only one policy
    [config/DefaultPolicy.xml] at a Domain Level
    To create a Fault Policy File for Automated Fault Recovery
    Create directories named fault-policies under the config directory for
    every domain in which you want to use the fault management framework.
    SOA_ORACLE_HOME\bpel\domains\domain_name\config\fault-policies
    You can have n fault policies per domain.
    To provide a fault policy applicable to an entire domain in the
    fault-bindings.xml file in the SOA_ORACLE_
    HOME\bpel\domains\domain_name\config directory.
    You can have 1 fault-bindings.xml per domain.
    3a) how can i make sure/ensure that Fault Management
    Framework is applied at each process level and/or at
    Domain level.Provide a fault-binding: with
    <process faultPolicy="YourPolicy"/>
    >
    4) Is there any Advantages, limitations / contrains
    that we have if we are opting Fault Management
    Framework (have to consider, before going to
    production).
    The framework is applicable for faults in "invoke" activity
    only.
    5) can i have any samples / URL for samples for Fault
    Management Framework in OTN or else where.
         so that i can work around.
    >
    >
    Other than 10133technotes.pdf do you have any other
    documentation which has an eloberative description
    about
    Fault Management Framework and its samples
    please guide me accordingly.Let me know if you need more information.

  • BPEL 10.1.3.5 Fault Management - Using Xpath in Fault Policy conditions

    Hi all.
    I have a requirement to use the xpath functions "contais" and "upper-case" inside a condition in a fault policy file. I've done some tests and didn't get successful results so far.
    My first test using the policy file was the following:
    <faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
              xmlns:ebsv1="http://www.claro.com.br/EBS/Claro/v1"
              xmlns:ebov1="http://www.claro.com.br/EBO/Claro/v1"
              name="ebsv1:TechnicalFault">
         <condition>
         *<test>$fault.TechnicalFault/ebsv1:TechnicalFault/ebov1:message = 'TE-0001'</test>*
         <action ref="ora-human-intervention" />
         </condition>
    In this first test I used a simple expression just to test the overall namespace declarations and xpath navigation. It worked as expected.
    Second, I modified the test to use the "contais" function. I need to use this function because my message will eventually contain the value 'TE-0001' mixed with other string:
    <faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
              xmlns:ebsv1="http://www.claro.com.br/EBS/Claro/v1"
              xmlns:ebov1="http://www.claro.com.br/EBO/Claro/v1"
              name="ebsv1:TechnicalFault">
         <condition>
         *<test>contains($fault.TechnicalFault/ebsv1:TechnicalFault/ebov1:message, 'TE-0001')</test>*
         <action ref="ora-human-intervention" />
         </condition>
    In this second test I allways get FALSE results, meaning that this expression may not be correct. I'm certain that this should be evaluated to TRUE as the test scenario is the same as the first test. Is there something missing?? I turned on debug level log in the domain but didn't find any hint about the fault management processing.
    Besides the use of the contains function, it would be nice if I'm able use the function upper-case. Something like this:
    <faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
              xmlns:ebsv1="http://www.claro.com.br/EBS/Claro/v1"
              xmlns:ebov1="http://www.claro.com.br/EBO/Claro/v1"
              xmlns:xp20="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20"
              name="ebsv1:TechnicalFault">
         <condition>
         *<test>contains(xp20:upper-case($fault.TechnicalFault/ebsv1:TechnicalFault/ebov1:message), 'TE-0001')</test>*
         <action ref="ora-human-intervention" />
         </condition>
    Any ideas???
    Thanks
    Denis

    Hi again.
    Has anyone been able to use any kind of Xpath function inside a policy file? If so, could you please share the code fragment including the namespace declarations and the conditions?
    Does anyone know if Fault Management Framework at least support the use of Xpath functions?
    Thanks.
    Denis

  • EDN not available throws runtimeFault - Fault Policy Framework unable to catch it

    Hi Team,
    I have been working on some error handling scenarios for EDN .
    From my observation if BPEL is used to publish the event, BPEL Fault policy cannot catch EDN errors (e.g., EDN unavailable) but BPEL catch activity can catch it.
    Steps performed :
    1. Create a BPEL to publish the event to EDN.
    2.Create fault policy to catch  BPEL runtime fault .
    3.Go to weblogic console to change EDNdatasource target to get "EDN datasource not available error".
    4.Test your BPEL.
    My requirement is to retry such faults and invoke human intervention after retry failure using BPEL.
    Please let me know how to achieve this

    Follow the oracle documentation
    - http://docs.oracle.com/cd/E28271_01/dev.1111/e10224/bp_faults.htm#BABIGGIB
    *The fault management framework catches all faults (business and runtime) for an invoke activity.*
    Hope that helps.
    P.S. The fault management framework main purpose is to define a enterprise wide standard policies to handle the faults that will be applied to various/all composite. Hence your specific fault that is specific to a composite should not creep into to fault management framework as this is not the enterprise standard i.e., every composite may have to handle the invalid variable, based on where it occurred and for what variable it occurred.

  • 10.1.3.3 fault management to simplify our complex error hospital pattern

    We have designed an error hospital pattern on 10.1.3.1, this consists of :
    1. A loop around key components of each process which may fail and need retry (e.g. invokes, database operations)
    2. Within each error loop a fault handler, this catches faults as they are thrown and passes them onto another BPEL error handling process (with a nested fault handler in case this invoke fails which spits error out to a file), the error handler can reply with retry (loop around again) or cancel (exit loop), if no response is received an automated retry occurs
    3. An error service process which creates a human task for an error to be dealt with
    4. A web app which allows users to process the tasks created by the error service, user can inspect data, see fault detail and mainly just select to cancel or retry the failed operation (including multi select if for example hundreds of processes had hit the same error)
    This has been refined and is now operating nicely in production, but the development (items 1 and 2 above) and testing effort involved is high - frequently more than the actual business logic. In a 3GL this error handling would be simplified by having a nice reusable piece of code (proceudre or method call) that could go in the error handling loop, rather than putting a whole set of logic (invoke, pick, handling of faults in the error handling code, etc).
    I'm aware of the fault management framework in 10.1.3.3 which does a subset of our functionality, we are now looking back at the error hospital we have created and wondering if we could simplify. The main stumbing block I see with the fault management framework is that we need to decide whether to do an automated retry after some interval or whether to await human action, we want to do both, await human activity but if they don't action it retry the operation. I'm thinking that we could achieve everything that we have got by a slight manipulation of the error management framework, as follows :
    A. Define faults such that all faults cause human intervention.
    B. Create a daemon process which scans for activities requiring human intervention and automatrically triggers a rety after a configurable period (so that things like database errors will get auto retried)
    C. Adapt our web app to look for and operate on activities outstanding rather than workflow tasks.
    Questions:
    i) To support B/C above is there a java api this daemon can use or is it a question of updating the rdbms
    ii) Am I underestimating what can be done with the java action fault policy ?
    iii) To make our existing approach easier, is there a way of doing an invoke and pick operation actually within an embedded java routine to minimise the amount of code we have in each error handling block
    Hope this makes sense, thanks in advance - there seem to be a lot of knowledgeable people out there in this forum.

    Hi,
    The next blogs might be interesting for you. It addresses your questions.
    http://technology.amis.nl/blog/?p=2485
    http://www.it-eye.nl/weblog/2007/09/10/oracle-bpel-10133-fault-policy-management/
    Kind regards,
    Harm

  • 11g: Help regarding fault handling framework

    I am trying to implement a POC demonstrating the fault handling framework using fault policies. I am trying to handle remote and business faults. These faults are being thrown explicitly in the code. But I dont see the framework coming into picture. Here are the fault policies and fault bindings files
    The POC does the following
    1. If input is R, throws a remote fault.
    2. If input is B1, throws a business fault. There is a catch defined for this. But as we also have a policy for this error, we expect the policy overrides the catch
    3. If input is B2, throws a business fault. There is no catch defined for this. We expect the policy to handle this.
    4. If any other input, we return a string.
    <?xml version="1.0" encoding="UTF-8"?>
    <faultPolicies xmlns="http://schemas.oracle.com/bpel/faultpolicy"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <faultPolicy version="2.0.1" id="ComponentFaults"
    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-human-intervention"/>
    </condition>
    </faultName>
    <faultName xmlns:ns1="NS_B1"
    name="ns1:LP_B1">
    <condition>
    <action ref="ora-human-intervention"/>
    </condition>
    </faultName>
    <faultName xmlns:ns2="NS_B2"
    name="ns2:LP_B2">
    <condition>
    <action ref="ora-human-intervention"/>
    </condition>
    </faultName>
    </Conditions>
    <Actions>
    <Action id="ora-human-intervention">
    <humanIntervention/>
    </Action>
    </Actions>
    </faultPolicy>
    </faultPolicies>
    Here is the fault-bindings.xml file
    <?xml version="1.0" encoding="UTF-8"?>
    <faultPolicyBindings version="2.0.1"
    xmlns="http://schemas.oracle.com/bpel/faultpolicy"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <!-- Below listed component names use policy ComponentFaults -->
    <component faultPolicy="ComponentFaults">
    <name>BPEL</name>
    </component>
    </faultPolicyBindings>

    I created another bpel in the same composite that calls the original bpel. So now, those errros are supposed to travel to calling bpel.
    Fault policies are coming into effect now. So, one part of the problem is solved, that atleast syntax and all is correct, and the fwk does work (!) but another one has opened - why is the fault not getting handled by the fwk if there is a single bpel that is throwing and not catching those faults.
    Also, even in this new avatar, fault b1 is getting handled by the catch in BPEL process, while the fault policies are supposed to override any catches in bpel code.
    What I was attempting was, throwing the fault in a bpel process and expecting the fault handling fwk to handle it.
    It turns out, the framework is not capable of doing this, its only capable of handling faults coming after an invoke activity.
    Consulted Oracle Support on this. Their response
    The behavior within the single composite you are seeing is correct and is by design. As the documentation states:
    http://download.oracle.com/docs/cd/E12839_01/integration.1111/e10224/bp_faults.htm#BABIGGIB
    If a fault occurs during runtime in an invoke activity in a process, the framework catches the fault and performs a user-specified action defined in a fault policy file associated with the activity.
    The fault management framework catches all faults (business and runtime) for an invoke activity.
    So the above means that unless the fault is thrown in response to an invoke activity the Fault Policy set will not be triggered, which has been confirmed through the test you have uploaded. Please let me know if you have any questions or concerns.

Maybe you are looking for