Weblog

Oracle BPEL 10.1.3.3 Fault Policy Management

Faults

In bpel-processes we can categorize the faults into: business faults and runtime faults. Business faults are application specific faults and will occur when we use the “throw”-activity or if we invoke a partnerlink which returns with some fault. It’s up to the “business” to decide what needs to be done when the fault occurs and what activities are needed for handling it.

Besides the business faults we have the runtime faults. Runtime faults will not be defined by the user, so we need to design parts in the process to handle them. In bpel we will make use of the catch-activity for this. In the catch itself we can invoke our own fault-handling processes or do some other activities (retry etc) which are needed to get a valid situation again.

Oracle made a nice technote for some good information about all the possible faults and some extra faults defined by Oracle Process Manager.

Framework

In the good old days (before patch 10.1.3.3) we needed to design the fault-handling part for every bpel-process.

Possibilities were there by making use of for example some Error Hospital, but still, every process individually needed changes for being able to handle faults.

With the latest patch for the Oracle Soa Suite (10.1.3.3) , Oracle provided a new Fault Management framework. 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 1 policy for every bpel domain.

In a so called “fault-binding” (/bpel/domains/default/config/fault-policy-binding.xml) , we can setup which policies we’re going to use and which processes/partnerlinks/porttypes will be part of it. The framework will use the binding in order of the following priority :

  • bpel.xml
  • policy defined on the server

In a so called “fault-policy” (/bpel/domains/default/config/fault-policies/DefaultPolicy.xml), we can define what type of faults we want to catch and what actions need to get executed.

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.

fault-policy-binding

The fault-bindings will be defined on the next location : /bpel/domains/default/config/fault-policy-binding.xml

The xsd-schema for the fault-bindings can be found on this location : /bpel/system/xmllib/fault-policy-binding.xsd

< ?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
    -->
    <!-- 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>

In the policy we can define on several levels (process,partnerLink,portType) if we want to make use of a policy. In the comment of the xml you will see what needs to be turned on or off to apply to policy.

fault-policies

The fault-policies will be defined on the next location : /bpel/domains/default/config/fault-policies. The xsd-schema for the fault-policies can be found on this location : /bpel/system/xmllib/fault-policy.xsd.

Oracle delivers the following policy by default.

< ?xml version="1.0" encoding="UTF-8"?>
<faultpolicy version="2.0.1" id="DefaultPolicy"
  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>
    <!-- Fault if wsdlRuntimeLocation is not reachable -->
    <faultname xmlns:bpelx="http://schemas.oracle.com/bpel/extension" name="bpelx:remoteFault">
      <condition>
        <action ref="ora-retry"/>
      </condition>
    </faultname>
    <!-- Fault if location port is not reachable-->
    <faultname xmlns:bpelx="http://schemas.oracle.com/bpel/extension" name="bpelx:bindingFault">
      <condition>
        <action ref="ora-rethrow-fault"/>
      </condition>
    </faultname>
  </conditions>
  <actions>
    <!-- This action will attempt 8 retries at increasing intervals of 2, 4, 8, 16, 32, 64, 128, and 256 seconds. -->
    <action id="ora-retry">
       <retry>
         <retrycount>8</retrycount>
         <retryinterval>2</retryinterval>
         <exponentialbackoff />
       </retry>
     </action>
     <!-- This is an action will cause a replay scope fault-->
     <action id="ora-replay-scope">
        <replayscope />
     </action>
   <!-- This is an action will bubble up the fault-->
   <action id="ora-rethrow-fault">
     <rethrowfault />
   </action>
   <!-- This is an action will mark the work item to be "pending recovery from console"-->
   <action id="ora-human-intervention">
     <humanintervention />
   </action>
   <!-- This action will cause the instance to terminate-->
   <action id="ora-terminate">
     <abort />
   </action>
 </actions>
</faultpolicy>

A policy consists of a conditions-section and an actions-section.
In the conditions-sections we will define which faults need to be handled and which actions will be executed.

<conditions>
  <!-- Fault if wsdlRuntimeLocation is not reachable -->
  <faultname xmlns:bpelx="http://schemas.oracle.com/bpel/extension" name="bpelx:remoteFault">
    <condition>
       <action ref="ora-retry"/>
    </condition>
  </faultname>
</conditions>

In this part of the code the framework will “catch” all remoteFaults and execute the ora-retry action.

<condition>
  <test>$fault.code/code="INVALID_WSDL"</test>
  <action ref="ora-terminate"/>
</condition>

In this part of the code we will check if the fault-code = “INVALID_WSDL”. The action to be executed is : ora-terminate.

Oracle delivers a few default actions as part of the framework. At this moment that list isn’t extensible. If we still need some custom fault-handling we could make use of the ora-java action. This action will allow us to make us of some custom java, and inhere we will be able to decide what to do with the fault.

Default available actions :

  • ora-retry ( retry the activity )
  • ora-replay-scope ( replay the scope in which the fault occurred )
  • ora-rethrow-fault ( system will throw the fault to the bpel fault handlers )
  • ora-human-intervention ( the current activity will freeze. In the console the user will be able to take several actions on this
  • instance )
  • ora-terminate ( terminate instance )
  • ora-java ( execute custom java )

Lets practice!

To show how the framework works we will build a little example. We deployed a simpe java webservice (helloWorld). We also build a little bpel-process with a few steps in it (assign and invoke of the java service).As part of the error-handling we added a catch on the remoteFault. In the catch we won’t be doing any fault-handling, just the catch and an assign to the output.

To generate a remoteFault we undeployed the javaservice from the oc4j, and executed the bpel-process again. After executing again, the process will fall into the catch we defined.

We will not change the structure of the process, and only define a new policy on the server.

First step is to define the fault-binding. 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">
        <process faultPolicy="BlogTestPolicy"/>
        <!-- DefaultPolicy is defined in ./fault-policies/DefaultPolicy.xml -->
        <partnerlink faultPolicy="BlogTestPolicy"/>
</faultpolicybindings>

The policy is named “BlogTestPolicy” and all processes and partnerlinks will use it.

Next step is to define the policy. BlogTestPolicy.xml:

