| Oracle Workflow APIリファレンス リリース2.6.3.5 部品番号: B15622-01 |
| 前へ | 次へ | 目次 | 索引 | 用語集 |
また、ワークフロー・エンジンをバックグラウンド・タスクとして設定し、リアル・タイムで実行するにはコストがかかりすぎるアクティビティを実行できます。
ワークフロー・エンジンでは、クライアント・アプリケーションに対する次のサービスが実行されます。
エンジンは前のアクティビティの結果に基づいて、次のアクティビティを直接実行しようとします。 アクティビティのステータスは、次のとおりです。
注意: ワークフロー・エンジンでは、各関数アクティビティの前にセーブポイントを設定し、関数アクティビティによって生成されるエラーが検出されるようにしています。アクティビティで、処理されない例外が生成された場合、ワークフロー・エンジンはセーブポイントまでロールバックし、アクティビティのステータスをERRORに設定します。このため、関数アクティビティのPL/SQLプロシージャでは、ユーザーがコミットすることはありません。 コミットは、コール側のアプリケーションが行うため、ワークフロー・エンジンではコミットを発行しません。
データベース・トリガーや分散トランザクションなど、セーブポイントを使用できない環境では、ワークフロー・エンジンは自動的に「セーブポイントの使用不可」エラーを検出し、バックグラウンド・エンジンに対してアクティビティの実行を遅延させます。
注意: Oracle Databaseでは、自律型トランザクションをサポートしています。プラグマAUTONOMOUS_TRANSACTIONをプロシージャに埋め込むことで、メイン・トランザクションから独立して確定およびロールバックを実行できます。Oracleデータベースでは自律型トランザクションは独立したセッションとして処理されます。つまり、メイン・セッションで加えたデータベースの変更がまだ確定されていない場合は、その変更にはアクセスできません。その結果、たとえば、項目属性を設定できないなど、自律型トランザクションに含まれるワークフロー固有のデータの更新が制限されます。このデータにアクセスできないのは、項目自体がまだ確定されていないうえ、メイン・セッションでロックの競合が発生する可能性があるためです。
Oracle Workflowでは、プロシージャ内で直接コールされる自律型コミットはサポートされません。コミットを実行する必要がある場合は、SQLをサブプロシージャ内に埋め込み、自律型ブロックとして宣言します。このサブプロシージャは、再実行可能である必要があります。また、Oracle Workflowでは、プロシージャ全体をロールバックし、ステータスをERRORに設定することによって、エラーが処理されます。自律型の確定によって実行されるデータベースの更新はロールバックできないため、エラー処理に関する独自の補正ロジックを作成する必要があります。 詳細は、『Oracleデータベース概要』の自律型トランザクションに関する項を参照してください。
| 前へ | 次へ | 目次 | 索引 | 用語集 |