リソース マネージャーは、トランザクション マネージャー ログを使用してトランザクションの状態を追跡します。 トランザクションを処理するときのリソース マネージャーのアクションは次のとおりです。
- クライアントは、トランザクションを RM に明示的に渡します。
- CreateEnlistmentを使用して、RM がトランザクションに参加します。
- その後、ユーザーは任意の操作の実行に進むことができます。
- ユーザーが CommitTransaction を呼び出すと、KTM は RM にPREPARE_TRANSACTION通知を送信します。 この時点で、RM はトランザクションのコミットに必要な変更をディスクにフラッシュしますが、失敗する可能性があります。 これらの操作が成功した場合、RM は PrepareComplete呼び出して準備操作が完了したことを通知します。 これらの操作が失敗した場合、RM は rollBackEnlistment呼び出すことによって応答します。
- リソース マネージャーは準備通知を受け取ります。
- リソース マネージャーは、トランザクションに関連付けられているすべてのデータを、その Common Log Services ログ ファイルにフラッシュします。
- リソース マネージャーは、PrepareComplete 関数を呼び出し、KTM からトランザクションの結果を受け取るのを待機します。
- トランザクションの結果に応じて、リソース マネージャーはコミットまたはロールバック通知イベントを受け取ります。 リソース マネージャーは、コミット通知を受け取った場合、変更を永続的にし、CommitComplete 関数を呼び出すことによって KTM に通知します。 リソース マネージャーは、ロールバック通知を受け取った場合、すべての変更を破棄し、トランザクションされた変更の前に存在していた状態に戻り、RollbackComplete呼び出して KTM に通知します。
Resource Manager 関数
リソース マネージャーでは、次の関数が使用されます。
| 機能 | 形容 |
|---|---|
| CreateResourceManagerの | 新しいリソース マネージャー (RM) オブジェクトを作成し、RM をトランザクション マネージャー (TM) に関連付けます。 |
| GetNotificationResourceManagerの | リソース マネージャー (RM) の通知を要求して受信します。 この関数は、トランザクションが状態を変更したときに通知を受信するために RM レジスタによって使用されます。 |
| GetNotificationResourceManagerAsyncの | リソース マネージャー (RM) の非同期通知を要求および受信します。 この関数は、トランザクションが状態を変更したときに通知を受信するために RM レジスタによって使用されます。 |
| OpenResourceManager | 既存のリソース マネージャー (RM) を開きます。 |
| PrepareCompleteの | リソース マネージャー (RM) が、指定されたトランザクションのコミットまたは中止操作が成功することを保証するために必要なすべての処理を完了したことを示します。 |
| PrePrepareComplete | 他のリソース マネージャーが準備操作を開始できるように、このリソース マネージャーが事前準備作業を完了したことを通知します。 |
| SetResourceManagerCompletionPortの | 指定した I/O 完了ポートを、指定したリソース マネージャー (RM) に関連付けます。 このポートは、RM のすべての通知を受信します。 |