BEA ホーム | 製品 | デベロッパ・センタ | support | askBEA |
![]() |
![]() |
|
![]() |
e-docs > WebLogic Integration > BPM トピック > BPM ユーザーズ ガイド > カスタム例外ハンドラの使い方 |
BPM ユーザーズ ガイド
|
カスタム例外ハンドラの使い方
注意: Worklist クライアント アプリケーションは WebLogic Integration リリース 7.0 より非推奨となりました。代替機能に関する詳細については、『WebLogic Integration リリース ノート』を参照してください。
この節では、Order Fulfillment ワークフローで使用されるユーザ定義の例外ハンドラの例を示し、Studio の例外処理機能を中心に説明します。この節ではワークフロー内のすべてのノードを概説した後で、以下の方法について説明します。
チュートリアルのこの節では、Order Fulfillment ワークフロー、Create OrderBean と Calculate Total Price ビジネス オペレーション、cancelledorder イベント キーが、ワークフロー オブジェクトのインポート : チュートリアル パッケージ ファイルのインポートの説明に従ってインポート済みであることを前提とします。
Order Fulfillment ワークフローの概要
Order Processing ワークフローから呼び出される Order Fulfillment ワークフローには、受注品の出荷と請求を処理するタスクが含まれています。ワークフロー内の 2 つのタスクは平行して実行する必要があるので、両者は開始ノードに直接結び付けられます。両方のタスクがワークフローの終了前に必ず実行されるようにするため、AND ノードで 2 つのタスクを結合します。
また、ワークフローは、Order Processing Trigger ワークフロー内の元の XML ドキュメントで指定されていた無効な国名の省略形の修正を Worklist ユーザに求めるカスタム例外ハンドラを定義し、呼び出します。
Order Fulfillment ワークフローの詳細を次の図に示します。図中に表示された番号が振られている手順については、図の下の表で説明しています。この表では、実際のプロセスをサンプル ワークフロー内の実際の実装にマップします。
図6-1 Start Order Fulfillment ワークフロー : 詳細表示
例外ハンドラ
すべての WebLogic Integration ワークフローのテンプレート定義には、システム例外ハンドラというデフォルトの例外ハンドラが設定されています。システム例外ハンドラは、アクティブなトランザクションをロールバックのみにマーク付けしたり、例外をクライアントに送出したりすることにより、実行時に発生する例外に応答します。
カスタム例外ハンドラを定義し、ワークフローのアクションを例外発生時に実行させることもできます。カスタム例外ハンドラをコンフィグレーションすると、実行時に発生するすべての例外の検出や、呼び出し EJB に定義済みの特定の例外処理が可能になります。カスタム例外ハンドラを定義するには、アクティブなトランザクションに対して実行されるコミット およびロールバック アクションを指定します (詳細は、例外ハンドラのアクションを参照してください)。
ワークフロー レベルの例外ハンドラは、任意のノード内から呼び出すことができます。例外ハンドラを定義した後で、以下の 2 つのアクションのいずれかを使用して、ノード内から例外ハンドラを起動します。
フォルダ ツリーと、テンプレート定義の [プロパティ] ダイアログ ボックスにある [例外ハンドラ] タブの両方から、例外ハンドラを新規に作成したり既存の例外ハンドラを表示したりできます。
フォルダ ツリーで Order Fulfillment ワークフロー用に定義された例外ハンドラを表示する手順は、次のとおりです。
図6-2 Start Order Fulfillment ワークフロー : 例外ハンドラ
図6-3 [例外ハンドラの使用場所] ダイアログ ボックス
Generate Invoice タスクの表示
最初に、ビジネス オペレーションや Bad Data to OrderBean カスタム例外ハンドラへの呼び出しを含め、Generate Invoice タスクを構成するアクションを見てみましょう。
Generate Invoice タスクのプロパティを表示する手順は、次のとおりです。
図6-4 [Generate Invoice タスク プロパティ] ダイアログ ボックス : [実行時] タブ
[実行時] タブには以下のアクションが表示されます。
Calculate Total Price ビジネス オペレーションの表示
ビジネス オペレーション Calculate Total Price を実行 アクションをダブルクリックして、プロパティを表示します。
図6-5 [ビジネス オペレーションを実行] ダイアログ ボックス : Calculate Total Price アクション
calculate() メソッドは、国または州の売上税を含む合計金額を OrderTotalPrice 変数に返します。 calculate() メソッドに関する詳細は、ビジネス オペレーションのコンフィグレーションを参照してください。 Calculate Total Price ビジネス オペレーションのコンフィグレーションを表示する手順は次のとおりです。
図6-6 [ビジネス オペレーションを定義 ] ダイアログ ボックス : Calculate Total Price アクション
カスタム例外ハンドラの定義 Bad Data to OrderBean 例外ハンドラ
ワークフロー オブジェクトとプロパティで、Order Processing ワークフローをトリガした Neworder XML ドキュメントに含まれる <shiptostate> 値内の POBean に無効なデータのオカレンスが渡される場合をシミュレートしました。そのワークフローでは、ShipToState 変数を不正な値 KK に設定し、それが [Start Order Fulfillment] タスクノードによって Order Fulfillment ワークフローに渡されていました。
Generate Invoice タスクが実行されると、ビジネス オペレーションを実行 アクションは間違った ShipToState 変数の値を入力に使用して、calculate() メソッドを呼び出そうと試みます。POBean の calculate() メソッドは、無効な州データを受け取った場合に BadStateException を送出するため、サーバはカスタム定義の例外ハンドラ Bad Data to OrderBean を呼び出します。
ここで、Bad Data to OrderBean 例外ハンドラと、その中に定義されているアクションを見てみましょう。
Bad Data to OrderBean 例外ハンドラを表示する手順は次のとおりです。
図6-7 [例外ハンドラのプロパティ] ダイアログ ボックス
例外ハンドラのアクション
[コミット時アクション] と [ロールバック時アクション] タブを使用すると、トランザクションのコミット パスやロールバック パスで実行するワークフロー アクションを指定できます。トランザクションがロールバック専用にマークされている場合を除き、ほとんどの場合はトランザクションがコミットされます。この場合、例外ハンドラはロールバック タブで指定されたアクションを実行します。呼び出された EJB メソッドでトランザクションをロールバックのみにマークすることは可能ですが、両方のタイプのアクションを指定することをお勧めします。
[例外ハンドラのプロパティ] ダイアログ ボックスにあるように、Bad Data to OrderBean 例外ハンドラは以下のアクションを定義しています。
例外ハンドラを終了してロールバック−例外ハンドラを停止して、アクティブなトランザクションを例外が送出される前の状態にロールバックし、例外をクライアントに再送出する例外処理アクションです。
条件を評価 アクションの表示
条件を評価 アクションを表示するには、[例外ハンドラのプロパティ] ダイアログ ボックスで、条件を評価 アクションをダブルクリックします。[条件を評価] ダイアログ ボックスが表示されます。
図6-8 [条件を評価] ダイアログ ボックス
条件は次の式で定義されます。 WorkflowAttribute("ExceptionType") = "com.bea.wlpi.tour.po.BadStateException" この場合、この式はワークフロー属性 例外タイプ を使用して、送出された例外が POBean で指定された BadStateException と等しいかどうかをテストします。このような条件を使用することは、特定の例外を検出するように例外ハンドラを設定する場合の一般的な方法です。WorkflowAttribute 関数を使用して、以下に挙げるさまざまな例外の属性によって目的の例外を識別することができます。
ワークフローの関数と属性の全リストについては、『WebLogic Integration Studio ユーザーズ ガイド』の「ワークフローの式を使用する」を参照してください。
条件を評価 アクションは、テスト結果、つまり、式による true または false の評価に従って実行するアクションを指定します。この例では、このアクションは以下のようなアクションを指定します。
XML をクライアントに送信 − calculate() メソッドに渡された無効なデータの修正を Worklist ユーザに求める XML メッセージを Worklist ユーザに送信し、Generate Invoice タスクを再実行する統合アクションです。このアクションについては、XML をクライアントに送信 アクションの表示で詳しく説明します。
ここではアクションの指定はありません。条件によって false となった場合、例外ハンドラが、[例外ハンドラのプロパティ] ダイアログ ボックスで指定された ロールバック アクションを実行します。
XML をクライアントに送信 アクションの表示
XML をクライアントに送信 アクションは、POBean に渡され、BadStateException の発生原因となった誤った不正なデータの修正を求めるメッセージを Worklist ユーザに送信します。次に、[Generate Invoice タスク プロパティ] ダイアログ ボックスの [実行時] タブで指定されたアクションを再実行し、タスクが正常に終了するようにします。
XML をクライアントに送信 アクションを表示するには、[条件を評価] ダイアログ ボックスで、[True] タブを選択し、続いて XML をクライアントに送信 アクションをダブルクリックします。[XML をクライアントに送信] ダイアログ ボックスが表示されます。
図6-9 [Bad Data to OrderBean] 例外ハンドラ : [XML をクライアントに送信] ダイアログ ボックス
この XML をクライアントに送信 アクションでは、ClientSetVarsReq DTD に基づき、XML ドキュメントが Worklist クライアントに送信され、Worklist ユーザが情報を入力するためのフィールドを含むメッセージ ボックスが Worklist によって表示されます。XML ドキュメントは、次のような構造になっています。 コード リスト 6-1 ClientSetVarsReq XML ドキュメントの構造 Worklist クライアントによって表示されるメッセージ ボックスに対応する XML ドキュメント内のタグと値を、次の図に示します。 図6-10 [Error Warning] メッセージ ボックス
<set-variables title="text">
text
<actionid>provided by default </actionid>
<variable name="variable name" prompt="text" />
[<variable name="variable name" prompt="text" />]
</set-variables>
Worklist ユーザからの応答を取り込むために、データは ClientSetVarsResp.dtd に基づいて Worklist クライアントが返した XML ドキュメント、特にリスト6-2 に示す<variable name>属性から抽出されます。 コード リスト 6-2 ClientMsgBoxReq XML ドキュメントの構造 必要な情報を抽出するために、次の XPath 式が定義されます。
<set-variables>
<variable name="variable name" />
[<variable name="variable name" />]
</set-variables>
XPath("/set-variables/variable[@name=¥"ShipToState¥"]/text()")
次に、[XML をクライアントに送信] ダイアログ ボックスの [コールバック変数] タブで、結果が ShipToState 変数に割り当てられます。
最後にコールバック アクションが指定されます。
このアクションは、Worklist ユーザが有効なデータを入力した後で、[Generate Invoice タスク プロパティ] ダイアログ ボックスの [実行時] タブにリストされるすべてのアクションを再実行します(Generate Invoice タスクの表示を参照)。ユーザが無効なデータを入力した場合は、許容できるデータが入力されるまで、メッセージ ボックスが繰り返し表示され、正しく入力するよう求められます。
Generate Invoice タスクの最後のアクションによってタスクの完了がマークされると、ワークフローは AND ノードに進みます。Ship Order タスクが完了とマークされると、ワークフローは終了します。この時点で、ワークフローの実行中に収集された変数値が、Order Processing ワークフローに返されます。
![]() |
![]() |
![]() |
![]() |
||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |