创建binding和policy文件
我们需要异常处理时,我们需要设计异常处理的方式和处理的策略。其实就是要建立两个xml文件。
一个binding文件和一个policy文件。
1、 打开JDeveloper选择要验证的模块,选择SOAContent。
2、 在这个目录下创建2个文件:fault-bindings.xml文件和一个fault-policies.xml文件。
Ⅰ、fault-bindings.xml的内容(这个文件是一个策略binding文件,这里策略针对的级别主要composite、compnent、refenrence级别,后面可以加上相对应的策略,特别要注意一下版本号)。
<?xml version="1.0" encoding="UTF-8" ?>
<faultPolicyBindings version="1.0.0"
xmlns="http://schemas.oracle.com/bpel/faultpolicy"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<composite faultPolicy="MachineDocumentFaultPolicy"/>
</faultPolicyBindings>
Ⅱ、fault-policies.xml的内容(这里的策略文件是针对composite级别的,我们这里策略的id要和binding文件里的策略id相对应。这里的策略主要处理了remoteFault、bindingFault、runtimeFault,处理的action都交给了ora-retry,这里的ora-retry设置了重试3次,每次延迟5秒执行;如果重试错误,交给人工处理)。
<?xml version="1.0" encoding="UTF-8" ?>
<faultPolicies xmlns="http://schemas.oracle.com/bpel/faultpolicy">
<faultPolicy version="1.0.0" id=" MachineDocumentFaultPolicy"
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.1.1.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-retry"/>
</condition>
</faultName>
<!-- Step 1.1.1.2: Add your fault handler for binding fault here: -->
<faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
name="bpelx:bindingFault">
<condition>
<action ref="ora-retry"/>
</condition>
</faultName>
<!-- Step 1.1.1.3: Add your fault handler for runtime fault here: -->
<faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
name="bpelx:runtimeFault">
<condition>
<action ref="ora-retry"/>
</condition>
</faultName>
</Conditions>
<Actions>
<Action id="ora-retry">
<retry>
<retryCount>3</retryCount>
<retryInterval>5</retryInterval>
<exponentialBackoff/>
<retryFailureAction ref="ora-human-intervention"/>
</retry>
</Action>
<Action id="ora-human-intervention">
<humanIntervention/>
</Action>
</Actions>
</faultPolicy>
</faultPolicies>
3、然后点击部署到服务器上
4、发布完成后,登入http://172.16.0.238:7001/sbconsole
5、选择资源浏览器
6、选择我们要测试的接口,然后点击bug
7、
进入
Debug
后,可以看到表单数据,然后点击执行(因为这里的数据是业务数据,不过不通过会报出验证错误;而不会出现异常,异常的出现是因为
DB
断开了,服务和
DB
不能正常交互,会出现
timeout
的异常)。
8、 提交后等待执行结果(这里会执行较长时间,耐心等待)。
9、
执行完成后,查看响应文档,可以看到
timeout
错误。
10、这样可以登入http://172.16.0.238:7001/em来查看服务运行实例的状态,可以看到一个320022的 实例在运行已经完成。
、
11、点击恢复,我们可以进入看到这个服务实例在重试了3次,每次间隔5秒。
12、 继续点击恢复后,我们可以对这个服务实例进行恢复操作。