ビジネス プロセス構築ガイド

     前  次    新しいウィンドウで目次を開く     
ここから内容

例外の処理

ビジネス プロセス例外は、Java ハンドラ メソッドにより捕捉されない Java 例外です。この節では、ビジネス プロセスで例外の処理を行う方法について説明します。内容は以下のとおりです。

 


例外ハンドラのタイプ

デザイン ビューを使用すると、ビジネス プロセス ノード、折り畳み可能なノード グループ、および開始ノード上で例外パスを作成できます。具体的には、デザイン ビューを使用すると、次の例外ハンドラのタイプをビジネス プロセスに作成できます。

一般的に、例外はノードの例外パスから上流に向かって、処理されるまでグループ例外パスへ、またはグローバル例外パスへ伝播します。言い換えると、ノードに関連付けられた例外パスは最初に実行され、グループに関連付けられたパスの実行はその次に、開始ノード (グローバル パス) に関連付けられたパスはその後で実行されます。例外パスが例外を送出しない限り、例外は一度だけ処理され、続いて、例外は同じ順序で再び上流に向かって伝播されます。この動作を利用して、ビジネス プロセスに必要な特定の例外処理を満たす例外パス ロジックを作成できます。詳細については、「例外ハンドラの実行順序」を参照してください。

注意 : グラフィカル設計環境は、次のノードの例外パスの設計をプロセス言語でサポートしたり、表しません : 分岐ノード内の <if> および <default> ブロック、パラレル ノード内の <branch> ブロック、<finish> ノード、<messageEvent><timeoutEvent>、および <onException> パス自体。

 


例外ハンドラ パスの作成

例外ハンドラ パスを、ビジネス プロセスの個々のノード、およびノードのグループと関連付けることができます。開始ノードと関連付けられた例外パスは、特殊なケースです。すなわち、開始ノードと関連付けられた例外パスはビジネス プロセスのグローバル例外ハンドラです。開始ノードの詳細については、「ビジネス プロセスの開始」を参照してください。この節で説明する手順は、以下のとおりです。

例外パスを作成するには
  1. 例外パスを作成したいノードまたはノードのグループを選択します。(ノードをグループ化する方法については、「ビジネス プロセス内のノードのグループ化」を参照)。
  2. ノードまたはノードのグループを右クリックし、ドロップダウン メニューから [例外パスを追加] を選択します。
  3. 図 15-1 に示すように、例外パスがノードまたはノードのグループに追加されます。

    図 15-1 例外パス


    例外パス

    [OnException] をダブルクリックして、新しい名前を入力すると、例外パスの名前を変更できます。プロパティ ビューの [名前] フィールドでも名前を変更できます。

例外パスをコンフィグレーションするには
  1. コンフィグレーションする例外パスを選択します。
  2. [プロパティー] ビューに関連するプロパティが表示されます。[プロパティー] ビューが BEA Workshop for WebLogic Platform に表示されない場合は、BEA Workshop for WebLogic Platform メニュー バーから [ウィンドウArrow symbolビューの表示Arrow symbolプロパティー] を選択します。

  3. [プロパティー] ビューで、次のプロパティをコンフィグレーションします。
general
exception
  1. ビジネス プロセスのノードを例外パスに追加し、必要に応じて例外処理ロジックを定義します。例外を捕捉したときにプロセスを停止する場合は、例外パスに完了ノードを配置します。完了ノードを作成する方法については、「ビジネス プロセスで Finish ノードを作成するには」を参照してください。

デザイン ビューでの例外ハンドラの表示

例外ハンドラ パスを作成すると、デザイン ビューで次のアイコンがノード (またはノードのグループ) の傍に表示され、例外パスが指定したノードに対してアクティブになっていることを示します。

表 15-1 例外パス

明示的なトランザクション

このアイコンはビジネス プロセスの例外パスを表す。この場合は、パスは空白で表示され、例外を処理するロジックがまだ定義されていないことを示す。
例外処理ロジックを定義するには、ビジネス [ノード パレット] からノードをドラッグして例外パスの上にドロップすることにより、ビジネス プロセスを追加する。

例外ハンドラ (またはメッセージあるいはタイム パス) の表示を折り畳むには、例外パス アイコンのグレー矢印をクリックします。次の図は、パスを折りたたんでいるノードに関連付けられたアイコンを示しています。

表 15-2 表示の折りたたみと展開

明示的なトランザクション

デザイン ビューで例外パス アイコンをクリックすると、パスの表示を折りたたんだ状態と展開した状態の間で切り替えることができる。

 


例外ハンドラ パスの削除

例外パスを削除するには
  1. 削除する例外パスが折り畳まれている場合は、展開します。
  2. 例外パスを右クリックし、ドロップダウン メニューから [削除] を選択します。
  3. 例外パスが削除され、デザイン ビューから除去されます。

警告 : 例外パスを削除すると、そのパスに定義したビジネス プロセス ノードも削除されます。例外パスを削除しようとすると、続行する前に削除を承認する必要があることを告げる警告メッセージがダイアログ ボックスに表示されます。

 


例外ハンドラの実行順序

例外が発生すると、通常の実行フローは停止します。ビジネス プロセスは、実行ポイントに一番近い所で定義されている例外ハンドラ パス内のアクティビティを実行します。

