トランザクション・コラボレーションは、データ変更をロールバックできるコラボレーションです。データベース・トランザクションと同様に、トランザクション・コラボレーションは全か無かの操作です。つまり、コラボレーション全体が成功するか、コラボレーション全体が失敗するかのいずれかです。さらに、トランザクション・コラボレーションは、データ操作ロジックを損なう可能性のあるデータ分離違反を検出してそれに反応できます。
トランザクション・コラボレーションは、データベース・トランザクションと 2 フェーズ・コミット・プロトコルで確立している原則に基づいています。ただし、トランザクション・コラボレーションには、データベース・トランザクションとは異なるコラボレーション固有の特性 (任意の数のアプリケーションへの分散、非同期、長期存続、アプリケーションの内部ではなく外部に置かれる、など) があります。
トランザクション・コラボレーションと非トランザクション・コラボレーションは、実行方法が異なります。トランザクション・コラボレーションは、InterChange Server のトランザクション・サービスの制御下で実行します。トランザクション・サービスは、実行、ロールバック、および分離チェックを制御します。
このセクションでは、トランザクション・コラボレーションのコンポーネントについて説明します。
コラボレーション・テンプレートの「最小トランザクション・レベル」プロパティーは、コラボレーションがトランザクションかどうかを決定し、すべてのシナリオに適用されます。テンプレートから作成されたすべてのコラボレーション・オブジェクトは、最小トランザクション・レベルを継承します。
実際のトランザクション・ロジックは、シナリオ・レベルに適用されます。トランザクション・コラボレーションにおいて、各シナリオはトランザクション・シナリオと呼ばれ、シナリオの開始はトランザクションを暗黙的に開始し、シナリオの正常終了はトランザクションを暗黙的にコミットします。
各シナリオは、単一の実行コンテキスト内で実行されます。コラボレーションがコラボレーション・グループの一部の場合、シナリオは別のコラボレーションを呼び出して作業を実行し、戻すことがあります。呼び出されたシナリオは呼び出し元の実行コンテキスト内で実行され、同一のトランザクションの一部となります。
シナリオ内のステップによってアプリケーションのデータが変更されるとき、ステップは自身でアプリケーションのトランザクションを開始します。アプリケーション・トランザクションを引き起こすステップを、サブトランザクション・ステップといいます。これはトランザクション内のトランザクションで、大きなトランザクションはそれ自身がシナリオになります。
トランザクションの概念を示すため、この章では 図 39 のシナリオを使用します。このシナリオは、価格設定管理コラボレーションの一部として更新を扱います。コラボレーションは、ERP アプリケーションが製品の価格を変更すると、その変更を顧客サービス・アプリケーションおよび製品構成アプリケーションに突き合わせます。図では、トランザクションの意味に関係ない処理の詳細をすべて省略しています。
シナリオにはアクション 1 (A1) からアクション 4 (A4) まで 4 つのステップがあり、A、B、および C の 3 つのビジネス・オブジェクトと対話します。ビジネス・オブジェクト A は ERP システム内の特定の製品を表し、B は顧客サービス・アプリケーション内の同一製品を表し、C は製品構成アプリケーション内の同一製品を表します。
シナリオを左側に示します。右側のコメントには、製品マネージャーが ERP システムにログインして製品価格を 700 ドルに変更したときに発生する内容が示されています。
シナリオをトランザクション処理するには、まずサブトランザクション・ステップを識別します。図 40 に、シナリオのサブトランザクション・ステップが A2 と A4 であることを示します。これは、A2 が顧客サービス・アプリケーション、A4 が製品構成アプリケーションのトランザクションをそれぞれ引き起こしているからです。
図 40. トランザクション・シナリオのサブトランザクション・ステップ
A1 や A3 のように要求の検索を実行するステップは、データの変更を伴わないので、サブトランザクション・ステップではありません。
トランザクション・シナリオの障害への応答方法は、非トランザクション・シナリオの障害への応答方法とは異なります。非トランザクション・シナリオが失敗すると、コラボレーションは単にエラーを記録して終了します。トランザクション・シナリオが失敗すると、シナリオはロールバックして、関連するデータベース全体でデータを整合性のある状態にします。
エラーが発生したとき、サブトランザクションによってすでにアプリケーションでの作業のコミットが実行されている場合があります。このため、他のアクションの影響を取り消すアクションである差し戻しステップを使用して、ロールバックを実行します。差し戻しステップは、ロールバック中にのみ実行されます。
ロールバック中、InterChange Server はすべての実行パスを逆方向にたどります。完了したそれぞれのサブトランザクション・ステップに対して、サーバーが関連する差し戻しを実行します。すべての実行済みトランザクション・ステップが差し戻されると、ロールバックが完了します。ロールバック中にエラーが発生した場合、InterChange Server は単にエラーを記録します。
差し戻しステップは、コラボレーション開発者が元のアクションを取り消すために使用する任意のアクションから構成されます。表 8
に、コラボレーション開発者が特定のアクションの差し戻しに使用する可能性のある共通の方法を、いくつかリストします。
アクション | 差し戻し |
---|---|
ビジネス・オブジェクトを作成 | ビジネス・オブジェクトを削除 |
ビジネス・オブジェクトを削除 | ビジネス・オブジェクトを作成 |
ビジネス・オブジェクトを更新 | 以前の値を復元して、ビジネス・オブジェクトを更新 |
一般的に、差し戻しは元のアクションによるデータ変更を元に戻す作業から構成されますが、別の場合もあります。例えば、作成要求に対する差し戻しは、別の作成要求であることがあります。この場合、レコードに監査ログが書き込まれます。したがって、差し戻しは論理的な取り消し操作であり、実際の取り消し操作であるとは限りません。
コラボレーション設計者は、ロールバックを使用できるようにシナリオを設計する必要があります。図 41 に、サンプル・シナリオがロールバックを許可するように変更された状態を示します。
この例は、次のように変更されています。
A2 の実行後に、シナリオにエラーが発生したとします。ロールバックの間、差し戻しステップ C2 が B1 に保管された値を使用して、元の値を B に戻します。
以下の図は、サンプル・シナリオの実行例を示しています。図に示された実行時シーケンスでは、アクション・ステップ A1、A2、および A3 が正常に実行され ます。しかし、A4 の実行中にアプリケーションでエラーが発生します。シナリオが A4 の正常状況ではなくエラーを受信すると、シナリオは失敗し、ロールバックが開始されます。
ステップをさかのぼり、トランザクション・サービスは次のことを実行します。