BEA ホーム | 製品 | デベロッパ・センタ | support | askBEA
 ドキュメントのダウンロード   サイト マップ   用語集 
検索

WebLogic Integration Studio ユーザーズ ガイド

 前 次 目次 索引 PDFで表示  

ワークフロー例外の処理

この章では、内部および外部的に発生したワークフロー例外条件を処理する方法について説明します。

 


ワークフローの例外処理

ワークフローの例外処理機能により、実行時に内部的および外部的に発生する例外条件に対し、定義、トラップ、および対処ができます。例外には、ユーザがワークフロー内で対象とする特定の異常な条件、またはトラップし対処する代表的な実行時のサーバ例外があります。

WebLogic Integration 内の例外処理は、タスク レベルではなく、ワークフロー レベルで行われます。すべてのワークフロー テンプレート定義には、少なくとも 1 つの例外ハンドラ、すなわちシステム例外ハンドラがあります。システム例外ハンドラは、デフォルトによる初期例外ハンドラで、例外が発生するたびに呼び出されます。例外は、ワークフロー内から特定の例外ハンドラが呼び出される前に発生する可能性があるため、初期例外ハンドラのコンセプトが必要になります。たとえば、開始ノードで変数を初期化する間に例外が発生することがあります。この場合、システム例外ハンドラは、アクティブなトランザクションにロールバックのみというマークを付けること、およびクライアントに対して例外を再送出することで、例外に応答します。

ワークフローの例外処理機能により、例外に対応して実行するアクションを指定するカスタマイズされた例外ハンドラを、定義できます。例外ハンドラは、コミットとロールバック処理のパスを持ちます。ユーザは、これらのパスのそれぞれで実行するワークフロー内の所定のアクションを指定します。例外が発生した際に、現在アクティブなトランザクションのロールバックのみがマークされた場合、例外ハンドラはそのトランザクションに対するロールバック処理パスを実行します。トランザクションに対してロールバックのみのマークが付けられていない場合、例外ハンドラはそのコミット パスを実行します。ワークフローのトランザクション モデルについては、『BPM クライアント アプリケーション プログラミング ガイド』の「BPM トランザクション プログラミング モデル」を参照してください。

また、キャッチしたい特定の例外を、型、重大度、テキスト、その他の基準別に識別するために、ワークフローの関数を条件付きの式で使用することができます。詳細については、実行時のワークフロー データを収集するを参照してください。

カスタム例外ハンドラとそのアクションは、一度定義すれば、以下の 3 つの方法で呼び出すことができます。

 


例外ハンドラ定義タスクの概要

例外ハンドラは、例外が発生したトランザクションのコミット/ロールバック パスで各種のアクションを指定できるワークフロー内のサブワークフローのようなものです。例外ハンドラは一般的な例外の発生に対応でき、また例外ハンドラは、トラップする特定の例外を指定するために条件を用いることもできます。ワークフロー内でカスタム例外ハンドラを使用するには、以下を行う必要があります。

注意: 例外ハンドラやそれを参照するアクションの定義を始める前に、ワークフロー式の言語や Studio の Expression Builder や XPath Wizard についての学習も必要です。例外ハンドラの呼び出しアクションでの XML ドキュメントの構成や、例外ハンドラでの変数の初期化など、この節で説明するタスクの多くを行うには、ダイアログ ボックスのフィールドに式を入力する必要があります。ワークフロー式の詳細については、ワークフロー式の使用法を参照してください。

  1. 例外ハンドラを作成し、次に必要に応じて、それを初期例外ハンドラとして設定します。手順の詳細は、カスタム例外ハンドラを作成するを参照してください。

  2. 例外ハンドラにアクションを追加します。アクションの詳細については、アクションの定義を参照してください。

  3. 終了メソッドを例外ハンドラに追加します。手順の詳細は、例外ハンドラを終了するを参照してください。

  4. 例外ハンドラを呼び出すワークフロー ノードに、アクションを追加します。手順の詳細は、ワークフローからの例外ハンドラの呼び出しを参照してください。

 


例外ハンドラの定義

例外ハンドラ定義機能を使用して、カスタム例外ハンドラを定義します。例外ハンドラを定義しない場合は、デフォルトでシステム例外ハンドラが使用されます。

