7.26. 例外処理の例


Time-out: EsbActionHandler アクションを使用し、ノードがコールバックを待機している場合は、待機期間を制限できます。これを行うには、ノードにタイマーを追加します。(これは、以下のプロセス定義スニペットで Service1 を設定する方法です。) タイマーは一定期間(この場合は 10 秒)に設定できます。
<node name="Service1">

  <action class=
    "org.jboss.soa.esb.services.jbpm.actionhandlers.EsbActionHandler">
    <esbCategoryName>MockCategory</esbCategoryName>
      <esbServiceName>MockService</esbServiceName>
  </action>
  
  <timer name='timeout' duedate='10 seconds' 
    transition='time-out-transition'/>
  <transition name="ok" to="Service2"></transition>
  <transition name="time-out-transition" to="ExceptionHandling"/>

</node>
Service1 には、2 つの送信移行があります。最初のものは ok です。2 番目のものは time-out-transition です。
通常、call-back はデフォルトの遷移(最初の移行として定義されているため)に問題はありません。ただし、サービスの処理に 10 秒かかると、タイマーが代わりに実行されます。タイマーの transition 属性は time-out-transition に設定されます。つまり、この移行はタイムアウト時に取られます。
処理は ExceptionHandling ノードで終了します。ここから、補正作業を実行できます。
例外移行: exceptionTransition を定義して、処理中のサービス midst で発生した例外を処理できます。これにより、メッセージに faultTo エンドポイント参照が設定されます。つまり、Enterprise Service Bus はこのノードにコールバックします。これは exceptionTransition を通知します。
Service2 には 2 つの送信移行があります。通常、問題の発生時に ok 移行が行われます。名前が示すように、処理中に 例外 を出力するため、サービスがあるときに例外が発生します。
<node name="Service2">
  <action class=
  "org.jboss.soa.esb.services.jbpm.actionhandlers.EsbActionHandler">
     <esbCategoryName>MockCategory</esbCategoryName>
     <esbServiceName>MockService</esbServiceName>
     <exceptionTransition>exception</exceptionTransition>
   </action>
   <transition name="ok" to="Service3"></transition>
   <transition name="exception" to="ExceptionHandling"/>
</node>
Service2 の前述の定義では、アクションの exceptionTransitionexception に設定されています。このシナリオでは、プロセス自体は ExceptionHandling ノードでも終了します。
例外の決定: Service3 の設定と、それに続く exceptionDecision ノードを確認します。Service3 プロセスは通常の結論に処理され、そのノードから移行は予想通りに行われます。
ただし、サービスの実行中に errorCode が設定され、exceptionDecision ノードは、ここで同じ名前の変数が呼び出されたかどうかを確認します。
<node name="Service3">
  <action class=
  "org.jboss.soa.esb.services.jbpm.actionhandlers.EsbActionHandler">
     <esbCategoryName>MockCategory</esbCategoryName>
     <esbServiceName>MockService</esbServiceName>
     <esbToBpmVars>
        <mapping esb="SomeExceptionCode" bpm="errorCode"/>
     </esbToBpmVars>
  </action>
  <transition name="ok" to="exceptionDecision"></transition>
</node>
   
<decision name="exceptionDecision">
   <transition name="ok" to="end"></transition>
   <transition name="exceptionCondition" to="ExceptionHandling">
      <condition>#{ errorCode!=void }</condition>
   </transition>
</decision>
esbToBpmVars マッピング要素は、メッセージのボディーから SomeExceptionCode を呼び出し、JBPM コンテキスト で設定します。(これは SomeExceptionCode が設定されていることを前提としています。)
exceptionDecision という名前の次のノードでは、処理が正常であれば ok 移行が実行されますが、JBPM コンテキストで errorCode という変数が見つかると、代わりに exceptionCondition 遷移が取得されます。
このようにシステムを設定するには、JBPM の デシジョンノード 機能を使用する必要があります。条件内で複数の移行をネスト化できます。
<condition>#{ errorCode!=void }</condition>
注記
条件移行の詳細は、 JBPM Reference Guide を参照してください。

Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat
トップに戻る