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