カスタム例外ハンドラは、初期例外ハンドラとして設定できます。つまり、ワークフローがインスタンス化されるとその例外ハンドラがすぐにアクティブになります。テンプレート定義では、例外ハンドラを設定アクションを用いて、ワークフローの開設時にアクティブな例外ハンドラを変更できます(ワークフロー例外ハンドラを設定するを参照)。

現在のテンプレート定義に対して定義されたカスタム例外ハンドラは、[例外ハンドラ] フォルダの下のフォルダ ツリーに表示され、また [テンプレート定義] のプロパティ ダイアログ ボックスに表示されます。

図9-1 [テンプレート定義のプロパティ] ダイアログ ボックス : [例外ハンドラ] タブ


 

カスタム例外ハンドラを定義する際、コミットおよびロールバックの両方の例外条件で実行するアクションを指定できます。コミット パスの場合、すべてのワークフロー アクションを実行できます。ロールバック パスの場合は、次のアクションのみを実行できます。XML イベントをポスト、プログラムの呼び出し、ビジネス オペレーションを実行、例外ハンドラを編集、処理なし、および監査エントリを作成。アクションの詳細については、アクションの定義を参照してください。

注意: 一部の Enterprise Java Beans (EJB) は、UserTransaction メソッドを呼び出してトランザクションにロールバックのみのマークを付けることができ、またコンテナ境界で非検査の例外を返すことができます。これら 2 つのケースのいずれの場合も、WebLogic Server はトランザクションをロールバックします。

また、ワークフロー変数を定義することによって、例外ハンドラの呼び出しアクション内で定義された XML メッセージの値を取り込むこともできます。詳細については、例外ハンドラを呼び出すを参照してください。

カスタム例外ハンドラを作成する

ワークフロー テンプレートの定義用に例外ハンドラを作成する手順は、次のとおりです。

  1. 以下のいずれか 1 つを実行します。

    [例外ハンドラのプロパティ] ダイアログ ボックスが表示されます。

    図9-2 [例外ハンドラのプロパティ] ダイアログ ボックス


     

  2. [名前] フィールドに、新しい例外ハンドラ用に有意で簡単に識別可能な名前を入力します。

  3. (省略可能) [初期例外ハンドラ] チェックボックスを選択して、例外ハンドラをワークフロー内でデフォルトの初期例外ハンドラとしてマークを付けます。ワークフローが例外を検出すると、この例外ハンドラが最初に呼び出される。

  4. (省略可能) [変数] タブで [追加] をクリックして、[ワークフロー変数の割り当て] ダイアログ ボックスを表示します。このダイアログ ボックスは、実行時に評価する式を変数の値として指定することにより、ワークフロー内で作成した変数を初期化するために使用できます。

  5. [変数] ドロップダウン リストで、受信するデータを格納する変数を選択します。

  6. 以下のいずれかを実行して、実行時に評価して変数の値を生成する式を [式] フィールドに入力します。

  7. [OK] をクリックします。変数の初期化内容が、[例外ハンドラのプロパティ] ダイアログ ボックスの [変数] タブのリストに表示されます。

  8. 初期化するすべての変数に対し、手順 4 から 7 を繰り返します。

  9. [コミット時アクション] タブで、[追加]、[更新] または [削除] ボタンを使用して、現在アクティブなトランザクションのマークがロールバック専用として付けられていない場合に実行するアクションを指定します。アクションの実行に関する説明は、アクションの定義を参照してください。

  10. [ロールバック時アクション] タブで、現在アクティブなトランザクションがロールバック専用にプログラムでマークが付けられている場合に実行するアクションの追加、更新、または削除を指定します。ワークフローは、現在アクティブなトランザクションの先頭にロールバックされます。

  11. [コミット時アクション] または [ロールバック時アクション] タブで、プログラムの制御をメイン ワークフローに戻すために、[例外ハンドラを編集] アクションを追加します。詳細については、例外ハンドラを終了するを参照してください。

  12. [OK] をクリックすると、カスタム例外ハンドラが追加されます。すると新しい例外ハンドラがテンプレート定義の [プロパティ] ダイアログ ボックスの [例外ハンドラ] タブに表示され、またフォルダ ツリーの [例外ハンドラ] フォルダの下に表示されます。

