Oracle® Fusion Middleware Oracle Business Process Managementモデリングおよび実装ガイド 11g リリース1(11.1.1.5.0) B61409-03 |
|
前 |
次 |
この章では、ビジネス・プロセスの実行中に発生するエラーの処理方法を説明します。Oracle BPMでは、エラーをモデリングできる例外コンポーネントや、プロセスの実行中にそれらのエラーを処理できる複数のBPMN構造が用意されています。
この章の内容は次のとおりです。
予期しない問題により、プロセスが失敗する状況が発生することがあります。エラーには2種類あります。システム・エラーおよびプロセス・エラーです。
システム・エラーは、BPMNサービス・エンジンが実行されているソフトウェアまたはハードウェア・インフラストラクチャの障害の結果、発生します。システム・エラーには様々な原因があります。システム・エラーの原因となる問題の例として、次のものがあげられます。
データベース接続の失敗
接続が失われた場合
ハード・ディスクの問題
プロセス・フロー内のシステム・エラーからリカバリするには、システム例外を使用できます。
プロセスでシステム例外を処理しない場合、Oracle Enterprise Managerが提供するフォルト・リカバリ・システムを使用してリカバリできます。Oracle Enterprise Managerのフォルト・リカバリ・システムの詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。
プロセス・エラーは、プロセスの通常の開発を妨げる問題です。たとえば、発注プロセスの場合、リクエストされたアイテムの在庫がなければ、通常のプロセス・フローを続行できません。プロセス・フロー中のこのような予期しない状況を処理できます。この例の状況を処理する1つの方法は、顧客に注文を取り消してもらうか、または注文を後のために保存してもらうことです。
プロセス内の予期しない状況には、次のような一般的な例があります。
在庫の不足
ワークロードの制限の超過
金額の制限の超過
フィードバックの期限切れ
クレジット・カードの認証の問題
プロセスで例外が発生すると、そのBPMNプロセスを含むSOAコンポジットの状態に影響を及ぼします。例外がSOAコンポジットの状態に与える影響の詳細は、23.1.4項「BPMNエラーがSOAコンポジットのステータスに与える影響」を参照してください。
ビジネス例外は、エラーではなく、プロセス設計の標準の一環とみなされています。
コンポーネントをビジネス・カタログに追加する際、コンポーネントのサービスがエラーを生成できるよう指定されている場合、これらのエラーは、「エラー」事前定義済モジュール内のビジネス・カタログでビジネス例外として表示されます。
サービスを起動すると、例外が発生する場合があります。これらの例外を処理するには、境界エラー・キャッチ・イベントまたはイベント・サブプロセスを使用します。
また、ビジネス・カタログでビジネス例外を定義できます。その後、特定の条件下でトリガーされたエラー終了イベントでこれらのビジネス例外を使用できます。エラー終了イベントにより例外が生成され、親プロセスが例外を処理できます。
システム例外は、プロセスの実行中に発生する場合がある低レベルのエラーを表します。場合によっては、プロセス内でこの低レベル・エラーを処理する必要があることがあります。
プロセス・フロー内でシステム例外を処理するには、その例外を捕捉し、システム例外を使用するようにエラー・キャッチ・イベントを構成する必要があります。
サービスまたは別のBPMNプロセスの実行中に、システム例外が発生する場合があります。特定のシステム例外をスローするようにプロセスを設計します。スロー・イベントまたは終了イベントで使用できる唯一の例外は、ロールバックです。他のすべてのサポートされるシステム例外は、キャッチ・エラー・イベントの開始にのみ使用可能です。
システム例外には、タイプがAnyであるerrorInfo属性が含まれます。どのような値でもこの属性に割り当てることができます。タイプがAnyであるため、この値は任意の型に属することができます。通常は、アプリケーションのトラブルシューティング用に、例外の原因または重要情報を格納するためにこの属性を使用します。
エラー・イベントの実装プロパティから、使用可能なシステム例外のリストのみを表示できます。
表19-1で、サポートされるシステム例外について説明します。また、システム例外が存在するモジュールおよび指定されたシステム例外を使用できるエラー・イベントも示します。
表19-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トランザクションをロールバックできるようにします。 |
スロー、終了 |
システム例外またはビジネス例外のフローは、例外が発生した場所に応じて異なります。
次のものの実行中に例外が発生する可能性があります。
タスク
サブプロセス
再使用可能なプロセス
例外の原因となるタスクがBPMNサービス・エンジンによって実行された場合に行われる処理を、次に説明します。
BPMNサービス・エンジンは、例外をスロー可能なサービスを起動するタスクを実行します。
SOAPエラーが発生してタスクが失敗し、このエラーはBPMNサービス・エンジンによって例外に変換されます。
タスクに境界キャッチ・エラー・イベントが付属している場合、インスタンスは境界キャッチ・エラー・イベントで定義されたフローを使用して例外を処理します。例外処理フローにより、メイン・プロセス・フローを再開することも可能です。メイン・プロセス・フローを再開しない場合、プロセスは境界キャッチ・エラー・イベントで終了します。
タスクに境界キャッチ・エラー・イベントが関連付けられていない場合、例外はプロセス・レベルに伝播します。
プロセス・レベルでは、次のオプションが可能です。
プロセスに、例外を捕捉できるイベント・サブプロセスが含まれておらず、フォールト・ポリシーを定義していない場合、BPMサービス・エンジンによってこのエラーがOracle Enterprise Managerのフォルト・リカバリ・システムのログに記録されます。Oracle Enterprise Managerのフォルト・リカバリ・システムの詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。
プロセスに、例外を捕捉するよう構成されたタイプ・エラーの開始イベントを持つイベント・サブプロセスが含まれている場合、インスタンスは例外処理フローを継続します。インスタンスが例外処理フローを完了すると、プロセスは終了します。
次のシーケンスで、例外の原因となるサブプロセスがBPMNサービス・エンジンによって実行された場合に行われる処理を説明します。
BPMサービス・エンジンにより、例外または終了エラー・イベントをスローするサービスを起動するタスクの含まれたサブプロセスが実行されます。
次のイベントのいずれかが発生します。
タスクが例外をスローする。
サブプロセスがエラー・イベントで終了します。
タスクで例外が発生し、タスクに境界キャッチ・エラー・イベントが含まれているか、またはサブプロセスに例外を処理できるイベント・サブプロセスが含まれている場合、例外は親プロセスに伝播されません。
サブプロセスがエラー・イベントで終了するか、例外がタスクで発生して処理されない場合、例外は親プロセスに伝播されます。
次の場合、親プロセスは例外を処理できます。
サブプロセスに境界キャッチ・イベントが付属しています。
例外を捕捉するよう構成されたイベント・サブプロセスが含まれています。
親プロセスが例外を処理できない場合、その親プロセスに例外が伝播されます。親プロセスがない場合、例外はEnterprise Managerのフォルト・リカバリ・システムのログに記録されます。Enterprise Managerのフォルト・リカバリ・システムの詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。
次のシーケンスで、例外の原因となる再使用可能なサブプロセスを起動するコール・アクティビティが、BPMNサービス・エンジンによって実行された場合に行われる処理を説明します。
BPMサービス・エンジンにより、例外または終了エラー・イベントをスローするサービスを起動するタスクの含まれた、再使用可能なプロセスが実行されます。
次のイベントのいずれかが発生します。
タスクが例外をスローする。
再使用可能なプロセスが、エラー・イベントで終了する。
タスクで例外が発生し、タスクに境界キャッチ・エラー・イベントが含まれているか、または再使用可能なプロセスに例外を処理できるイベント・サブプロセスが含まれている場合、例外は親プロセスに伝播されません。
サブプロセスがエラー・イベントで終了するか、例外がタスクで発生して処理されない場合、例外は親プロセスに伝播されます。
次の場合、親プロセスは例外を処理できます。
コール・アクティビティに境界キャッチ・イベントが付属しています。
例外を捕捉するよう構成されたイベント・サブプロセスが含まれています。
親プロセスが例外を処理できない場合、その親プロセスに例外が伝播されます。親プロセスがない場合、例外はEnterprise Managerのフォルト・リカバリ・システムのログに記録されます。Enterprise Managerのフォルト・リカバリ・システムの詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。
アクティビティで発生する例外を処理するには、次のものを使用できます。
境界エラー・キャッチ・イベント
イベントのサブプロセス
境界エラー・キャッチ・イベントを使用すると、例外を処理した後にメイン・プロセス・フローを再開できます。
例外処理フローをプロセス内の複数のタスクで再利用したい場合、イベント・サブプロセスの方が境界キャッチ・イベントよりも効率的です。キャッチ・エラー・イベントはイベント・サブプロセス間に置かれるため、イベント・サブプロセスを使用する方が簡潔なプロセスを定義でき、手間もかかりません。境界キャッチ・イベントを使用して例外処理フローを再利用する場合、各タスクに対して境界キャッチ・イベントを定義し、その後、それらの協会イベントを例外処理フローに接続する必要があります。
図19-1に、境界エラー・キャッチ・イベントを使用してエラーを処理するプロセスを示します。
また、イベント・サブプロセスを使用すると、サブプロセスが自らのデータ・オブジェクトを定義できるのと同様に、イベント・サブプロセス内からのみアクセス可能なデータ・オブジェクトを定義できます。
図19-2に、イベント・サブプロセスを使用してエラーを処理するプロセスを示します。
フロー・オブジェクトの実行によって例外が発生する可能性があることがわかっている場合、境界エラー・キャッチ・イベントを使用して例外を処理するようプロセスを設計できます。
境界エラー・キャッチ・イベントを使用して例外を処理するには:
例外処理フローを作成します。
例外を処理した後、このフローはメイン・プロセスを再開するか、またはプロセスを終了できます。
コンポーネント・パレットの「イベントの捕捉」セクションで「エラー・イベント」を選択します。
エラー・イベントを、例外をスローするタスクの上にドロップします。
イベントは、タスクの境界のどこに置いても構いません。
エラー・イベントをドロップすると、シーケンス・フローが表示され、これを例外処理フローに接続できます。
例外処理フローにシーケンス・フローを接続します。
境界キャッチ・エラー・イベントを右クリックします。
「プロパティ」を選択します。
「実装」タブをクリックします。
実装プロパティを構成して、ビジネスまたはシステム例外を捕捉します。
ビジネス例外を捕捉するように実装プロパティを構成する方法については、19.5.5項「エラー・イベントを構成してビジネス例外を捕捉する方法」を参照してください。
システム例外を捕捉するように実装プロパティを構成する方法については、19.5.6項「キャッチ・イベントを構成してシステム例外を捕捉する方法」を参照してください。
境界エラー・キャッチ・イベントが付随しているタスクの実行中にBPMNサービス・エンジンがエラーに遭遇すると、境界エラー・キャッチ・イベントによって定義されたフローを使用します。境界エラー・キャッチ・イベントによって定義された例外処理フローは、メイン・プロセス・フローを再結合するか、またはプロセスを終了できます。
BPMNプロセスでフロー・オブジェクトを実行中に発生する可能性のある例外を処理する際、イベント・サブプロセスを使用できます。
イベント・サブプロセスを使用して例外を処理するには:
コンポーネント・パレットの「アクティビティ」セクションで「イベント・サブプロセス」を選択します。
イベント・サブプロセスをプロセスにドロップします。
イベント・サブプロセスの開始イベントを右クリックします。
「プロパティ」を選択します。
「実装」タブをクリックします。
「実装タイプ」リストから「エラー」を選択します。
実装プロパティを構成して、ビジネスまたはシステム例外を捕捉します。
ビジネス例外を捕捉するように実装プロパティを構成する方法については、19.5.5項「エラー・イベントを構成してビジネス例外を捕捉する方法」を参照してください。
システム例外を捕捉するように実装プロパティを構成する方法については、19.5.6項「キャッチ・イベントを構成してシステム例外を捕捉する方法」を参照してください。
プロセス内のタスクの実行中にイベント・サブプロセスで処理された例外が発生すると、BPMNサービス・エンジンは、イベント・サブプロセスで定義された例外処理フローの実行を続けます。
エラー・イベントを構成してビジネス例外を捕捉することができます。エラー・イベントを構成してビジネス例外を捕捉するには、エラー・イベント実装プロパティを編集する必要があります。
エラー・イベントの実装プロパティを構成してビジネス例外を捕捉するには:
このプロセスの実行中に発生するすべてのビジネス例外を処理する場合、「すべてのビジネス例外の捕捉」を選択します。
特定のビジネス例外を捕捉したい場合:
「例外」フィールドの横の「参照」ボタンをクリックします。
「タイプ」ダイアログ・ボックスが表示されます。
例外の名前を入力するか、ツリーから選択します。
「OK」をクリックします。
「タイプ」ダイアログ・ボックスが閉じ、「例外」フィールドに選択した例外が表示されます。
エラー・イベントを構成してシステム例外を捕捉することができます。エラー・イベントを構成してシステム例外を捕捉するには、エラー・イベント実装プロパティを編集する必要があります。
エラー・イベントの実装プロパティを構成してシステム例外を捕捉するには:
このプロセスの実行中に発生する可能性のあるすべてのシステム例外を処理する場合、「すべてのシステム例外の捕捉」を選択します。
特定のビジネス例外を捕捉したい場合:
「例外」フィールドの横の「参照」ボタンをクリックします。
「タイプ」ダイアログ・ボックスが表示されます。
「システム・フォルトの表示」を選択します。
ツリーは使用可能なシステム・フォルトを示しています。各種のエラー・イベントでサポートされる例外のリストについては、表19-1を参照してください。
例外の名前を入力するか、ツリーから選択します。
「OK」をクリックします。
「タイプ」ダイアログ・ボックスが閉じ、「例外」フィールドに選択した例外が表示されます。
エラー終了イベントを使用しているビジネス例外のみスローできます。これにより、親プロセスのみがこれらの例外を捕捉できます。
タスクの実行中に発生する低レベルの例外をスローするかわりに、カスタマイズされた高レベルの例外をスローするようにプロセスを構成できます。高レベルの例外をスローするには、エラーをスローする終了イベントにアクティビティ内の境界イベントを接続するか、またはサブプロセス・イベントをエラー終了イベントで完了します。
エラー終了イベントを使用して、BPMNプロセスがビジネス例外をスローするように構成できます。
例外をスローするには:
カスタム例外をスローする場合は、ビジネス例外を作成します。
既存のビジネス例外またはシステム例外をスローすることもできます。
ビジネス例外の作成方法については、19.6.3項「ビジネス例外の作成方法」を参照してください。
プロセス中の例外をスローする場所を決定します。
これらのオプションのいずれかを使用して、プロセスのフローをブランチ化します。
プロセスのフローにブランチを作成するためのゲートウェイを追加します。
境界イベントを追加します。
コンポーネント・パレットからエラー終了イベントをドラッグし、プロセスにドロップします。
ゲートウェイまたは境界イベント、およびエラー終了イベントをリンクするシーケンス・フローを追加します。
エラー終了イベントを右クリックします。
「プロパティ」を選択します。
「実装」タブをクリックします。
「例外」フィールドの横の「参照」ボタンをクリックします。
「タイプ」ダイアログ・ボックスが表示されます。
システム例外をスローする場合、「システム・フォルトの表示」を選択します。
ツリーは使用可能なシステム・フォルトを示しています。各種のエラー・イベントでサポートされる例外のリストについては、表19-1を参照してください。
例外の名前を入力するか、ツリーから選択します。
「OK」をクリックします。
「タイプ」ダイアログ・ボックスが閉じ、「例外」フィールドに選択した例外が表示されます。
「OK」をクリックします。
BPMNサービス・エンジンはプロセスを中断し、例外を親プロセスにスローします。サブプロセスにエラー・キャッチ境界イベントが付随しているか、または親プロセスにエラー・イベントを処理できるイベント・サブプロセスが存在する場合、親プロセスは例外を処理できます。そうでない場合、親プロセスは例外をその親プロセスにスローします。親プロセスがない場合、例外はBPMNサービス・エンジンによってOracle Enterprise Managerのフォルト処理システムのログに記録されます。
ビジネス例外を作成し、それを使用してBPMNプロセスのエラー・イベントを実装できます。
ビジネス例外を作成するには:
ビジネス・カタログでモジュールを右クリックします。
ビジネス・カタログにモジュールが含まれていない場合は、モジュールを作成する必要があります。
「新規」を選択します。
「例外」を選択します。
例外を識別するための名前を入力します。
「OK」をクリックします。
ビジネス例外エディタが開きます。
必要に応じて、errorInfo
属性を変更できます。
ErrorInfo属性を変更する方法については、19.6.5項「ビジネス例外でのErrorInfo属性の構成方法」を参照してください。
例外は、ビジネス・カタログの選択したモジュールに表示されます。この例外をスローするようにプロセス中のエラー終了イベントを構成するか、またはこの例外を処理するように境界エラー・キャッチ・イベントを構成できます。
ビジネス例外にはerrorInfo属性が含まれ、これを使用して例外を引き起こした状況に関する情報を保存できます。このフィールドの情報を使用して、ユーザー、プロセス開発者、および管理者がエラーの原因を理解できる手助けができます。
ビジネス例外でErrorInfo属性を構成するには:
ビジネス例外エディタを開きます。
「属性」セクションでerrorInfo属性を展開します。
errorInfo属性プロパティを変更します。
次のプロパティを変更できます。
説明
Documentation
タイプ
「保存」をクリックするか、ビジネス例外エディタを閉じて変更内容を保存します。
サブプロセスで発生した例外は、他のBPMNアクティビティで例外を処理する場合と同様に処理できます。
プロセスが別のピア・プロセスと通信するとき、そのピア・プロセスでいずれかのフロー・オブジェクトを実行するとエラーが発生する場合があります。同期的な操作の場合、このエラーを起動元のピア・プロセスに伝播する正しい形式では、エラーとして構成されたメッセージ・イベントを使用しています。
エラーとして構成されたメッセージ・イベントは、起動元のピア・プロセスに、プロセスの実行中にエラーが発生したことを伝達します。ただし、これは予期されたエラーであるため、監査証跡ではプロセスが正常に実行されたと示されます。
起動元のピア・プロセスがこれらのオプションのいずれかを使用して例外を処理する方法を定義する必要があります。
ピア・プロセスを起動するフロー・オブジェクトに、境界エラー・キャッチ・イベントを追加します。
起動元のピア・プロセスに、例外を処理するイベント・サブプロセスを追加します。
起動元のピア・プロセスでエラー処理を行わない場合、エラーは伝播され、プロセスの実行は正常に完了しません。
注意: エラーがない場合にインスタンスが使用するパスを必ず定義しておく必要があります。エラーがない場合のパスを定義しないと、プロジェクトが正常にビルドされません。 |
エラー・イベントの使用とエラー・メッセージ・イベントの使用の相違点
プロセス間通信中のエラー処理にエラー終了イベントまたはスロー・イベントを使用することは、お薦めできません。エラー・イベントは、プロセス内で処理されるか、次のレベルに伝播される可能性がある内部エラーに対してのみ使用する必要があります。これらのエラーは、このプロセスの外では意味がありません。
ピア・プロセスの実行中に発生した例外は、起動元のピア・プロセスに伝播されません。ピア・プロセスが応答を停止しため、最終的には、起動元のピア・プロセスがタイムアウト通知を受信します。
プロセス間通信に使用されるプロセスで操作を実行するとエラーが発生する可能性があるとわかっている場合は、メッセージ終了イベントまたはスロー・イベントを追加して、起動元のピア・プロセスにエラーを伝播することをお薦めします。
メッセージ・エラーを実装するには、ビジネス例外を選択する必要があります。プロジェクトでビジネス例外を定義しない場合、ビジネス例外を作成する必要があります。ビジネス例外の詳細は、19.2項「ビジネス例外の使用」を参照してください。
メッセージ・イベントを使用してピア・プロセスでエラーを処理するには:
ピアBPMNプロセスを編集します。
メッセージ終了イベントまたはスロー・イベントを追加します。
エラーを生成する可能性があるフロー・オブジェクトから、メッセージ終了イベントに、シーケンス・フローを追加します。
メッセージ終了イベントを右クリックします。
「プロパティ」を選択します。
「実装」タブをクリックします。
「実装」リストから「例外」を選択します。
「例外」フィールドの横にある「参照」ボタンをクリックして、使用可能なビジネス例外を参照して選択します。
「OK」をクリックします。