一般的には、複数の例外ハンドラをビジネス プロセスに定義します。次のシーケンスは、例外が送出されたときの実行順序を定義します。

  1. ビジネス プロセス エンジンは、例外が発生したノードで例外ハンドラを最初に実行します。
  2. 例外ハンドラ パスが実行を正常に完了した場合は、ビジネス プロセスは、実行後のパラメータ設定に応じて、実行した例外ハンドラに関連付けられたノードの次のノードから実行を再開します。
  3. 例外ハンドラが実行中に例外を送出する場合は、ノードが含まれているノードのグループ上で例外ハンドラにより処理されるか、開始ノードで定義されたグローバル例外ハンドラにより処理されるように、例外が上流に向かって伝播されます。
  4. 注意 : after execute プロパティを [再送出] に設定した場合は、例外自体も上流に向かって伝播されます。
  5. ビジネス プロセスが失敗し、送出された例外を処理するようにコンフィグレーションされた例外ハンドラがない場合、ビジネス プロセスは中止状態に置かれて回復することができません。ただし、ビジネス プロセスが freeze on failure にコンフィグレーションされている場合、ビジネス プロセスは失敗すると最後のコミット ポイントまでロールバックし、状態が永続化されます。プロセスはその後で WebLogic Integration Administration Console から再起動できます。freeze on failure プロパティの詳細については、「ビジネス プロセス プロパティの設定」を参照してください。
注意 : トランザクション ブロック内で例外が発生した場合は、トランザクションはロールバックされ、例外ハンドラは後で呼び出されます。ただし、ビジネス プロセスが、例外ハンドラを後で呼び出す代わりに、freeze on failure に指定されている場合は、プロセスがフリーズし、例外ハンドラが呼び出されることはありません。ここで、トランザクション ブロック内で freeze on failure がコンフィグレーションされている場合は、トランザクション ブロックを使用しないようにするか、トランザクション ブロック内にグローバル トランザクション ロジックを含めないようにする必要があります。8.x では、[2 フェーズ コミットのエミュレート] 付きの [グローバル トランザクションのサポート] はデフォルト設定でしたが、9.2 では、[グローバル トランザクションのサポート] はデフォルトでオフになっているため、非 XA ドライバを使用している場合は、有効にする必要があります。

 


トランザクション ブロックにおける例外の処理

トランザクション内のノードまたはグループが例外を送出した場合は、トランザクションは、例外が処理されなかったかどうか、または例外ハンドラが例外を送出したかどうかだけを調べます。次のアルゴリズムが例外を処理するために使用されます。

注意 : トランザクションを「ロールバックのみ」に指定するかどうかは、ビジネス プロセスで使用するトランザクション リソースのタイプによります。
注意 : エラーが発生した場合に直ちにトランザクションにロールバックを強制するトランザクション リソースの場合は、ノードまたはノードのグループ上の例外ハンドラはトランザクションがロールバックするまで実行しません。ただし、例外ハンドラを補正のための execute on rollback プロパティと共に使用すると、非トランザクション リソースをクリーンアップできます。詳細については、「補正のための例外ハンドラの使用」を参照してください。

 


補正のための例外ハンドラの使用

トランザクション リソースとは、Control Request ノードやトランザクション コントロールによりビジネス プロセスと通信するリソースで、データベース、JMS、アプリケーション ビュー (JCA アダプタがトランザクションの場合)、ワークリスト、タイマー、EJB、メッセージ ブローカ、およびトランスフォーメーションなどがあります。

エラーが発生した場合に直ちにトランザクションにロールバックを強制するトランザクション リソースの場合は、ノードまたはノードのグループ上の例外ハンドラはデフォルトでは実行しません。ただし、ビジネス プロセスの明示的なトランザクション ブロック内に例外パスを配置し、そのパスの execute on rollback プロパティを true に設定すると、例外ハンドラをロールバックが行われる前に強制的に実行させることができます。これにより、例外パスは現在の状態 (プロセス変数など) にアクセスでき、例外パスに追加されたロジックを補正のために使用して、「補正の例」で説明するように、非トランザクション リソースをクリーンアップできます。

クライアント要求ノードについての詳細は、「ビジネス プロセスでの Client Request ノードの作成」を参照してください。

補正の例

図 15-2 に、補正のための例外パスの使用方法を示します。

図 15-2 補正のための例外パス

補正のための例外パス

この例では、2 つのノードが同じトランザクションで実行しています。最初のノードはファイル (非トランザクション) に書き込み、二番目のノードがデータベース (トランザクション) を更新します。.両方のノードは、関連する例外ハンドラを持ったグループ内にあります。例外ハンドラの execute on rollback プロパティを true に設定すると、ロールバックが行われる前に例外ハンドラを強制的に実行できます。

この例では、データベース処理が失敗し、トランザクションが「ロールバックのみ」に指定されている場合は、次の順序でイベントが発生します。

  1. 例外ハンドラはロールバックが行われる前に実行します。
  2. トランザクションのハンドラ パスが実行され、パス上のノードが前に書き込まれたファイルを削除します。
  3. トランザクションがロールバックします。
注意 : 上記の例は暗黙的なトランザクション用です。明示的なトランザクションでの補正にも同じ技法が使用できます。ただし、例外ハンドラ パスを必ず明示的なトランザクション内に配置してください。明示的なトランザクション自体に配置すると、希望する動作が行われません。図 15-3 に、補正ロジックを持った例外ハンドラ パス付きの明示的なトランザクションの例を示します。
図 15-3 明示的なトランザクション

明示的なトランザクション

 


未処理の例外

ビジネス プロセスの例外を処理しないと、例外は次のいずれかでラップされます。

元の例外を取得する必要がある場合は、未処理のプロセス例外上で getCause() を呼び出すことができます。このメソッドの詳細については、『Java 2 Platform, Standard Edition, v 1.4.2 API Specification』の「getCause()」を参照してください。これは次の URL にあります。

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Throwable.html#getCause()

関連トピック

ビジネス プロセス内のノードのグループ化

Perform ノードでのカスタム Java コードの記述

メッセージ パスの追加

タイムアウト パスの追加

トランザクション境界


  ページの先頭       前  次