例外ハンドラを終了する

例外ハンドラを終了するには、[例外ハンドラのプロパティ] ダイアログ ボックスからのみ指定できる [例外ハンドラを編集] アクションを使用します(詳細は、例外ハンドラの定義を参照)。このアクションを [例外ハンドラ] の [コミット時アクション] タブまたは [ロールバック時アクション] タブに必ず追加して、メイン フローに制御を返すことができるようにしてください。

[ロールバック] パスで使用可能な終了オプションは、[ロールバック] だけです。Commit パスでは、以下の 4 つのオプションから選択できます。

注意: 一部の Enterprise Java Beans (EJB) は、UserTransaction メソッドを呼び出してトランザクションにロールバックのみのマークを付けることができ、またコンテナ境界で非検査の例外を返すことができます。これら 2 つのケースのいずれの場合も、WebLogic Server はトランザクションをロールバックします。

図9-3 [例外ハンドラを編集]


 

例外ハンドラを終了する手順は、次のとおりです。

  1. [例外ハンドラのプロパティ] ダイアログ ボックスから、[アクションを追加] ダイアログ ボックスを呼び出し、[例外処理アクション] フォルダを展開し、[例外ハンドラを編集] を選択し、[OK] をクリックして [例外ハンドラを編集] ダイアログ ボックスを表示します。

    [ロールバック時アクション] タブにアクションを追加する場合、選択可能なオプションは [ロールバック] に限られます。[コミット時アクション] タブにアクションを追加する場合は、[メソッドを終了] オプションの 1 つを選択します。

  2. [OK] をクリックするとアクションが追加されます。

カスタム例外ハンドラを更新する

  1. 以下のいずれか 1 つを行い、[例外ハンドラのプロパティ] ダイアログ ボックスを表示します。

  2. 例外ハンドラに対して必要な変更を行います。

  3. [OK] をクリックして変更を保存します。

例外ハンドラの用途を表示する

例外ハンドラがワークフロー内で参照する場所を閲覧する手順は、次のとおりです。

  1. フォルダー ツリーで、例外ハンドラのフォルダを右クリックし、ポップアップ メニューから [使用場所] を選択して [例外ハンドラの使用場所] ダイアログ ボックスを表示します。このダイアログ ボックスには、選択した例外ハンドラが参照するワークフロー内の場所が一覧で示されます。

    図9-4 [例外ハンドラの使用場所] ダイアログ ボックス


     

  2. (省略可能)ダイアログ ボックスの以下のボタンを用いて以下の操作を行います。

  3. [OK] をクリックします。[例外ハンドラの使用場所] ダイアログ ボックスを終了します。

カスタム例外ハンドラを削除する

一度定義しておけば、例外ハンドラは例外ハンドラの呼び出しアクションまたはワークフロー例外ハンドラを設定アクションで参照しない場合にのみ削除されます(例外ハンドラを呼び出すを参照)。例外ハンドラが参照する場所のリストを閲覧する場合は、例外ハンドラの用途を表示するの手順に従います。

例外ハンドラを削除する手順は、次のとおりです。

  1. 以下のいずれか 1 つを実行します。

  2. メッセージが表示されたら削除の操作を確認します。

 


ワークフローからの例外ハンドラの呼び出し

ワークフローから例外ハンドラを呼び出すには、以下の例外処理アクションを用います。

ワークフロー例外ハンドラを設定する

指定した例外ハンドラを、ワークフロー テンプレート定義でアクティブな例外ハンドラにするには、ワークフロー例外ハンドラを設定アクションを使用します。このアクションをワークフロー テンプレート定義内で使わず、かつ初期の例外ハンドラとして定義しマーク付けした例外ハンドラが他に存在しない場合、システムの例外ハンドラがデフォルトで使用され、例外が発生するたびに呼び出されます。

ワークフローに設定した例外ハンドラは、後続の [ワークフロー例外ハンドラを設定] アクションを使用してその例外ハンドラをシステム ハンドラまたは別のカスタム定義ハンドラにリセットするまで、ワークフローのインスタンス全体を通して持続します。

図9-5 [ワークフロー例外ハンドラを設定]


 

ワークフロー例外ハンドラをカスタム ハンドラに設定する手順は、次のとおりです。

  1. [アクションを追加] ダイアログ ボックスから [例外処理アクション] フォルダを展開し、[ワークフロー例外ハンドラを設定] を選択し、[OK] をクリックして [ワークフロー例外ハンドラを設定] ダイアログ ボックスを表示します。

  2. [例外ハンドラ] ドロップダウン リストから、以下のいずれか 1 つを行います。

  3. [OK] をクリックするとアクションが追加されます。

例外ハンドラを呼び出す

特定の例外ハンドラをワークフロー内で呼び出し、また必要に応じて、ユーザが定義した XML ドキュメントを例外ハンドラに送信するには、例外ハンドラの呼び出しアクションを使用します。XML ドキュメントを使うと、例外ハンドラを呼び出したときに変数入力に使用する値を送信できます。(詳細は、例外ハンドラの定義を参照)。

しかし、このアクションによって、アクティブに設定されている例外ハンドラがオーバーライドされることはありません。例外が発生しても、引き続きその例外ハンドラによって処理されます。さらに、例外ハンドラの呼び出しアクションの実行時には、例外が発生したかどうかに関係なく、例外ハンドラで定義したアクションが実行されます。したがって、一般的にこのアクションは、ワークフローそのものの中から例外が送出されている結果、例外ハンドラで定義したアクションを呼び出したいという条件の下で使用します。このアクションは、ビジネス オペレーションによって送出された例外を処理するものではありません。

また、このアクションは XML ドキュメントを選択した任意の例外ハンドラに単に送信する場合にも使用できます。

図9-6 [例外ハンドラの呼び出し] ダイアログ ボックス


 

カスタム例外ハンドラを呼び出す手順は、次のとおりです。

  1. [アクションを追加] ダイアログ ボックスから [例外処理アクション] フォルダを展開し、[例外ハンドラの呼び出し] を選択し、[OK] をクリックして [例外ハンドラの呼び出し] ダイアログ ボックスを表示します。

  2. [例外ハンドラ] ドロップダウン リストから、以下のいずれか 1 つを行います。

  3. (省略可能)例外ハンドラの呼び出し時にイベント プロセッサに送信する XML ドキュメントを定義します。XML ドキュメント構造を指定するには以下のいずれかを行います。

    上記のオプションの詳細な手順については、XML ドキュメントの作成と編集を参照してください。

    ユーザ定義の XML ドキュメントは、ワークフロー テンプレート定義内に保存される。

  4. [OK] をクリックするとアクションが追加されます。

 


システム エラー メッセージ

実行時のワークフロー データを収集するで説明したように、例外ハンドラが以下の情報を問い合わせできるように、4 つの属性を指定して WorkflowAttribute() 関数を使用することができます。

次の表に、ワークフロー エラー メッセージを番号と本文別に一覧で示します。

表9-1 ワークフロー エラー メッセージ

エラー番号

エラー メッセージ本文

0

不明なエラー

1

システム エラー

2

ワークフロー エラー

3

ワークフロー警告

4

ネスとされた例外

5

サーバではリクエストを完了できませんでした。

6

サーバではリクエストを完了できませんでした。

7

ワークフローは完了しているので、変更できません。

8

このタスクのプロパティでは、タスクに完了マークを付けられません。

9

このタスクのプロパティでは、タスクのk何両マークを外せません。

10

このタスクのプロパティでは、タスクを再割り当てできません。

11

このタスクのプロパティでは、タスクを変更できません。

12

このタスクはすでに完了しているので、取得できません。

13

このタスクはすでに完了しているので、割り当てられません。

14

このタスクはすでに完了しているので、実行できません。

15

このタスクは非アクティブなので、実行できません。

16

ワークフローが完了しているので、このタスクを実行できません。

17

このタスクは割り当てられていないので、実行できません。

18

ルート変更の送り元と送り先は異なっている必要があります。

19

有効日は、期日以前とする必要があります。

20

ソース ユーザは、指定の期間中にすでにルート変更されています。

21

このルート変更で循環的な参照がされます。

22

タスク名はワークフロー内で一意である必要があります。

23

指定したオーガニゼーション "{0}" はすでに定義されています。

24

ロール名はオーガニゼーション内で一意である必要があります。

25

指定したユーザ "{0}" はすでに定義されています。

26

レポート名は一意である必要があります。

27

変数名は一意である必要があります。

28

ワークフロー テンプレート名は一意である必要があります。

29

作業負荷グラフ名は一意である必要があります。

30

ビジネス カレンダー "{0}" はすでに定義されています。

31

ユーザ "{0}" は現在ログオンされており、削除できません。

32

ユーザ "{0}" に割り当てられているタスクがあるため、このユーザを削除することはできません。先にすべてのタスクの再割り当てを行ってください。

33

ユーザを管理するパーミッションが付与されていません。

34

ロールを管理するパーミッションが付与されていません。

35

オーガニゼーションを管理するパーミッションが付与されていません。

36

ワークフローを定義するパーミッションが付与されていません。

37

ワークフローを監視するパーミッションが付与されていません。

38

タスクのルート変更を行うパーミッションが付与されていません。

39

サーバのコンフィグレーションを変更するパーミッションが付与されていません。

40

変数 "{0}" は ID 式またはトリガ定義によって参照されているので、削除できません。

41

変数 "{0}" は、1 つ以上のアクションによって参照されているので、削除できません。

42

変数 "{0}" は、1 つ以上の決定によって参照されているので、削除できません。

43

変数名は空白にできません。

44

ロール "{0}" に割り当てられているタスクがあるため、このロールを削除することはできません。先にすべてのタスクの再割り当てを行ってください。

45

ワークフロー "{0}" は、1 つ以上のアクションによって参照されているので、削除できません。

46

タスク "{0}" は、1 つ以上のアクションによって参照されているので、削除できません。

47

ロール "{0}" は、1 つ以上のアクションによって参照されているので、削除できません。

48

ユーザ "{0}" は、1 つ以上のアクションによって参照されているので、削除できません。

49

このワークフローはサスペンドされているので、変更できません。

50

ビジネス カレンダーのテンプレート ルールを削除できません。

51

式の中でビジネス カレンダー ID が指定されていません。

52

カレンダーの XML が定義されていません。

53

指定したビジネス カレンダー "{0}" が見つかりませんでした。

54

ビジネス カレンダー "{0}" で {1} 年のルールが定義されていません。

55

ビジネス カレンダー "{0}" のプロセッサが見つかりませんでした。

56

{0}, {1}: ビジネス カレンダー ルールに予期しないトークン "{2}" があります。

57

{0}, {1}: ビジネス カレンダー ルールに予期しない文字 "{2}" があります。

58

タイムゾーン識別子 "{0}" が無効です。

59

EJB ホーム環境が設定されていません。

61

初期コンテキストを取得できません。環境が無効である可能性があります : {0}

62

型 "{0}" のホーム インタフェースのクラス オブジェクトをロードできません。{1}

63

型 "{0}" のリモート インタフェースのクラス オブジェクトをロードできません。{1}

64

指定したコンテキストで "{0}" にバインドされたオブジェクトがありません。{1}

65

"{0}" にバインドされたオブジェクトが、ホーム インタフェース "{1}" を実装していません。

66

オブジェクト "{0}" にホーム メソッド "{1}" が含まれていません。{2}

67

オブジェクト "{0}" にリモート メソッド "{1}" が含まれていません。{2}

68

ビジネス オペレーションにより、不明なクラス "{0}" のオブジェクトが返されました。{1}

69

リモート オブジェクトが見つかりませんでした。

70

EJB "{0}" メソッドの呼び出しが失敗しました。{1}

71

"{0}" オブジェクトのメソッドにより、予期しない型 "{1}" の値が返されました。

72

メソッドに対するパラメータの数が違います。予想していたのは {1} 個でしたが、見つかったのは {2} 個でした。

73

型 "{1}" のパラメータ {0} に対するクラス(プリミティブの場合はラップされている)をロードできませんでした。{2}

74

型 "{1}" のパラメータ {0} に対するクラス(プリミティブの場合はラップされていない)をロードできませんでした。{2}

75

パラメータ {0} の値を要求された型 "{1}" にキャストできません。

76

ホーム メソッドがセッション Bean を返しませんでした。

77

指定したワークフロー テンプレート(ID={0})が見つかりませんでした。

78

指定したワークフロー テンプレート定義(ID={0})が見つかりませんでした。

79

開始すべきアクティブかつ有効なテンプレート定義が見つかりませんでした。

80

第 {0} 行、第 {1} 列に XML 構文エラーがあります。

81

"{0}" のクラス オブジェクトをロードできません。{1}

82

"{0}" で一致するコンストラクタが見つかりませんでした。{1}

83

新しい "{0}" を作成できませんでした。{1}

84

"{0}" で "{1}" に一致するメソッドが見つかりませんでした。{2}

85

"{0}" メソッドの呼び出しが失敗しました。{1}

86

ワークフロー テンプレートは現在、{0} によってロックされています。

87

間隔の「開始」日が無効です。

88

間隔の「終了」日が無効です。

89

日付 "{0}" は無効です。

90

月名 "{0}" は無効です。

91

曜日名 "{0}" は無効です。

92

指定したタスク インスタンス "{0}" が見つかりませんでした。

93

必須の入力変数 "{0}" が指定されていません。

94

指定した結合インスタンス "{0}" が見つかりませんでした。

95

指定した変数インスタンス "{0}" が見つかりませんでした。

96

指定したオーガニゼーション "{0}" が見つかりませんでした。

97

指定したロール "{0}" が見つかりませんでした。

98

指定したユーザ "{0}" が見つかりませんでした。

99

ユーザ "{0}" はオーガニゼーション "{1}" に所属していません。.

100

ユーザ "{0}" をオーガニゼーション "{1}" に追加できませんでした。

101

ユーザ "{0}" をロール "{1}" に追加できませんでした。

102

ユーザ "{0}" をオーガニゼーション "{1}" から削除できませんでした。

103

ユーザ "{0}" をロール "{1}" から削除できませんでした。

104

指定したユーザ "{0}" は、ロール"{1}" の定義が行われているオーガニゼーションには所属していません。

105

サーバにセキュリティ レルムがインストールされていません。

106

インストールされているセキュリティ レルム "{0}" はリストできません。

107

セキュリティ レルム "{0}" は管理できません。

108

データベースに接続できません。

109

ロール "{0}" にはメンバーが含まれていません。

110

準備エラー : 参照 "{0}" が無効です。

111

感覚の単位 "{0}" が無効です。

112

変数値の割り当てが不正です。型 "{1}" の変数 "{0}" に値の型 "{2}" を割り当ててみてください。

113

テンプレート定義が非アクティブであるため、ワークフローをインスタンス化できません。

114

対象タスク "{0}" が見つかりませんでした。

115

対象イベント "{0}" が見つかりませんでした。

116

対象アクション "{0}" が見つかりませんでした。

117

指定したビジネス オペレーション "{0}" が見つかりませんでした。

118

引数 "{1}" を有するプログラム "{0}" の呼び出し中にエラーが発生しました。

119

ユーザ "{0}" には電子メール アドレスがありません。

120

ロール "{1}" のユーザ "{0}" には電子メール アドレスがありません。

121

ルーティング テーブルで、適切な割り当て対象を識別できませんでした。

122

ユーザ "{0}" に対してワークフローオーガニゼーションが定義されていません。

123

開始日の式 "{0}" が違います。¥n"(1)"

124

例外ハンドラ "{0}" が見つかりませんでした。

125

例外ハンドラの処理中にエラーが発生しました。

126

例外ハンドラが、許容されている最大再試行回数を超えました。

127

アプリケーションまたはワークフローのインスタンスが、例外ハンドラを呼び出しました。

128

指定したワークフロー インスタンス {0} が見つかりませんでした。

129

XML ドキュメントの解析時にエラーが発生しました。

130

この定義は、新しいバージョンで作成されています。¥n¥ WebLogic Integrator Studio を {0} 以降のバージョンにアップグレードしてください。


 

 

ページの先頭 前 次