< ?xml version="1.0" encoding="UTF-8"?>
<faultpolicy version="2.0.1" id="BlogTestPolicy"
  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>
    <!-- Fault if wsdlRuntimeLocation is not reachable -->
    <faultname xmlns:bpelx="http://schemas.oracle.com/bpel/extension" name="bpelx:remoteFault">
      <condition>
        <action ref="ora-retry"/>
      </condition>
      <condition>
        <action ref="ora-human-intervention"/>
      </condition>
    </faultname>
  </conditions>
  <actions>
    <!-- This action will attempt 8 retries at increasing intervals of 2, 4, 8, 16, 32, 64, 128, and 256 seconds. -->
    <action id="ora-retry">
      <retry>
        <retrycount>8</retrycount>
        <retryinterval>2</retryinterval>
        <exponentialbackoff />
      </retry>
    </action>
    <!-- This is an action will cause a replay scope fault-->
    <action id="ora-replay-scope">
      <replayscope />
    </action>
    <!-- This is an action will bubble up the fault-->
    <action id="ora-rethrow-fault">
      <rethrowfault />
    </action>
    <!-- This is an action will mark the work item to be "pending recovery from console"-->
    <action id="ora-human-intervention">
      <humanintervention />
    </action>
    <!-- This action will cause the instance to terminate-->
    <action id="ora-terminate">
      <abort />
    </action>
  </actions>
</faultpolicy>

We defined a policy which will handle all remoteFaults. When a remoteFault occurs, the framework will be able to execute two actions. First it will do the “ora-retry” action, if the fault still occurs the next action will be executing the “ora-human-intervention” action. After creating the policy we restart the oc4j-container to make sure the policy will be active.

**update
To chain the actions, in this example we just added 2 actions after each other. This won’t work, and only the last action will get executed. The way to do this is to use the retryFailureAction-element in the action.
for example :

<action id="ora-retry">
<retry>
<retrycount>5</retrycount>
<retryinterval>10</retryinterval>
<retryfailureaction ref="ora-human-intervention"/>
</retry>
</action>

Before we start testing the framework we make sure we still use the same situation as in the beginning. We have undeployed the javawebservice which we will invoke in the bpel process. We left the catch in the process. On the server we defined the policy. This policy will now handle the remoteFault instead of the “catch” in the bpel.

Execute the process. When we look in the console at the instance of the process we see this :

bpel with framework faulted

The catch in the bpel itself isn’t getting fired. When we look in the audit trail, we notice the next message :

It looks like our policy is active. The framework applied the policy. So it first executed the ‘ora-retry’ action (no output on this) and after this it executed the ‘ora-human-intervention’ action. So at this point we should be able to apply some other actions on the faulted activity (the invoke of the webservice).

From here we have 2 options. The first is the activities-tab. On this tab we will find all activities executed, and which faulted with the faultname. On the left we select the ‘Pending’ state in the ‘Activity State’ checkbox. On the right we will see the faulted invoke of our webservice. If we select the checkbox on the left of the activities we can make use of the ‘bulk update’- functionality on more then 1 instance. We select the invoke activity and in the listbox we can select one of the following actions :

  • Retry
  • Abort
  • Rethrow
  • Replay
  • Continue

The second option is the ‘interactions’-tab available in the view when we selected the faulted instance.

In here we will find all the activities from the current process-instance. Select the invoke-activity (sayHello). In the next screen we will see some sort of Error Hospital. Notice the new State of the current instance : open.pending.recovery.

We will be able to update all the payload of the variables of the activities in the process, execute different actions on them, chain the outcomes or just created new instances.

First select the variable in the “Available Variables”-listbox for which we want to update the payload. Click the get-button. In the textarea we’re now able to insert different payload. After inserting the correct values, click the set-button and go to the “Actions available”-listbox and select the appropriate action. The last step is to either choice to recover the current instance, or create a new one.

In our scenario we redeployed the webservice, so the wsdl is reachable again. We updated the sayHello inputvariable just to see some changes in the updated instance later on. After this we just click the Recover-button. Select the visual flow, and click on the invoke activity (sayHello).

As we can see in the output. The payload of the inputVariable of the sayHello has been updated and the framework executed the retry after it. We redeployed the webservice, so it was reachable again, and the invoke executed correct too.

I hope with the information in this article the functionality of the new fault policy framework is a bit clear.

Share and Enjoy:
  • del.icio.us
  • Google Bookmarks
  • DZone
  • LinkedIn
  • SphereIt
  • StumbleUpon
  • Technorati

119 Responses to “Oracle BPEL 10.1.3.3 Fault Policy Management”

  1. Bas Says:

    Nice article Eric! I can really use this.

  2. Siteminds » Nice article on BPEL Fault policies Says:

    [...] http://www.it-eye.nl/weblog/2007/09/10/oracle-bpel-10133-fault-policy-management/ [...]

  3. Harald Reinmueller Says:

    Is the old retry mechanism still available in 10.1.3.1?

    SubProcess.wsdl
    3
    30
    ${server_url}/default/SubProcess/SubProcess?wsdl

  4. JDeveloper & Oracle ADF » Oracle BPEL 10.1.3.3 Fault Policy Management Says:

    [...] Original post by Eric Elzinga [...]

  5. Patty Says:

    Hi,
    do the files for
    fault-bindings.xml (bpel\domains\default\config\)
    fault-policies.xml (bpel\domains\default\config\)
    BlogTestPolicy.xml (bpel\domains\default\config\)

    need to be created manually?
    I did and followed the steps and this is not working. the catch is still being fired.

    any feedback for troubleshooting is appreciated.

  6. Eric Elzinga Says:

    Hi Patty,

    The fault-bindings.xml is there by default after installing the patch. In this file you name your own policy, and this name is used in the fault-policies-directory. Inhere you need to create the “policy-name”.xml file (just like you called it).
    After both are setup correctly, you should restart the oc4j and try again. Hope it works, otherwise you could mail the files so i could have a quick look at it.

  7. Abhishek Says:

    Hi Eric,

    Nice job. Its really helpful. Just was curious to know if we can use this framework for custom exception what i mean to say in BPEL process if fault occurs any where because of any issue type mismatch or variable not initialized.

    So can we use this framework for the same.

    Thanks,
    Abhishek

  8. Eric Elzinga Says:

    Hi Abhishek,

    Thanks!
    Always nice to hear.

    Well, the framework only ‘catches’ the faults on invokations of the partnerlins.
    So what i could imagine for example on the synchroon processes is if you propogate your fault back on the ‘client’ partnerlink, to the ‘calling’ processes, then you should be able to let the framework catch this fault. I’m not sure if this is possible…just a thought…

  9. Sumit Says:

    Hi Eric,
    Nice article. It seems to be the only detailed/relevant article on fault policy management.
    I tried to test it, but its not working for me.

    –>

    2
    2

    I created two BPEL processes to test this out.
    One has a DB adapter with jndi reference for connection factory. This CF is not declared with corresponding jdbc in EM. So, BPEL ends in Binding fault.
    Another BPEL is exactly same as yours. It throws remote fault.
    But BPEL instances are not coming up in activity tab. I tried a full search as well.

    Am I missing something?

    Thanks,
    Sumit

  10. Sumit Agrawal Says:

    Hi,

    I am not able to paste my fault binding and fault policy xml here.
    Can you please pass me your email where I can mail them to you

    Sumit

  11. Eric Elzinga Says:

    Hi Sumit,

    You installed the 10.1.3.3 patch and the post-installation steps too ?
    In the post-installation steps you will find the sql-script for creating the database-objects, which will be used by the framework.

  12. Sumit Says:

    Hey Eric,

    Thanx a ton dude. It worked finally.
    I was missing few post installation steps.
    Hats off to you.

    Thanks,
    Sumit

  13. Eric Elzinga Says:

    :) I’m glad i could help you.

  14. Sumit Agrawal Says:

    Hi Eric,
    Need your help again.
    Yesterday i was able to run this scenario.
    Today i tried to replicate it in another PC. Its not working. This is also an advanced install.
    This has all post patch steps as well.

  15. Sumit Says:

    Hi Eric,
    Is it possible to use both HumanIntervention and RethrowFault action in conjunction.
    Till now in all my BPEL processes I had been using try-catch blocks and a DB adapter in those catch blocks to insert error details into a common repo.
    Now, I want to keep it that way, but also want these error instances to be available in activity tab for recovery. Right now if i try to use these two in conjunction, the rethrow action has overpowering/lasting effect and it ignores HumanIntervention action.
    Any ideas.
    Since I am unable to paste my xml here, I will post my fault policy samples in BPEL forum topic. (the same one).

    Thanks
    Sumit

  16. Eric Elzinga Says:

    Hmm im not sure if this is the way to go.
    If you use the human intervention you can also do the rethrow from the bpel console.
    So what if you would execute both actions parallel, and in the console you select the rethrow-option again (in this case it would get executed twice).

    And i guess it isn’t an option to do the db logging from within the ora-java action instead of the catch block.

  17. Sumit Agrawal Says:

    Hi Eric,
    Thanx for your response.
    I was keeping DB logging in ora-java action as my last option as doing it in try-catch using DB adapter seemed more cleaner way. But right now, it seems to be my only option.
    One more query, when we code a java class for ora-java, where do i place it?
    Also, where do i find API details for the same.
    and which method IFaultRecoveryContext will help me in getting fault string, someting similar to getFaultString of try-catch block?

  18. Eric Elzinga Says:

    Hi Sumit,

    I guess if you want to use some custome java you can place the classes at :
    SOA_Oracle_Home\bpel\system\classes

    See the developersguide on the topic :Java Embedding Activity
    Overthere you will see how to config the classpath for the bpelc on the server.

    In the interface of IFaultRecoveryContext you will find the method getFault().
    I haven’t used it myself, but i guess inhere you will find your faultstring.

    Good luck,
    Eric

  19. Eric Elzinga Says:

    reply@November 21st, 2007 at 17:42:54 e

    You just copied all the same config files of the fault policy to this new environment?
    If your process faults, do you see the activity marked red or yellow ?

  20. Sankash Says:

    Hi Eric,

    I have defined my fault policy as well as the binding, but it does not work. The fault is generated all right, however, the remedial action does not fire(under the action tag).Probably, I am missing out on something that is beyond just editing these xml files.

    Any help would be appreciated

  21. Eric Elzinga Says:

    Hmm, the action which is faulted, is marked red of yellow?

  22. Sankash Says:

    Hi Eric,
    Thanks Eric for your prompt reply. It is marked red, which obviously implies that the fault policy is not firing. My process behaves as if it is not even aware of the policy, which I assume is because of some other settings need to be done – in some other files, may be. What do you think is the problem?

    Thanks again for your input.

  23. Eric Elzinga Says:

    Your conclusion is right, the policy isn’t active.
    Did you restarted the container? Did you configured the policy for the correct bpel-domain ? Are you sure you have set up the id-field in the policy file correctly ?
    Otherwise possible to email me the files, so i can have a little check?
    eric.elzinga@it-eye.nl

  24. Sankash Says:

    Hey Eric,

    Thanks again for responding. I have ascertained that the correct parameters are set, and that too for the domain. Moreover, I even restarted the server and not just the container. The changes just do not seem to take effect. I have tried every wild thing that i can imagine, but it just does not work. I shall mail you the xml files, for you to have a look at them. However, I am pretty sure that they are all right.

    Thanks again for the help.

  25. Shanthi Viswanathan Says:

    The fault management policy works as you have described. Many thanks for this post. However, I am able to see the “failed isntances” in the activites tab to recover/retry only when I login as a BPEL Admin user. Are there any other options where a user will be able to retry by selecting a failed isntance from the “Activities” tab?

  26. Eric Elzinga Says:

    Hi Shanthi

    I don’t know if the action of retrying instances is linked to a role of administrator.
    Maybe you could try building you’re own ‘error hospital’ filled with the instances, and write your own handling. For now i don’t see any other options, sorry.

  27. Jonathan Says:

    Hi Eric

    I don’t think that the way you did you chaining reply/human-intervention works. You say “So it first executed the ‘ora-retry’ action (no output on this)” this is because the ora-retry action did not got executed.

    To chain two actions you have to specify only one condition ex:

    and use in ora-retry like this

    2
    30

    Regards!

  28. Eric Elzinga Says:

    Hi Jonathan,

    You’re right..
    The way to chain the actions is to make use of the retryFailureAction element
    See the updated article, this comment-block isn’t very happy with the paste of the code-blocks :)

    Thanks for the reply.
    I updated the article

  29. Anju Says:

    Hi Eric,

    I could successfully implement the sample policy file given by you. But when I try to use a java action , the fault handling mechanism is not working. I guess it could either be a problem with my implementation of the java class or the place where I placed it(under SOA_Oracle_Home\bpel\system\classes ) . How can I identify the problem? Will there be any log entries showing what the problem could be?

    Thanks

  30. Eric Elzinga Says:

    Hi Anju,

    Can you email your policy files ?
    eric.elzinga@it-eye.nl

    With regards,
    Eric

  31. sunny Says:

    This is a great blog and i have tried with remote fault.
    But not able to use for selectionFailure fault. is there any thing specific to be done or the fault policy is only for remoteFault and bindingFault???

    Thanks
    sunny

  32. Ketan Says:

    Hi Eric, nice article
    I had couple of queries,( I have posted them on the Oracle forum thread:
    http://forums.oracle.com/forums/thread.jspa?forumID=212&threadID=574489)
    Can you please answer them?
    1. the human- intervention action freezes the activity( and thus process) for manual recovery, is there way of invoking the work list application( human work flow) with this?
    2. what exactly is the difference between the files
    files fault-bindings.xml and fault-policy-binding?

    Thanks

    Ketan

  33. Yogesh Says:

    Hi Eric,

    I read your article on BPELL fault policies and I have successfully implemented that.

    I am trying to use Fault policy at process level in my bpel.xml but it is now working.

    Could you please suggest some solution for this.

    bpel.xml

    FaultPolicyPoc.wsdl

    http://S119SNIQ057408.schneider.com:8888/orabpel/default/HelloWorld/HelloWorld?wsdl
    4
    2

    hello:HelloWorld

    hello:HelloWorld

    Regards,
    Yogesh Baraskar

  34. Anju Says:

    Hi Eric,

    If my invoked partnerlink bpel process is returning a business fault as

    NameSpace URI -> http://xmlns.oracle.com/SampleErrorBPEL
    local name -> creditFault

    what should be my entry in the fault policy file? Is there anywhere else I need to update the fault name other than the fault policy file?

    Thanks

  35. Eric Elzinga Says:

    Hi Anju,

    I haven’t tested it but i would guess it looks something like this :

    Can you give me your testresults?

  36. Eric Elzinga Says:

    Bah, comments don’t show the xml-source. Can you give me your email ?

  37. Anju Says:

    Thanks for the response Eric. My id is
    anju.kirankumar@gmail.com

  38. Rohit Says:

    Hi Eric,
    Tech Notes for BPEL 10133 (http://www.oracle.com/technology/products/ias/bpel/pdf/10133technotes.pdf) mentions that when setting up the fault policy to “Retry” n times then “If multiple WSDL locations are available, the
    Oracle BPEL Server attempts a connection to the
    next location for n times with delay. The
    framework attempts to connect to each specified
    WSDL location at every retry count attempt.”

    My question is how do we setup multiple wsdl locations for a partner link? Is it done in bpel.xml? It would be great if you could provide some information on this front.
    Thanks
    Rohit

  39. RaghuD Says:

    hi,
    its really a wounderful artical.
    i did all the steps,as u mentioned. but still i’m not able to use the fault management frame work. still the catch branch is firing. i am binding the policy in bpel.xml
    can anyone plese help me out.

  40. Eric Elzinga Says:

    Hi RaghuD,

    You’re sure you have executed all the post-installation steps of the patch?

  41. RaghuD Says:

    Hi Eric,
    thans a lot for a quick responce.
    yes, i’m done with post installations too. that was successful.
    still i’m not able to use this fault handling frame work. still the invoke is showing in red color. plz help me out.
    thanks in advance

  42. Eric Elzinga Says:

    Hi!
    Hmm so the …-fault (don’t know exact name atm) tables are created in the dehydration-db right ?

    You see any other errors in the logfiles ?
    You’re sure you setup the policy correctly?
    What fault does the invoke give you?
    You’re sure this type of fault should be catched by the policy?
    Just some wild guessing.
    Otherwise you could email the policy-files and a grab of the audit-trail ?

  43. Raghu Says:

    hi,
    once again thans for ur quick responce.
    i am binding the policy in bpel.xml, i am sure that its correct. any way i will mail u the policy file.
    i have created the one jave webservice and deployed. i have stopped that service and intiating the bpel process again, so that it shud get the remote fault.
    even i tried with defaultpolicy that is provided by orcle. at least it shud work rt? but it is also not working.
    i’m using the olite as database. i’m not mapping the database to XE. does it any problem??

  44. Amit Says:

    Dear Author,
    I followed the steps as given in the blog above. The problem I am facing is that the the policy file does not get called at all. If i check in the domain.log file though i can c the policy file being loaded during the startup of the server. Could you let me know if there can be any other reason. Any pointers to debug the same.

    cheers… Amit

  45. Eric Elzinga Says:

    Hi Amit,

    You copy/pasted the contents of the fault-bindings.xml to yours? so it acts on every invoke of a partnerlink?
    When a fault arrives..do you see a red of yellow marked invoke ?

  46. Amit Says:

    Thanks Eric for the reply.
    Yes i copy pasted the above xml’s as they are. When the fault arives i can c a red marked invoke and not a yellow as given above. Then followed by the assign of the catch block.

    regards, Amit

  47. Amit Says:

    also the domain.log shows that the fault policy files were loaded while the startup of the oc4j_container.


    Fault binding file loaded:C:\oracle\product\10.1.3.1\OracleAS_1\bpel\domains\default\config\fault-bindings.xml

  48. Amit Says:

    forgot to mention that the BlogTestPolicy.xml also gets loaded…


    Added fault policy file C:\oracle\product\10.1.3.1\OracleAS_1\bpel\domains\default\config\fault-policies\BlogTestPolicy.xml

  49. Amit Says:

    Hi Eric,
    We could get the framework working. The problem was in the policy file we had defined. But we are not able to call a custom java class from the policy file. the entries in the policy file are as given below.

    there are a few things i would like to know.
    1. Where do i keep the class file Class1 which is being called? Is there any particular folder where the framework would try to look for the class file by default? I tried placing the class file in the same the same folder as the fault-policies.
    2. The class file i have written is to invoke another bpel process(HelloWorld). In the Audit of the faulted process it shows that the class Class1 is being called. But if it does call the class file an instance of helloworld shld have been created. Which does not happen.
    Entries from the audit of the faulty process.

    [2008/06/07 01:09:54] [FAULT RECOVERY] Schedule retry #2 at "Jun 7, 2008 1:09:58 AM".
    [2008/06/07 01:09:58] Faulted while invoking operation "initiate" on provider "AsyncTry2".More...
    -
    -
    -
    -
    -

    asdsa

    -
    -
    -

    WSDLReadingError

    -

    Failed to read wsdl.
    Failed to read wsdl at “http://ossi-1344:8888/orabpel/default/AsyncTry2/AsyncTry2?wsdl”, because “Failed to read WSDL from http://ossi-1344:8888/orabpel/default/AsyncTry2/AsyncTry2?wsdl:WSDL not found”.
    Make sure wsdl is valid. You may need to start the OraBPEL server, or make sure the related bpel process is deployed correctly.

    [2008/06/07 01:09:58] [FAULT RECOVERY] Invoked handleBPELFault on custom java action class “Class1

    The java code is as given below

    import com.oracle.bpel.client.config.faultpolicy.IFaultRecoveryContext;
    import com.oracle.bpel.client.config.faultpolicy.IFaultRecoveryJavaClass;

    import java.util.Properties;
    import java.util.Map;
    import javax.naming.InitialContext;

    import org.w3c.dom.Element;
    import org.w3c.dom.Node;
    import com.collaxa.xml.XMLHelper;
    import com.oracle.bpel.client.ClientDefs;
    import com.oracle.bpel.client.Locator;
    import com.oracle.bpel.client.NormalizedMessage;
    import com.oracle.bpel.client.delivery.IDeliveryService;

    public class Class1 implements IFaultRecoveryJavaClass{

    /**
    * @param ctx
    */
    public void handleRetrySuccess(IFaultRecoveryContext ctx ){
    //If retry is success the process completes. Hence no action needs
    //to be taken in this senario
    System.out.println("This is for retry success");
    };

    public String handleBPELFault( IFaultRecoveryContext ctx ){
    //In case of a BPEL fault need to read the payload xml and do
    // a RMI call to the Logger process
    System.out.println("This is for fault recovery success");

    String reply_msg="";

    try{
    // properties in the classpath
    Properties props = new java.util.Properties();

    java.net.URL url = ClassLoader.getSystemResource("context.properties");
    props.load(url.openStream());

    String xml = "Amit";
    /**
    * This Locator will be used to assign the error message received from BPEL Fault Policy File
    * null in the locator menas local server
    */
    Locator locator = new Locator("default","bpel", props);

    /**
    * This deliveryService class will be used for calling Local Logger service.
    *
    */
    IDeliveryService deliveryService = (IDeliveryService)locator.lookupService(IDeliveryService.SERVICE_NAME );
    // construct the normalized message and send to collaxa server
    //----------Sample---------Change it as per need

    System.out.println(deliveryService.toString());

    NormalizedMessage nm = new NormalizedMessage( );

    nm.addPart("payload", xml );

    //NormalizedMessage res =
    deliveryService.post("HelloWorld", "initiate", nm);

    //Map payload = res.getPayload();

    reply_msg="SUCCESS";
    }
    catch(Exception ex){
    System.out.println("Error in loading properties.");
    ex.printStackTrace();
    reply_msg="FAILED";
    }

    return "ABORT";

    }

    public static void main(String[] args){
    new Class1().handleBPELFault(null);

    }

    }

  50. Amit Says:

    Dear Eric,
    Is there any way i can find out what exceptions are raised when the framework calls the java class.

  51. Juan Carlos Says:

    Hi i really appreciate this article but i cant make it work, dont knoe if i have all the patches require. this is what ive got.
    soa suit 10.1.3
    installed patch 10g Release 3 (10.1.3) Patch Set 3 (10.1.3.3.0) for Linux and Microsoft Windows

    in the E:\product\10.1.3.1\OracleAS_1\bpel\domains\default\config. i have edited the faul-bindings.xml to insert the policy in this page

    in the E:\product\10.1.3.1\OracleAS_1\bpel\domains\default\config\fault-policies, i just copied the policy.

    but the the framework does seem to work, this is the answer ive got when invoque the deativated process. when invoking locally the endpoint ‘http://jlingan:8888/orabpel/default/CreditRatingService/1.0′, ; nested exception is:
    ORABPEL-02106

    Estado del proceso desactivado.
    No se ha activado la clase de proceso “CreditRatingService” (revisión “1.0″). No se pueden realizar operaciones en el proceso ni instancias pertenecientes al proceso si el proceso está desactivado.
    Póngase en contacto con el administrador si este proceso se ha desactivado involuntariamente.

    ORABPEL-02106

    Estado del proceso desactivado.
    No se ha activado la clase de proceso “CreditRatingService” (revisión “1.0″). No se pueden realizar operaciones en el proceso ni instancias pertenecientes al proceso si el proceso está desactivado.
    Póngase en contacto con el administrador si este proceso se ha desactivado involuntariamente.

    ill really apreciate any help.

    by the way i have installed the patch with the basic installation process

  52. Eric Elzinga Says:

    Hi

    Is the invoke of the turned off service red or yellow ?

  53. Juan Carlos Says:

    ok i make it work, the problem was that i not applied the 6492514 patch.

    Eric i have a question for you if u can help me, im making a implementation of a worklist, and i want to catch the fault process instances, can u give me a clue on how can i identify the instances??

  54. Eric Elzinga Says:

    ok great!

    what do you mean by ‘identify the instances’ ?
    for every faulted instance you want the execute a human task?

  55. Juan Carlos Says:

    ok ive got it, i made the listing of all fault activities and the restoratiion process.

    but … yeah i have another question…
    eric the oracle fault management framework can only catch faults on failed invokes to Web services, or i´m able to catch any other fault. like in my ws i return an exception or message identifying an error, can i catch that message and treat it like a fault ?? hoper i make my self clear hope u understand my english.

    many thanks in advance Eric for your knowledge

  56. Eric Elzinga Says:

    Hi!

    I understand you :)
    The framework will only get active when it receives a soap fault on the invoke of a partnerlink.
    So..it won’t work on some sort of error-element in your payload. So you need some wrapper around it which will translate the error-element to some custom soap fault

  57. Suryaveer Says:

    Hi Eric,

    Is it mandatory to use 10.2.0 enterprise edition database. I m using the express database and while running the post installation script i.e. upgrade_10131_10133.sql it gives several errors. The errors are “table does not exists.” It says this for every table named in the script. Before this I’ve executed the IRCA script.

  58. Eric Elzinga Says:

    Hi Suryaveer,

    SOA suite should run on XE too.
    Can you name some of the tables ?

  59. Suryaveer Says:

    Hey Eric,

    I am replacing with %. XML tags are being stripped.

    In the fault-bindings.xml I’ve added this
    %process faultPolicy=”BlogTestPolicy”/%
    and in the BlogTestPolicy
    %Conditions%

    %faultName xmlns:ns2=”http://www.myFault.com” name=”ns2:myFault”%
    %condition%
    %action ref=”ora-retry”/%
    %/condition%
    %condition%
    %action ref=”ora-human-intervention”/%
    %/condition%
    %/faultName%
    %/Conditions%

  60. Eric Elzinga Says:

    Do you Throw this fault yourself or do you receive it on your invoke of the partnerlink?

  61. user1146 Says:

    I’m trying your example, and when I run it, it looks like it is still doing the catch(invoke is red). If I look at the invoke in the flow, I see message [Fault Recovery] Marked invoke activity as “pending manual recovery”

    Any ideas?

  62. Eric Elzinga Says:

    You executed the post-installation sql scripts ?
    All went fine ? Tables are created etc ?

  63. user1146 Says:

    Problem fixed!!
    I re-ran script verified the tables were there this time.

    sorry about that

  64. Eric Elzinga Says:

    Great!

    Good luck with it :)

  65. Suryaveer Says:

    Hi Eric,

    Fault policy management framework works for the predefined faults. Does it also works for custom faults. I tried to throw a fault in a simple BPEL process but it doesn’t worked like the predefined fault.

  66. user1146 Says:

    how would I chain a log routine (ora-java) with the other actions ora-retry, ora-human-intervention? So I get a remote fault, I want to log the error using ora-java, then I want to use ora-retry. Is there a way to chain these events together?

  67. Eric Elzinga Says:

    You could write your custom logger. Let it return like ‘COMPLETED’ and add to the javaaction the property returnValue value=”COMPLETED” ref=”ora-terminate”

    Sorry..can’t past xml-tags inhere :)
    Otherwise i will email you some example-code

  68. user1146 Says:

    Eric Thanks,
    That is the solution I was thinking of. I can set the return value in the java logger based on the fault type.

  69. Eric Says:

    Your welcome :)
    Good luck implementing it

  70. user1146 Says:

    Eric,

    I have one more for you, I’m not sure you can help me on this one

    In my logger, I want to also get the payload, so I’m using the locator to retrieve the payload based on the instance id. This was working standalone outside of the fault framework and the logger. When I try to use it inside the fault framework it does not find the instance id. It’s like it hasn’t hit the store yet.

    So here is what happens, I run a bpel process to force a fault (in this case a unique constraint) The fault policy picks it up the logger runs and all information is retrieved (right now just error message, and instance id), but the payload is not returned from my method.

    If i then take that instance id and run my get payload method standalone from jdeveloper, it will return the correct payload. Have you seen this before? Is this the correct way to get the payload? or is there a better way?

  71. Eric Elzinga Says:

    Hmm…sounds good to me…..haven’t done much with the api’s ..maybe post your question on the oracle forum is a better idea

  72. RaghuD Says:

    hi Eric,
    if you don’t mind can you through some light on Business Faults.
    like, how to create a business fault and how to through it from bpel…

    many thanks in advance.

  73. Khaleel Says:

    Hi,

    I tried to practice this example. I am able to upto the handling the error. However, when I try to recover it manually the instance is not recovering. Any help?

    These are the steps I did for recovering
    1. Select the faulted instance then go to the “interactions” tab.
    2. select click on “sayHello” link and then select the input variable and then press “Get” and then “Set”
    3. Finally “Retry” from the available actions and click on “Recover”.

    Upto second point everything working well, even the instance also updating the message. But the instance is not continuing/ tryin to recover and finish. So I have th problem only in the final step to complete this practice.

    Eagerly waiting for the help.

    –Khaleel

  74. Sashwat Gupta Says:

    Hi Eric,
    Very nice article. Your article, user comments and technotes helped me implement the framework.

    I have some queries though.

    1. The Replay action tried for recovery (and service faults again) does not execute the fault handling framework. Is this expected behavior?

    2. The technotes state the following

    “The Oracle BPEL Process Manager API enables you to programmatically perform the abort, retry (with a success action), continue, rethrow, and replay recovery options”

    Instead of using the BPEL console, I would like to have the same functionality in my user interface. Can this be achieved? I did not find any relevant documentation or examples regarding this.

    3. The Retry option does not seem to be working (human intervention does work), I put a proxy in between the calls and am unable to see multiple invokes.

  75. Sashwat Gupta Says:

    Sorry for point 3. When I used the
    and it worked. I was using sequenced retries.

  76. Charlie Says:

    Hi Eric,
    Thanks for the useful article.
    It activates fine with DefaultPolicy.

    My screnario is:
    I’m trying to make new “partnerLink faultPolicy=”TestFaultPolicy”" in fault-bindings.xml file and a TestFaultPolicy.xml in same place with DefaultPolicy.xml.

    I move the name of a partnerlink from partnerlink faultPolicy DefaultPolicy to partnerlink faultPolicy TestFaultPolicy in fault-bindings.xml

    The new TestFaultPolicy and DefaultPolicy is OK loaded.

    I get a (Fault Recovery) Marked invoke activity as “pending manual recovery”.

    My question to you is why it works fine with DefaultPolicy?

  77. Eric Says:

    Hi,

    Good to hear you liked the article.
    Can you email your files so i can have a look at them?
    eric.elzinga@it-eye.nl

    Thanks,
    Eric

  78. Sahay Jerry Says:

    Eric,

    Nice article. I have implemented fault-policy successfully. But we wanted to do more than just wait for manual intervention when we get fault.

    1. Notify Help desk via email
    2. Bring down the component so that no more new instance will be generated.

    Appriciate your help on this.

  79. Eric Says:

    Notifications isn’t supported yet by the framework.
    So you’ll have to use the java-action for this.
    In this you can both send the email and use the bpel api’s to set the bpel status offline.

  80. Srini Says:

    Eric,
    Nice write up. I was looking for Error Hospital tutorial, I`ve been asked to configure Error Hospital for BPEL & ESB. So the example you provided is Error Hospital ?
    If so, Configuration for ESB is same as BPEL ?

  81. Eric Elzinga Says:

    Hi Srini,

    No the faultpolicymanagement is only for bpel.
    At the moment there isn’t really an error hospital for esb. Should be coming in a some new version.
    Only thing you could use for esb are the error queues. But then you still need to ‘develop’ the error hospital yourself.

  82. Srini Says:

    Thanks Eric,
    Just a quick confirmation, Fault Management that you explained above is Error Hospital ?
    I`ve downloaded the 10.1.3.4 patch for Error Hospital. is there any Pre & Post Installation steps to follow ?

  83. Eric Elzinga Says:

    Hi Srini,

    Can you paste me the metalink patchid, so i can check ?

  84. Srini Says:

    Hi Eric,
    Here is the name of the patch file that I downloaded “ias_windows_x86_101340.zip”.
    One more thing, Could you please confrm that the above tutorial is nothing but Error Hospital

  85. David Chung Says:

    Eric,

    Thank you for your excellent article. I followed the instructions and applied the 10.1.3.1 to 10.1.3.3 patch and did the post-install.

    I have been able to use the framework to handle a remoteFault successfully.

    I have been trying to have my process explicitly throw a fault and have is be handled by the framework. Is this even possible?

    My fault binding file includes:
    ————————————————

    My TestPolicy file includes:
    ————————————————

    ————————————————

    As I understand the system. I have declared TestPolicy.xml to be the default handler for all process faults. Then I specify that:

    {http://foo.com/faults:}testFault

    be handled with:

    ora-human-intervention

    I am not sure what I am missing here.

    Thanks in advance.

  86. David Chung Says:

    Oops. Let me try again:

    My fault binding file includes:
    ————————————————
    <faultPolicyBindings
    version=”2.0.1″
    xmlns=”http://schemas.oracle.com/bpel/faultpolicy”
    xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>

    <process faultPolicy=”TestPolicy”/>

    My TestPolicy file includes:
    ————————————————
    <faultName
    xmlns:genova=”http://www.genovatechnology.com/faults”
    name=”genova:testFault”>
    <condition>
    <action ref=”human-intervention”/>
    </condition>
    </faultName>

  87. David Chung Says:

    The fault I want to handle is:

    {http://www.genovatechnology.com/faults}testFault

  88. Srinivas Says:

    Eric,
    My Invoke Activity is in red, So I`m pretty sure that Policies arent active. How to check whether post installation scripts are completed. IT Admin guy has patched the Application Server or
    Where to get the installation scripts so that I can verify with IT guy to make sure that the post installation steps are followed.

  89. Eric Elzinga Says:

    @David Chung
    If you want to catch your our faults you need to declare them with namespaces just like the remoteFault etc.
    Then to test it you should have atleast 2 processes.
    Process1 invokes process2, in process2 you throw back the ‘customfault’ on the client partnerlink, so in process1 you can catch it like the used to do.

    @Srinivas
    If you check the patch you’ll see some sql scripts which needs to be executes in the bpel repository. Can you check if those are there?

  90. David Chung Says:

    Eric,

    Thanks for the response. I think you confirmed that this frameworks only handles faults raised when invoking a partner link. I was trying to raise a fault using a Throws activity and subsequently handle the fault in the framework.

  91. Eric Elzinga Says:

    By default the framework ‘catches’ only the faults on the invokes. so you can use your own throw, but you can only catch that fault in the ‘calling process’.

  92. Santhosh Says:

    Hi Eric,
    Nice article and very useful too. I have one question for you.
    Can we somehow integrate the “ora-human-intervention” action to the worklist application so that one doesn’t have to go to the BPEL console to do a manual recovery.
    Thanks in advance.

  93. Mads Says:

    Hi Eric,

    This is very nice article. I have a question for you. Is is possible to add the business faults to the polict file. I mean, if suposse I am calling a credit check service, it’s throwing a fault called ‘NegativeCreditFault’, is there a way to put this fault in the fault policy file?

    And could you please provide me more information how to set the fault policy to BPEL process(bpel.xml) ?

    Thanks,
    Mads

  94. Eric Elzinga Says:

    Hi Mads,

    I will write a little article the next days inwhich i hope to make this clear to you.
    Check the blog to see when it’s there.
    If you need any extra information after that..i will add it..

    ok?

    Regards,
    Eric

  95. Mads Says:

    Eric,

    Thanks for the immediate response. Hope the next article might be cover all the inforamtion.

    I tried the same procedure what you said in the article, but it’s not working. It’s always going the fault handler.

    Any idea why the fault policy is not working?

    Thanks,
    Mads

  96. Eric Elzinga Says:

    Did you config the custom fault correctly together with his namespace? And you’re sure you use this namespace in the bpel itself to throw the error to?

  97. Mads Says:

    Yes, I gave the correct name space. But still the fault policy is not working. I tried with the remoteFault, still the fault policy is not working, it’s going to the fault handling.

    -Mads.

  98. Eric Elzinga Says:

    So even with remoteFaults it doesnt work ?
    Can you email both the policy xml files?
    eric.elzinga@it-eye.nl

    You executed the post steps after installing the patch ?

  99. Mads Says:

    Hi Eric,

    It was my fault, I gave the wrong namespace in the policy file. After I corrected the namesapce, it’s working fine for both built in faults and custom business faults.

    And also I am able to test it with process level fault policy (added the entries in the bepl.xml). All scenario’s are working fine.

    Thanks for the help.

    -Mads

  100. Eric Elzinga Says:

    Great!

    Glad i could help you (a bit)

  101. Oracle BPEL Fault Policy Framework handling custom business faults « Oracle .. Java .. OpenSource .. SOA Says:

    [...] · Filed under Uncategorized From the Oracle forum and from the comments on my article about Oracle BPEL Fault Policy Management i get a lot of questions about how to let the framework handle my own custom defined [...]

  102. IT-eye » Oracle BPEL Fault Policy Framework handling custom business faults Says:

    [...] the Oracle forum and from the comments on my article about Oracle BPEL Fault Policy Management i get a lot of questions about how to let the framework handle my own custom defined [...]

  103. Manitosh Says:

    hi Eric,
    I have configured the fault policy as per instruction , but still i am not able to see the fault. I am not sure whether the bpel has visibility of the fault.

  104. cshook Says:

    I am using the fault policy framework and I am able to specify a custom fault (non-bpel fault) and I can see it in the activities tab when the fault occurs. I click on it to go into the detail. I select the variable that I want to change, click get, change the value in one element, then click set, then select replay, then click recover. When I look at the flow that was “replayed” the variable was not changed. Also there is nothing available in the action drop down box.

    Is there something that I am missing?

  105. Prapoorna Says:

    Hi,

    We are on 10.1.3.3. In order to use the Fault Framework, I have defined the fault-bindings.xml and the faultPolicy.xml files in the appropriate directories and changed the bpel.xml file to refer the faultpolicybindings.

    When I run the process, however, I see the invoke erroring out in RED and not in YELLOW. In the domain.log, I see that the fault Policy is loaded fine. No errors there.

    I read about some post installation setups in the above posts, not sure what they are and if we did those. Can you please let me know how do I check if we did those and if not what we have to do?

    Thanks and appreciate your help.
    -Prapoorna

  106. Eric Elzinga Says:

    Hi Prapoorna,

    Did you executed the post-installation steps too ?
    These are in the install guide of the patch.

    What did you add to the xml files?
    RemoteFault is default in the xml files, can you check if these kind of faults are getting catched? (my turning off one of the services for example).

  107. Prapoorna Says:

    Thanks Eric for the repsonse.

    I’m not sure if we did the post isntallation steps and did not apply any patches wither.

    Since we are on 10.1.3.3, I assumed all we need to do was create the appropriate folders in the domain that we are using and copied the fault-bindings.xml and DefaultPolicy.mxl files there.

    Please let me know if anything else needs to be done and if so, what and where to get the information.

    And to the bpel.xml file I added:

    The invoke is calling a custom procedure and I dropped the procedure so the invoke fails and I see it in RED still.

    Thanks and appreciate your help

  108. Prapoorna Says:

    Here is the section I added to bpel.xml (with % replacing the tags)

    %faultPolicyBindings version=”2.0.1″ xmlns=”http://schemas.oracle.com/bpel/faultpolicy” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”%
    %!– DefaultPolicy is defined in ./fault-policies/DefaultPolicy.xml –%
    %process faultPolicy=”DefaultPolicy”/%
    %partnerLink faultPolicy=”DefaultPolicy”/%
    %/faultPolicyBindings%

  109. Eric Elzinga Says:

    Hi Prapoorna,
    Can you check in the database if you got a table called wi_faults ? (or something like that)
    What fault does the invoke of the stored procedure return ?

  110. Prapoorna Says:

    Yes. I see a WI_FAULT table in the database.

    It is throwing a bindingFault. And in my FaultPolicy.xml I have the action as ora-rethrow-fault which would get the control back to the process and handled by the catch branch I ahve there. But I see it in RED and not YELLOW. Does that mean the FaultPolicy is not executed at all.

    Also I’m thinking I will change the Faultpolicy to ahve the retry action for bindingFault. Now if I test, will it show in YELLOW?

    Thanks
    -Prapoorna

  111. Eric Elzinga Says:

    Yes, that means the framework doesn’t get active.
    Can you email (in rar) the xml files from the fault framework, so i can have a look at them ?

    eric.elzinga@it-eye.nl

  112. Prapoorna Says:

    I emailed the files to you. Hope you got them

    Thanks
    -Prapoorna

  113. Prapoorna Says:

    Hi Eric,

    After I did what I said above, I see the invoke in YELLOW now. But it says “Invoke Activity Marked for Pending Recovery”.
    In my DefaultPolicy.xml, I have defined the retry action first and then the human-intervention. My understanding is that first it retries in the intervals we specified and then it will wait for human-intervention.

    Does that mean that the retry is not working?
    Thanks
    -Prapoorna

  114. Prapoorna Says:

    Hi Eric,

    I also noticed this:
    I removed the faultbindings entry from the bpel.xml as I did not want the fault framework to be used. I run an instance and I see that the invoke is completing in YEllow and waiting for Manual Recovery. I was expecting it to be in RED.

    Is that not the expected behavoiur. Thanks and appreciate your help
    -Prapoorna

  115. Gestion des erreurs avec “BPEL Error Hospital” « IT Corporate Solutions Says:

    [...] Oracle BPEL 10.1.3.3 Fault Policy Management by Eric Elzinga [...]

  116. BradW Says:

    Have you ever worked with the DBAdapter and an ESB process? We are trying to use the built in adapter retry functionality with not much success. Any pearls of wisdom you could share?

  117. Eric Elzinga Says:

    I assume your have added the RetryInterval and RetryCount properties on the db adapter?
    What check did you do to see if the retry functionality was working or not ?

  118. Oracletube Says:

    Check out http://www.oracletube.com – Free learning website for BPEL,BAM,Fusion MW,Weblogic,AIA and more..

  119. homemade sex toys price Says:

    Good Job, homemade sex toys [url=http://profiles.friendster.com/homemadeses#1]homemade sex toys[/url], mvxcye,

Leave a Reply

Technology