BEA ホーム | 製品 | デベロッパ・センタ | support | askBEA |
![]() |
![]() |
|
![]() |
e-docs > WebLogic Integration > BPM トピック > WebLogic Integration Studio ユーザーズ ガイド > ワークフロー例外の処理 |
WebLogic Integration Studio ユーザーズ ガイド
|
ワークフロー例外の処理
この章では、内部および外部的に発生したワークフロー例外条件を処理する方法について説明します。
ワークフローの例外処理
ワークフローの例外処理機能により、実行時に内部的および外部的に発生する例外条件に対し、定義、トラップ、および対処ができます。例外には、ユーザがワークフロー内で対象とする特定の異常な条件、またはトラップし対処する代表的な実行時のサーバ例外があります。
WebLogic Integration 内の例外処理は、タスク レベルではなく、ワークフロー レベルで行われます。すべてのワークフロー テンプレート定義には、少なくとも 1 つの例外ハンドラ、すなわちシステム例外ハンドラがあります。システム例外ハンドラは、デフォルトによる初期例外ハンドラで、例外が発生するたびに呼び出されます。例外は、ワークフロー内から特定の例外ハンドラが呼び出される前に発生する可能性があるため、初期例外ハンドラのコンセプトが必要になります。たとえば、開始ノードで変数を初期化する間に例外が発生することがあります。この場合、システム例外ハンドラは、アクティブなトランザクションにロールバックのみというマークを付けること、およびクライアントに対して例外を再送出することで、例外に応答します。
ワークフローの例外処理機能により、例外に対応して実行するアクションを指定するカスタマイズされた例外ハンドラを、定義できます。例外ハンドラは、コミットとロールバック処理のパスを持ちます。ユーザは、これらのパスのそれぞれで実行するワークフロー内の所定のアクションを指定します。例外が発生した際に、現在アクティブなトランザクションのロールバックのみがマークされた場合、例外ハンドラはそのトランザクションに対するロールバック処理パスを実行します。トランザクションに対してロールバックのみのマークが付けられていない場合、例外ハンドラはそのコミット パスを実行します。ワークフローのトランザクション モデルについては、『BPM クライアント アプリケーション プログラミング ガイド』の「BPM トランザクション プログラミング モデル」を参照してください。
また、キャッチしたい特定の例外を、型、重大度、テキスト、その他の基準別に識別するために、ワークフローの関数を条件付きの式で使用することができます。詳細については、実行時のワークフロー データを収集するを参照してください。
カスタム例外ハンドラとそのアクションは、一度定義すれば、以下の 3 つの方法で呼び出すことができます。
例外ハンドラ定義タスクの概要
例外ハンドラは、例外が発生したトランザクションのコミット/ロールバック パスで各種のアクションを指定できるワークフロー内のサブワークフローのようなものです。例外ハンドラは一般的な例外の発生に対応でき、また例外ハンドラは、トラップする特定の例外を指定するために条件を用いることもできます。ワークフロー内でカスタム例外ハンドラを使用するには、以下を行う必要があります。
注意: 例外ハンドラやそれを参照するアクションの定義を始める前に、ワークフロー式の言語や Studio の Expression Builder や XPath Wizard についての学習も必要です。例外ハンドラの呼び出しアクションでの XML ドキュメントの構成や、例外ハンドラでの変数の初期化など、この節で説明するタスクの多くを行うには、ダイアログ ボックスのフィールドに式を入力する必要があります。ワークフロー式の詳細については、ワークフロー式の使用法を参照してください。
例外ハンドラの定義
例外ハンドラ定義機能を使用して、カスタム例外ハンドラを定義します。例外ハンドラを定義しない場合は、デフォルトでシステム例外ハンドラが使用されます。
カスタム例外ハンドラは、初期例外ハンドラとして設定できます。つまり、ワークフローがインスタンス化されるとその例外ハンドラがすぐにアクティブになります。テンプレート定義では、例外ハンドラを設定アクションを用いて、ワークフローの開設時にアクティブな例外ハンドラを変更できます(ワークフロー例外ハンドラを設定するを参照)。
現在のテンプレート定義に対して定義されたカスタム例外ハンドラは、[例外ハンドラ] フォルダの下のフォルダ ツリーに表示され、また [テンプレート定義] のプロパティ ダイアログ ボックスに表示されます。
図9-1 [テンプレート定義のプロパティ] ダイアログ ボックス : [例外ハンドラ] タブ
カスタム例外ハンドラを定義する際、コミットおよびロールバックの両方の例外条件で実行するアクションを指定できます。コミット パスの場合、すべてのワークフロー アクションを実行できます。ロールバック パスの場合は、次のアクションのみを実行できます。XML イベントをポスト、プログラムの呼び出し、ビジネス オペレーションを実行、例外ハンドラを編集、処理なし、および監査エントリを作成。アクションの詳細については、アクションの定義を参照してください。 注意: 一部の Enterprise Java Beans (EJB) は、UserTransaction メソッドを呼び出してトランザクションにロールバックのみのマークを付けることができ、またコンテナ境界で非検査の例外を返すことができます。これら 2 つのケースのいずれの場合も、WebLogic Server はトランザクションをロールバックします。 また、ワークフロー変数を定義することによって、例外ハンドラの呼び出しアクション内で定義された XML メッセージの値を取り込むこともできます。詳細については、例外ハンドラを呼び出すを参照してください。 カスタム例外ハンドラを作成する ワークフロー テンプレートの定義用に例外ハンドラを作成する手順は、次のとおりです。
例外ハンドラを終了する
例外ハンドラを終了するには、[例外ハンドラのプロパティ] ダイアログ ボックスからのみ指定できる [例外ハンドラを編集] アクションを使用します(詳細は、例外ハンドラの定義を参照)。このアクションを [例外ハンドラ] の [コミット時アクション] タブまたは [ロールバック時アクション] タブに必ず追加して、メイン フローに制御を返すことができるようにしてください。
[ロールバック] パスで使用可能な終了オプションは、[ロールバック] だけです。Commit パスでは、以下の 4 つのオプションから選択できます。
注意: 一部の Enterprise Java Beans (EJB) は、UserTransaction メソッドを呼び出してトランザクションにロールバックのみのマークを付けることができ、またコンテナ境界で非検査の例外を返すことができます。これら 2 つのケースのいずれの場合も、WebLogic Server はトランザクションをロールバックします。
図9-3 [例外ハンドラを編集]
カスタム例外ハンドラを更新する
例外ハンドラの用途を表示する
例外ハンドラがワークフロー内で参照する場所を閲覧する手順は、次のとおりです。
図9-4 [例外ハンドラの使用場所] ダイアログ ボックス
カスタム例外ハンドラを削除する
一度定義しておけば、例外ハンドラは例外ハンドラの呼び出しアクションまたはワークフロー例外ハンドラを設定アクションで参照しない場合にのみ削除されます(例外ハンドラを呼び出すを参照)。例外ハンドラが参照する場所のリストを閲覧する場合は、例外ハンドラの用途を表示するの手順に従います。
例外ハンドラを削除する手順は、次のとおりです。
ワークフローからの例外ハンドラの呼び出し
ワークフローから例外ハンドラを呼び出すには、以下の例外処理アクションを用います。
ワークフロー例外ハンドラを設定する
指定した例外ハンドラを、ワークフロー テンプレート定義でアクティブな例外ハンドラにするには、ワークフロー例外ハンドラを設定アクションを使用します。このアクションをワークフロー テンプレート定義内で使わず、かつ初期の例外ハンドラとして定義しマーク付けした例外ハンドラが他に存在しない場合、システムの例外ハンドラがデフォルトで使用され、例外が発生するたびに呼び出されます。
ワークフローに設定した例外ハンドラは、後続の [ワークフロー例外ハンドラを設定] アクションを使用してその例外ハンドラをシステム ハンドラまたは別のカスタム定義ハンドラにリセットするまで、ワークフローのインスタンス全体を通して持続します。
図9-5 [ワークフロー例外ハンドラを設定]
ワークフロー例外ハンドラをカスタム ハンドラに設定する手順は、次のとおりです。
例外ハンドラを呼び出す
特定の例外ハンドラをワークフロー内で呼び出し、また必要に応じて、ユーザが定義した XML ドキュメントを例外ハンドラに送信するには、例外ハンドラの呼び出しアクションを使用します。XML ドキュメントを使うと、例外ハンドラを呼び出したときに変数入力に使用する値を送信できます。(詳細は、例外ハンドラの定義を参照)。
しかし、このアクションによって、アクティブに設定されている例外ハンドラがオーバーライドされることはありません。例外が発生しても、引き続きその例外ハンドラによって処理されます。さらに、例外ハンドラの呼び出しアクションの実行時には、例外が発生したかどうかに関係なく、例外ハンドラで定義したアクションが実行されます。したがって、一般的にこのアクションは、ワークフローそのものの中から例外が送出されている結果、例外ハンドラで定義したアクションを呼び出したいという条件の下で使用します。このアクションは、ビジネス オペレーションによって送出された例外を処理するものではありません。
また、このアクションは XML ドキュメントを選択した任意の例外ハンドラに単に送信する場合にも使用できます。
図9-6 [例外ハンドラの呼び出し] ダイアログ ボックス
システム エラー メッセージ
実行時のワークフロー データを収集するで説明したように、例外ハンドラが以下の情報を問い合わせできるように、4 つの属性を指定して WorkflowAttribute() 関数を使用することができます。
次の表に、ワークフロー エラー メッセージを番号と本文別に一覧で示します。
![]() |
![]() |
![]() |
![]() |
||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |