プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle Business Process Management Studioでのビジネス・プロセスの開発
12c (12.2.1.2.0)
E82789-01
目次へ移動
目次

前
次

18 エラーの処理

この章では、ビジネス・プロセスの実行中に発生するエラーの処理方法を説明します。Oracle BPMでは、エラーをモデリングできる例外コンポーネントや、プロセスの実行中にそれらのエラーを処理できる複数のBPMN構造が用意されています。

この章の内容は次のとおりです。

18.1 エラー処理の概要

エラーには2種類あります。システム・エラーおよびプロセス・エラーです。システム・エラーは、BPMNサービス・エンジンが実行されているソフトウェアまたはハードウェア・インフラストラクチャの障害の結果発生するもので、プロセス・エラーは、プロセス・フローそのものの中の予期しない状況です。

システム・エラーには様々な原因があります。システム・エラーの原因となる問題の例として、次のものがあげられます。

  • データベース接続の失敗

  • 接続が失われた場合

  • ハード・ディスクの問題

プロセス・フロー内のシステム・エラーからリカバリするには、システム例外を使用できます。

プロセスでシステム例外を処理しない場合、Oracle Enterprise Managerが提供するフォルト・リカバリ・システムを使用してリカバリできます。詳細は、Oracle SOA SuiteおよびOracle Business Process Management Suiteの管理エラー・ホスピタルでのフォルトのリカバリを参照してください。

プロセス・エラーは、プロセスの通常の開発を妨げる問題です。たとえば、発注プロセスの場合、リクエストされたアイテムの在庫がなければ、通常のプロセス・フローを続行できません。プロセス・フロー中のこのような予期しない状況を処理できます。この例の状況を処理する1つの方法は、顧客に注文を取り消してもらうか、または注文を後のために保存してもらうことです。

プロセス内の予期しない状況には、次のような一般的な例があります。

  • 在庫の不足

  • ワークロードの制限の超過

  • 金額の制限の超過

  • フィードバックの期限切れ

  • クレジット・カードの認証の問題

プロセスで例外が発生すると、そのBPMNプロセスを含むSOAコンポジットの状態に影響を及ぼします。例外がSOAコンポジットの状態に与える影響の詳細は、「BPMNエラーがSOAコンポジットのステータスに与える影響」を参照してください。

アクティビティおよびイベントを構成し、それらが完了した後にBPMランタイムがチェックポイントを追加するように強制できます。これを行うには、「実行後にコミットを強制」オプションを選択する必要があります。これは、BPELにおけるデハイドレーション・アクションに似ています。このオプションを使用すると、エラーが発生した場合にトランザクションをロールバックするような、冪等でないアクティビティの再実行をリカバリ時に回避できます。

18.1.1 例外を使用したエラーの処理

Oracle BPMでは、ビジネス例外を使用して、ビジネス・プロセスの実行中に発生する可能性のある予期しない状況を表します。

例外の処理方法をビジネス・プロセスの一環として設計できますが、実際はプロセスの通常のフロー外で発生するものです。ビジネス例外を使用すると、メイン・フローで一般的な使用状況を処理する一方、別のフローでプロセス例外を処理するような、簡潔なプロセスを作成できます。

18.2 ビジネス例外の使用

ビジネス例外は、エラーではなく、プロセス設計の標準の一環とみなされています。コンポーネントをビジネス・カタログに追加する際、コンポーネントのサービスがエラーを生成できるよう指定されている場合、これらのエラーは、「エラー」事前定義済モジュール内のビジネス・カタログでビジネス例外として表示されます。

サービスを起動すると、例外が発生する場合があります。これらの例外を処理するには、境界エラー・キャッチ・イベントまたはイベント・サブプロセスを使用します。

また、ビジネス・カタログでビジネス例外を定義できます。その後、特定の条件下でトリガーされたエラー終了イベントでこれらのビジネス例外を使用できます。エラー終了イベントにより例外が生成され、親プロセスが例外を処理できます。

18.3 システム例外の使用

システム例外は、プロセスの実行中に発生する場合がある低レベルのエラーを表します。場合によっては、プロセス内でこの低レベル・エラーを処理する必要があることがあります。プロセス・フロー内でシステム例外を処理するには、その例外を捕捉し、システム例外を使用するようにエラー・キャッチ・イベントを構成する必要があります。

サービスまたは別のBPMNプロセスの実行中に、システム例外が発生する場合があります。特定のシステム例外をスローするようにプロセスを設計します。スロー・イベントまたは終了イベントで使用できる唯一の例外は、ロールバックです。他のすべてのサポートされるシステム例外は、キャッチ・エラー・イベントの開始にのみ使用可能です。

システム例外には、タイプが「任意」であるerrorInfo属性が含まれます。どのような値でもこの属性に割り当てることができます。タイプがAnyであるため、この値は任意の型に属することができます。通常は、アプリケーションのトラブルシューティング用に、例外の原因または重要情報を格納するためにこの属性を使用します。

エラー・イベントの実装プロパティから、使用可能なシステム例外のリストのみを表示できます。

表18-1で、サポートされるシステム例外について説明します。また、システム例外が存在するモジュールおよび指定されたシステム例外を使用できるエラー・イベントも示します。

表18-1 システム例外

システム例外 モジュール 説明 エラー・イベント

AssertFailure

Bpel

指定したアサーションが失敗したことを示しています。

キャッチ、開始

BindingFault

Bpel

フロー・オブジェクトで起動された操作の準備に失敗したことを示しています。たとえば、WSDのロードに失敗しました。BindingFault後は起動を再試行することはできず、通常、このエラーからのリカバリには管理者操作が必要になります。

キャッチ、開始

InvalidVariables

Bpel

使用された変数が無効であることを示しています。

キャッチ、開始

RemoteFault

Bpel

フロー・オブジェクトでのサービスの起動に問題があったことを示しています。たとえば、リモート・サービスがSOAPフォルトを戻しました。

キャッチ、開始

Timeout

Soap

サービスがレスポンスのタイムアウト期間を超過したことを示しています。

キャッチ、開始

ConflictingReceive

Soap

起動された操作に応答する複数の受信アクティビティが存在することを示しています。

キャッチ、開始

ConflictingRequest

Soap

起動された操作の同じパートナ・リンクに対して複数のリクエストが存在することを示しています。

キャッチ、開始

CorrelationViolation

Soap

メッセージが必要な相関情報を提供していないことを示しています。

キャッチ、開始

ForcedTermination

Soap

SOAPフォルトが発生したため、サービスが終了されたことを示しています。

キャッチ、終了

InvalidReply

Soap

応答に、対応する受信が必要とする相関情報が含まれていないことを示しています。

キャッチ、開始

MismatchedAssignmentFailure

Soap

割り当てられたタイプに互換性がないことを示しています。

キャッチ、開始

RepeatedCompensation

Soap

補正ハンドラが複数回起動されることを示しています。

キャッチ、開始

SelectionFailure

Soap

選択操作の実行時にエラーがあったことを示しています。

キャッチ、開始

UninitializedVariable

Soap

アクセスしている変数が初期化されないことを示しています。

キャッチ、開始

Rollback

Soap

例外の受信者が、プロセス・フロー内からの現在のJTAトランザクションをロールバックできるようにします。

スロー、終了

18.4 例外の一般的なフロー

システム例外またはビジネス例外のフローは、例外が発生した場所に応じて異なります。

次のものの実行中に例外が発生する可能性があります。

  • タスク

  • サブプロセス

  • 再使用可能なプロセス

18.4.1 タスクでスローされた例外の一般的なフロー

例外の原因となるタスクがBPMNサービス・エンジンによって実行された場合に行われる処理を、次に説明します。

  1. BPMNサービス・エンジンは、例外をスロー可能なサービスを起動するタスクを実行します。

  2. SOAPエラーが発生してタスクが失敗し、このエラーはBPMNサービス・エンジンによって例外に変換されます。

  3. タスクに境界キャッチ・エラー・イベントが付属している場合、インスタンスは境界キャッチ・エラー・イベントで定義されたフローを使用して例外を処理します。例外処理フローにより、メイン・プロセス・フローを再開することも可能です。メイン・プロセス・フローを再開しない場合、プロセスは境界キャッチ・エラー・イベントで終了します。

    タスクに境界キャッチ・エラー・イベントが関連付けられていない場合、例外はプロセス・レベルに伝播します。

  4. プロセス・レベルでは、次のオプションが可能です。

    • プロセスに、例外を捕捉できるイベント・サブプロセスが含まれておらず、フォルト・ポリシーを定義していない場合、BPMサービス・エンジンによってこのエラーがOracle Enterprise Managerのフォルト・リカバリ・システムのログに記録されます。

    • プロセスに、例外を捕捉するよう構成されたタイプ・エラーの開始イベントを持つイベント・サブプロセスが含まれている場合、インスタンスは例外処理フローを継続します。インスタンスが例外処理フローを完了すると、プロセスは終了します。

18.4.2 サブプロセス内の例外の一般的なフロー

次のシーケンスで、例外の原因となるサブプロセスがBPMNサービス・エンジンによって実行された場合に行われる処理を説明します。

  1. BPMサービス・エンジンにより、例外または終了エラー・イベントをスローするサービスを起動するタスクの含まれたサブプロセスが実行されます。

  2. 次のイベントのいずれかが発生します。

    • タスクが例外をスローする。

    • サブプロセスがエラー・イベントで終了します。

  3. タスクで例外が発生し、タスクに境界キャッチ・エラー・イベントが含まれているか、またはサブプロセスに例外を処理できるイベント・サブプロセスが含まれている場合、例外は親プロセスに伝播されません。

    サブプロセスがエラー・イベントで終了するか、例外がタスクで発生して処理されない場合、例外は親プロセスに伝播されます。

  4. 次の場合、親プロセスは例外を処理できます。

    • サブプロセスに境界キャッチ・イベントが付属しています。

    • 例外を捕捉するよう構成されたイベント・サブプロセスが含まれています。

    親プロセスが例外を処理できない場合、その親プロセスに例外が伝播されます。親プロセスがない場合、例外はEnterprise Managerのフォルト・リカバリ・システムのログに記録されます。

18.4.3 再使用可能なプロセス内の例外の一般的なフロー

次のシーケンスで、例外の原因となる再使用可能なサブプロセスを起動するコール・アクティビティが、BPMNサービス・エンジンによって実行された場合に行われる処理を説明します。

  1. BPMサービス・エンジンにより、例外または終了エラー・イベントをスローするサービスを起動するタスクの含まれた、再使用可能なプロセスが実行されます。

  2. 次のイベントのいずれかが発生します。

    • タスクが例外をスローする。

    • 再使用可能なプロセスが、エラー・イベントで終了する。

  3. タスクで例外が発生し、タスクに境界キャッチ・エラー・イベントが含まれているか、または再使用可能なプロセスに例外を処理できるイベント・サブプロセスが含まれている場合、例外は親プロセスに伝播されません。

    サブプロセスがエラー・イベントで終了するか、例外がタスクで発生して処理されない場合、例外は親プロセスに伝播されます。

  4. 次の場合、親プロセスは例外を処理できます。

    • コール・アクティビティに境界キャッチ・イベントが付属しています。

    • 例外を捕捉するよう構成されたイベント・サブプロセスが含まれています。

    親プロセスが例外を処理できない場合、その親プロセスに例外が伝播されます。親プロセスがない場合、例外はEnterprise Managerのフォルト・リカバリ・システムのログに記録されます。

18.5 ビジネス・プロセスでの例外の処理

アクティビティで発生した例外は、境界エラー・キャッチ・イベントまたはイベント・サブプロセスを使用して処理できます。境界エラー・キャッチ・イベントを使用すると、例外を処理した後にメイン・プロセス・フローを再開できます。例外処理フローをプロセス内の複数のタスクで再利用したい場合、イベント・サブプロセスの方が境界キャッチ・イベントよりも効率的です。

キャッチ・エラー・イベントはイベント・サブプロセス間に置かれるため、イベント・サブプロセスを使用する方が簡潔なプロセスを定義でき、手間もかかりません。境界キャッチ・イベントを使用して例外処理フローを再利用する場合、各タスクに対して境界キャッチ・イベントを定義し、その後、それらの協会イベントを例外処理フローに接続する必要があります。

図18-1に、境界エラー・キャッチ・イベントを使用してエラーを処理するプロセスを示します。

図18-1 境界エラー・キャッチ・イベント

図18-1の説明が続きます
「図18-1 境界エラー・キャッチ・イベント」の説明

また、イベント・サブプロセスを使用すると、サブプロセスが自らのデータ・オブジェクトを定義できるのと同様に、イベント・サブプロセス内からのみアクセス可能なデータ・オブジェクトを定義できます。

図18-2に、イベント・サブプロセスを使用してエラーを処理するプロセスを示します。

図18-2 開始エラー・イベントのあるイベント・サブプロセス

図18-2の説明が続きます
「図18-2 開始エラー・イベントのあるイベント・サブプロセス」の説明

18.5.1 境界エラー・キャッチ・イベントを使用した例外処理の方法

フロー・オブジェクトの実行によって例外が発生する可能性があることがわかっている場合、境界エラー・キャッチ・イベントを使用して例外を処理するようプロセスを設計できます。

境界エラー・キャッチ・イベントを使用して例外を処理するには:

  1. 例外処理フローを作成します。

    例外を処理した後、このフローはメイン・プロセスを再開するか、またはプロセスを終了できます。

  2. 「コンポーネント」ウィンドウの「イベントの捕捉」セクションからエラー・イベントを選択します。
  3. エラー・イベントを、例外をスローするタスクの上にドロップします。

    イベントは、タスクの境界のどこに置いても構いません。

    エラー・イベントをドロップすると、シーケンス・フローが表示され、これを例外処理フローに接続できます。

  4. 例外処理フローにシーケンス・フローを接続します。
  5. 境界キャッチ・エラー・イベントを右クリックします。
  6. 「プロパティ」を選択します。
  7. 「実装」タブをクリックします。
  8. 実装プロパティを構成して、ビジネスまたはシステム例外を捕捉します。

    ビジネス例外を捕捉するように実装プロパティを構成する方法については、「エラー・イベントを構成してビジネス例外を捕捉する方法」を参照してください。

    システム例外を捕捉するように実装プロパティを構成する方法については、「キャッチ・イベントを構成してシステム例外を捕捉する方法」を参照してください。

18.5.2 境界キャッチ・イベントを使用した例外処理時に行われる処理

境界エラー・キャッチ・イベントが付随しているタスクの実行中にBPMNサービス・エンジンがエラーに遭遇すると、境界エラー・キャッチ・イベントによって定義されたフローを使用します。境界エラー・キャッチ・イベントによって定義された例外処理フローは、メイン・プロセス・フローを再結合するか、またはプロセスを終了できます。

18.5.3 イベント・サブプロセスを使用した例外処理の方法

BPMNプロセスでフロー・オブジェクトを実行中に発生する可能性のある例外を処理する際、イベント・サブプロセスを使用できます。

イベント・サブプロセスを使用して例外を処理するには:

  1. 「コンポーネント」パレットの「アクティビティ」セクションで「イベント・サブプロセス」を選択します。
  2. イベント・サブプロセスをプロセスにドロップします。
  3. イベント・サブプロセスの開始イベントを右クリックします。
  4. 「プロパティ」を選択します。
  5. 「実装」タブをクリックします。
  6. 「実装タイプ」リストから「エラー」を選択します。
  7. 実装プロパティを構成して、ビジネスまたはシステム例外を捕捉します。

    ビジネス例外を捕捉するように実装プロパティを構成する方法については、「エラー・イベントを構成してビジネス例外を捕捉する方法」を参照してください。

    システム例外を捕捉するように実装プロパティを構成する方法については、「キャッチ・イベントを構成してシステム例外を捕捉する方法」を参照してください。

18.5.4 イベント・サブプロセスを使用した例外処理時に行われる処理

プロセス内のタスクの実行中にイベント・サブプロセスで処理された例外が発生すると、BPMNサービス・エンジンは、イベント・サブプロセスで定義された例外処理フローの実行を続けます。

18.5.5 エラー・イベントを構成してビジネス例外を捕捉する方法

エラー・イベントを構成してビジネス例外を捕捉することができます。エラー・イベントを構成してビジネス例外を捕捉するには、エラー・イベント実装プロパティを編集する必要があります。

エラー・イベントの実装プロパティを構成してビジネス例外を捕捉するには:

  1. このプロセスの実行中に発生するすべてのビジネス例外を処理する場合、「すべてのビジネス例外の捕捉」を選択します。

    特定のビジネス例外を捕捉したい場合:

    1. 「タイプ」セクションで、「エラー別」を選択します。

    2. 「エラー別」リストから「参照」を選択します。

      「参照タイプ」ダイアログ・ボックスが表示されます。

    3. 「システム・フォルトの表示」オプションを選択解除します。

    4. 例外の名前を入力するか、ツリーから選択します。

    5. 必要に応じて、エラー・イベントを構成して例外からリカバリできます。これを行うには、「リカバリ可能なエラー」オプションを選択します。

      エラーからリカバリするには、値を事前定義済変数アクションに設定する必要があります。詳細は、「例外からリカバリするためのキャッチ・イベントの構成」を参照してください。

    6. 「OK」をクリックします。

      「参照タイプ」ダイアログ・ボックスが閉じ、「例外」フィールドに選択した例外が表示されます。

18.5.6 キャッチ・イベントを構成してシステム例外を捕捉する方法

エラー・イベントを構成してシステム例外を捕捉することができます。エラー・イベントを構成してシステム例外を捕捉するには、エラー・イベント実装プロパティを編集する必要があります。

エラー・イベントの実装プロパティを構成してシステム例外を捕捉するには:

  1. このプロセスの実行中に発生する可能性のあるすべてのシステム例外を処理する場合、「すべてのシステム例外の捕捉」を選択します。

    特定のビジネス例外を捕捉したい場合:

    1. 「タイプ」セクションで、「エラー別」を選択します。

    2. 「エラー別」リストから「参照」を選択します。

      「参照タイプ」ダイアログ・ボックスが表示されます。

    3. 「システム・フォルトの表示」を選択します。

      ツリーは使用可能なシステム・フォルトを示しています。各種のエラー・イベントでサポートされる例外のリストについては、表18-1を参照してください。

    4. 例外の名前を入力するか、ツリーから選択します。

    5. 必要に応じて、エラー・イベントを構成して例外からリカバリできます。これを行うには、「リカバリ可能なエラー」オプションを選択します。

      エラーからリカバリするには、値を事前定義済変数アクションに設定する必要があります。詳細は、「例外からリカバリするためのキャッチ・イベントの構成」を参照してください。

    6. 「OK」をクリックします。

      「参照タイプ」ダイアログ・ボックスが閉じ、「例外」フィールドに選択した例外が表示されます。

18.6 例外からリカバリするためのキャッチ・イベントの構成

プロセス・フローの実行中に例外が発生した場合、そのプロセス・フローを開始したフロー・オブジェクトの実行を再試行するか、プロセス・インスタンスをメイン・プロセス・フローの次のフロー・オブジェクトに移動するかを選択できます。

これは、特定の値を事前定義済変数アクションに設定することで定義できます。事前定義済変数アクションの値は、次の方法で設定できます。

アクション事前定義済変数に使用可能な値は次のとおりです。

  • OK

    これは、アクション変数のデフォルト値です。アクション変数にこの値が設定されていると、例外が発生した場合に、プロセス・インスタンスが例外処理フロー内の次のフロー・オブジェクトに移動します。例外が発生したときに実行されていたプロセス・フローは取り消されます。失敗したスコープは取り消されます。このアクションの使用は、アクティビティがtryブロック内にあり、ハンドラがcatchブロックにあるtry-catchとみなすことができます。

    この値をアクション事前定義済変数に代入するには、文字列sendを使用します。

  • BACK

    アクション変数にこの値が設定されていると、例外が発生した場合に、例外が発生したフロー・オブジェクトにプロセス・インスタンスが戻され、失敗したフロー・オブジェクトの実行が再試行されます。場合によっては、例外が発生した状況が変わり、フロー・オブジェクトの実行を再試行すると正常に実行されます。たとえば、電話をかけようとしたが回線が使用中であると、数分後に再試行します。

    この値をアクション事前定義済変数に代入するには、文字列backを使用します。

  • SKIP:

    アクション変数にこの値が設定されていると、例外が発生した場合に、プロセス・インスタンスがメイン・プロセス・フロー内の次のアクティビティに移動します。

    この値をアクション事前定義済変数に代入するには、文字列skipを使用します。

18.7 サブプロセスまたは再使用可能なプロセスでの例外のスロー

エラー終了イベントを使用しているビジネス例外のみスローできます。これにより、親プロセスのみがこれらの例外を捕捉できます。タスクの実行中に発生する低レベルの例外をスローするかわりに、カスタマイズされた高レベルの例外をスローするようにプロセスを構成できます。

高レベルの例外をスローするには、エラーをスローする終了イベントにアクティビティ内の境界イベントを接続するか、またはサブプロセス・イベントをエラー終了イベントで完了します。

18.7.1 例外をスローする方法

エラー終了イベントを使用して、BPMNプロセスがビジネス例外をスローするように構成できます。

例外をスローするには:

  1. カスタム例外をスローする場合は、ビジネス例外を作成します。

    既存のビジネス例外またはシステム例外をスローすることもできます。

    ビジネス例外の作成方法については、「ビジネス例外の作成方法」を参照してください。

  2. プロセス中の例外をスローする場所を決定します。
  3. これらのオプションのいずれかを使用して、プロセスのフローをブランチ化します。
    • プロセスのフローにブランチを作成するためのゲートウェイを追加します。

    • 境界イベントを追加します。

  4. 「コンポーネント」ウィンドウからプロセスに、エラー終了イベントをドラッグします。
  5. ゲートウェイまたは境界イベント、およびエラー終了イベントをリンクするシーケンス・フローを追加します。
  6. エラー終了イベントを右クリックします。
  7. 「プロパティ」を選択します。
  8. 「実装」タブをクリックします。
  9. 「例外」フィールドの横の「参照」ボタンをクリックします。

    「参照タイプ」ダイアログ・ボックスが表示されます。

  10. システム例外をスローする場合、「システム・フォルトの表示」を選択します。

    ツリーは使用可能なシステム・フォルトを示しています。各種のエラー・イベントでサポートされる例外のリストについては、表18-1を参照してください。

  11. 例外の名前を入力するか、ツリーから選択します。
  12. 「OK」をクリックします。

    「参照タイプ」ダイアログ・ボックスが閉じ、「例外」フィールドに選択した例外が表示されます。

  13. 必要に応じて、BPMランタイムによってエラー終了イベントの実行からの情報でチェックポイントが追加されるようにする場合は、「実行後にコミットを強制」オプションを選択します。
  14. 「OK」をクリックします。

18.7.2 例外のスロー時に行われる処理

BPMNサービス・エンジンはプロセスを中断し、例外を親プロセスにスローします。サブプロセスにエラー・キャッチ境界イベントが付随しているか、または親プロセスにエラー・イベントを処理できるイベント・サブプロセスが存在する場合、親プロセスは例外を処理できます。そうでない場合、親プロセスは例外をその親プロセスにスローします。親プロセスがない場合、例外はBPMNサービス・エンジンによってOracle Enterprise Managerのフォルト処理システムのログに記録されます。

18.7.3 ビジネス例外の作成方法

ビジネス例外を作成し、それを使用してBPMNプロセスのエラー・イベントを実装できます。

ビジネス例外を作成するには:

  1. 「アプリケーション」ウィンドウで、「ビジネス・コンポーネント」ノードのモジュールを右クリックします。

    「ビジネス・コンポーネント」ノードにモジュールが含まれていない場合は、1つ作成する必要があります。

  2. 「新規」を選択します。
  3. 「例外」を選択します。

    ビジネス例外の作成ダイアログ・ボックスが表示されます。

  4. 例外を識別するための名前を入力します。
  5. 「宛先モジュール」テキスト・フィールドの横にある「参照」ボタンをクリックします。

    「モジュールの参照」ダイアログ・ボックスが表示されます。

  6. 例外の名前を入力するか、ツリーから選択します。
  7. 「OK」をクリックします。

    ビジネス例外エディタが開きます。

18.7.4 ビジネス例外の作成時に行われる処理

例外は、ビジネス・カタログの選択したモジュールに表示されます。この例外をスローするようにプロセス中のエラー終了イベントを構成するか、またはこの例外を処理するように境界エラー・キャッチ・イベントを構成できます。

18.8 サブプロセスでの例外の処理

キャッチ・エラー・イベントはイベント・サブプロセス間に置かれるため、イベント・サブプロセスを使用する方が簡潔なプロセスを定義でき、手間もかかりません。

サブプロセスで発生した例外は、他のBPMNアクティビティで例外を処理する場合と同様に処理できます。

18.9 メッセージ・イベントを使用したピア・プロセスのエラー処理

プロセスが別のピア・プロセスと通信するとき、そのピア・プロセスでいずれかのフロー・オブジェクトを実行するとエラーが発生する場合があります。同期的な操作の場合、このエラーを起動元のピア・プロセスに伝播する正しい形式では、エラーとして構成されたメッセージ・イベントを使用しています。

エラーとして構成されたメッセージ・イベントは、起動元のピア・プロセスに、プロセスの実行中にエラーが発生したことを伝達します。ただし、これは予期されたエラーであるため、監査証跡ではプロセスが正常に実行されたと示されます。

起動元のピア・プロセスがこれらのオプションのいずれかを使用して例外を処理する方法を定義する必要があります。

  • ピア・プロセスを起動するフロー・オブジェクトに、境界エラー・キャッチ・イベントを追加します。

  • 起動元のピア・プロセスに、例外を処理するイベント・サブプロセスを追加します。

起動元のピア・プロセスでエラー処理を行わない場合、エラーは伝播され、プロセスの実行は正常に完了しません。

注意:

エラーがない場合にインスタンスが使用するパスを必ず定義しておく必要があります。エラーがない場合のパスを定義しないと、プロジェクトが正常にビルドされません。

エラー・イベントの使用とエラー・メッセージ・イベントの使用の相違点

プロセス間通信中のエラー処理にエラー終了イベントまたはスロー・イベントを使用することは、お薦めできません。エラー・イベントは、プロセス内で処理されるか、次のレベルに伝播される可能性がある内部エラーに対してのみ使用する必要があります。これらのエラーは、このプロセスの外では意味がありません。

ピア・プロセスの実行中に発生した例外は、起動元のピア・プロセスに伝播されません。ピア・プロセスが応答を停止しため、最終的には、起動元のピア・プロセスがタイムアウト通知を受信します。

18.9.1 メッセージ・イベントを使用してピア・プロセス内でエラーを処理する方法

プロセス間通信に使用されるプロセスで操作を実行するとエラーが発生する可能性があるとわかっている場合は、メッセージ終了イベントまたはスロー・イベントを追加して、起動元のピア・プロセスにエラーを伝播することをお薦めします。

メッセージ・エラーを実装するには、ビジネス例外を選択する必要があります。プロジェクトでビジネス例外を定義しない場合、ビジネス例外を作成する必要があります。ビジネス例外の詳細は、「ビジネス例外の使用」を参照してください。

メッセージ・イベントを使用してピア・プロセスでエラーを処理するには:

  1. ピアBPMNプロセスを編集します。
  2. メッセージ終了イベントまたはスロー・イベントを追加します。
  3. エラーを生成する可能性があるフロー・オブジェクトから、メッセージ終了イベントに、シーケンス・フローを追加します。
  4. メッセージ終了イベントを右クリックします。
  5. 「プロパティ」を選択します。
  6. 「実装」タブをクリックします。
  7. 「実装タイプ」リストから「エラー」を選択します。
  8. 「例外」リストをクリックし、「参照」を選択して、使用可能なビジネス例外を参照します。

    「参照タイプ」ダイアログ・ボックスが表示されます。

  9. 例外を選択します。
  10. 「OK」をクリックします。

    選択した例外が「例外」リストに表示されます。

  11. 「OK」をクリックします。

18.9.2 メッセージ・イベントを使用してピア・プロセスでエラー処理をした後の結果

起動されたピア・プロセスでエラーが発生した場合、エラーはそれを起動したプロセスに伝達されます。起動元のピア・プロセスがエラー・イベントを使用してエラーを処理する必要がありますが、ここでエラーが処理されない場合はエラーは次のレベルに伝播されます。

そのエラー・メッセージ・イベントはプロセスの予期されたフローの一部であるため、起動されたピア・プロセスの実行後のステータスは、正常に実行されたように表示されます