自動フォルト・リカバリに対するフォルト・ポリシー・ファイルの手動作成

自動フォルト・リカバリに対するフォルト・ポリシー・ファイルを手動で作成するには:

  1. フォルト・ポリシー・ファイルを(たとえば、fault-policies.xmlなどの名前で)作成します。このファイルには、特定のタスクを実行するためのconditionセクションとactionセクションを挿入します。
  2. このファイルをcomposite.xmlファイルと同じディレクトリまたは別の場所に格納してoracle.composite.faultPolicyFileプロパティを定義します。
    <property
     name="oracle.composite.faultPolicyFile">oramds:/apps/faultpolicyfiles/
     fault-policies.xml
    </property>
    <property
     name="oracle.composite.faultBindingFile">oramds:/apps/faultpolicyfiles/
     fault-bindings.xml
    </property>
    

    フォルト・ポリシー・ファイルがファイル・システム内に配置されている場合は、次の書式を使用します。

    <property
    name="oracle.composite.faultPolicyFile">file:/project/apps/fault-policies.xml
    </property>
    
  3. フォルト・ポリシー・ファイルのconditionセクションを定義します。
    • このconditionセクションについては、次の点に注意してください。

      • このセクションには、faultNameに基づいて条件を指定します。

      • faultNameには、複数の条件を構成できます。

      • 各条件には、1つのtestセクション(XPath式)と1つのactionセクションがあります。

      • testセクション(XPath式)は、フォルト時に使用可能なフォルト変数に対して評価されます。

      • actionセクションには、同じファイルに定義されているアクションへの参照があります。

      • 問い合せることができるのは、フォルト時に使用可能なフォルト変数のみです。

      • 条件の評価順序は、ドキュメントに記載されている順序によって決まります。

      • 特定のエラー条件が発生した際に配信する条件(電子メール、JMSキューまたはログ・ファイル)と1つ以上のアラートを関連付けることができます。

      表12-5に、フォルト・ポリシー・ファイルのconditionセクションの例を示します。conditionセクションで定義される全アクションは、actionセクションにおけるアクションに関連付けられる必要があります。

      表12-5 フォルト・ポリシー・ファイルでのconditionセクションの使用

      条件の例 フォルト・ポリシー・ファイルの構文

      この条件は、code = "WSDLFailure"のフォルト変数をチェックします。

      ora-terminateactionが指定されています。

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

      test条件は指定されていません。これは、指定したfaultNameのcatchAll条件です。

      <condition>
        <action ref="ora-rethrow"/>
      </condition>

      2つのユーザー通知アラートが条件で定義されています。フォルト発生時に作成するユーザー通知アラートのタイプ(たとえば、電子メール・アラート、JMSキュー・アラートまたはログ・ファイル・アラート)を選択します。

      <condition>
          <alert ref = "ora-jms"/>
          <alert ref = "ora-email"/>
        <action ref="ora-rethrow"/>
      </condition>

      faultName名前属性がない場合は、任意のQNameのフォルトのcatchAllアクティビティを示します。

      <faultName > . . . </faultName>
  4. フォルト・ポリシー・ファイルのactionセクションを定義します。フォルト・ポリシー・ファイルの検証は、デプロイメント時に実施されます。フォルト・ポリシーを変更する場合は、フォルト・ポリシーが含まれているSOAコンポジット・アプリケーションを再デプロイする必要があります。

    表12-6に、フォルト・ポリシー・ファイルのactionセクションの例をいくつか示します。一部のフォルトには、自動リカバリ・アクションを指定できます。再試行と管理者操作を除くすべてのリカバリ・アクションでは、複数のアクションが同時に実行されます。

    表12-6 フォルト・ポリシー・ファイルでのactionセクションの使用

    リカバリ・アクション フォルト・ポリシー・ファイルの構文

    再試行: アクティビティを再試行するために、次のアクションが用意されています。

    • 指定回数の再試行。

    • 再試行から次の再試行までの遅延(秒単位)の指定。

    • 指数バックオフによる再試行間隔の増加。

    • N回の再試行が失敗となった場合の再試行失敗時アクションへのチェーン。

    • 再試行が成功した場合の再試行成功時アクションへのチェーン。

    ノート: 指数バックオフでは、次の再試行が2倍のdelayでスケジュールされいて、このdelayは、現在の再試行間隔を示します。たとえば、現在の再試行間隔が2秒の場合、次の再試行間隔は4秒にスケジュールされ、その次は8秒、16秒と、retryCount値に達するまで増分されます。

    <Action id="ora-retry">
       <Retry>
          <retryCount>3</retryCount>
          <retryInterval>2</retryInterval>
          <exponentialBackoff/>
          <retryFailureAction ref="ora-java"/>
          <retrySuccessAction ref="ora-java"/>
       </Retry>
    </Action>

    次の詳細に注意してください。

    • 再試行に成功した場合、フォルト管理フレームワークは、再試行成功時アクションにチェーンされます。

    • すべての再試行に失敗した場合、フォルト管理フレームワークは、再試行失敗時アクションにチェーンされます。

    管理者操作: 現在のアクティビティの処理が停止します。この場合は、Oracle Enterprise Manager Fusion Middleware Controlに移動して、このインスタンスに対するリカバリ・アクションを手動で実行できます。

    <Action id="ora-human-intervention">
     <humanIntervention/></Action>

    プロセスの終了: プロセスを終了します。

    <Action id="ora-terminate"><abort/></Action>

    Javaコード: 外部Javaクラスを実行できます。

    returnValue: 実装されるJavaクラスは、文字列を戻すメソッドを実装している必要があります。ポリシーは、戻された文字列に基づいて新しいアクションにチェーンできます。

    詳細は、「Javaアクション・フォルト・ポリシーの使用方法」を参照してください。

    <Action id="ora-java">
    <!-- this is user provided custom java
     class-->
    <javaAction className="mypackage.myClass"
     defaultAction="ora-terminate">
       <returnValue value="REPLAY"
        ref="ora-terminate"/>
       <returnValue value="RETRHOW"
        ref="ora-rethrow-fault"/>
       <returnValue value="ABORT"
        ref="ora-terminate"/>
       <returnValue value="RETRY" ref="ora-retry"/>
       <returnValue value="MANUAL"
        ref="ora-human-intervention"/>
    </javaAction>
    </Action>

    フォルトの再スロー: フォルトは、BPELフォルト・ハンドラ(scopeアクティビティ内のcatchアクティビティ)に送信されます。使用可能なハンドラがない場合、そのフォルトは上部に報告されます。

    <Action id="ora-rethrow-fault"><rethrowFault/></Action>

    スコープの再実行: 再実行フォルトが発生します。

    <Action id="ora-replay-scope"><replayScope/></Action>

ノート:

あらかじめシードされているリカバリ・アクションのタグ名(ora-retryora-human-interventionora-terminateなど)は、単なるサンプルです。これらの名前は各自の環境に適した名前に置換できます。

conditionactionおよびalertのセクションが完全に定義されているフォルト・ポリシー・ファイルは、次のようになります。

ノート:

  • フォルト・ポリシー・ファイルの名前は、単一の固有名に限定されているわけではありません。ただし、これらの名前は、fault-policy.xsdスキーマ・ファイルに準拠している必要があります。

  • このフォルト・ポリシー・ファイルは、フォルト名に基づいてフォルトを捕捉する例を示しています。フォルトは、メッセージ・タイプまたはフォルト名(あるいはその両方)に基づいて捕捉することもできます。

    <faultName name="myfault" type="fault:faultType">
<?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="ModifyAndRecover"
               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>
      <!-- Handle remoteFault system exceptions -->
      <faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
 name="bpelx:remoteFault">
        <condition>
        <!--<test>$fault.code="1"</test>-->
          <alert ref = "ora-jms"/> 
          <alert ref = "ora-email"/>
       <action ref="default-human-intervention"/>
        </condition>
      </faultName>
           <faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
 name="bpelx:bindingFault">
        <condition>
          <action ref="default-human-intervention"/>
        </condition>
      </faultName>          </Conditions>
       <Alerts>
          <Alert id="ora-email">
           <email>
             <To>joe.smith@example.com</To>
                 <CC>joe.smith@example.com</CC>
           </email>
          </Alert>
          <Alert id="ora-jms">
        <JMS propertySet="jms-props">
          <Headers>
            <property name="correlationId">myvalue</property>
             <property name="correlationId1">myvalue1</property>
          </Headers>
        </JMS>
      </Alert>
    </Alerts>
    <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="ora-retry-with-human-intervention">
        <retry>
          <retryCount>1</retryCount>
          <retryInterval>2</retryInterval>
          <exponentialBackoff/>
          <retryFailureAction ref="default-terminate"/> 
        </retry>
      </Action>
      </Actions>
      <Properties>
       <propertySet name="jms-props">
         <property name="jmsDestination">MyQueue</property>
         <property
 name="connectionFactory">jms/fabric/ehconnectionfactory</property>
     </propertySet>
     </Properties>
  </faultPolicy>
</faultPolicies>