上位トランザクション マネージャーの作成

KTM では、 上位トランザクションマネージャー は、参加しているトランザクションの上位の参加リストを作成するリソースマネージャーです。 上位の参加リストは、リソースマネージャーに対して、参加リストのトランザクションのコミット操作を調整する機能を与える参加リストです。 言い換えると、トランザクションクライアントまたは上位トランザクションマネージャーは、トランザクションの準備前/準備/コミットシーケンスを開始できます。

リソースマネージャーがトランザクションの上位の参加リストを作成した後、KTM はトランザクションの Zwcommittransaction へのすべての呼び出しを拒否します。 したがって、トランザクションクライアントはこのようなトランザクションをコミットできません。 代わりに、上位の参加リストを作成したリソースマネージャーは、 Zwpreの参加リストzw/参加リスト、および zwcommit参加リストを呼び出す必要があります。

上位トランザクションマネージャーを作成する場合

トランザクション処理システム (TPS) コンポーネントを KTM に統合するが、コンポーネントには、クライアントが呼び出すことができる独自の非 KTM トランザクション管理機能が含まれているとします。 このような状況では、より優れたトランザクションマネージャーの作成が必要になる場合があります。

たとえば、クライアントがトランザクションを作成およびコミットするために使用する独自のインターフェイスがコンポーネントに用意されているとします。 コンポーネントのクライアントは、トランザクションを作成またはコミットするために KTM を呼び出しません。そのため、コンポーネントは、KTM ベースの TP に統合するときに、上位のトランザクションマネージャーになる必要があります。

上位トランザクションマネージャーを作成する方法

コンポーネントが上位トランザクションマネージャーになるようにするには、次の操作を行う必要があります。

  1. Zwcreateresourcemanagerを呼び出して、リソースマネージャーとして登録します。

  2. コンポーネントのクライアントがコンポーネントのクライアントインターフェイスを使用してトランザクションを作成するたびに、 Zwcreatetransaction を呼び出します。

  3. Zwcreateenlistment リストを呼び出し、ENLISTMENT_SUPERIOR フラグを設定し、ENLISTMENT_SUPERIOR_RIGHTS と ENLISTMENT_SUBORDINATE_RIGHTS の両方のアクセスフラグを指定します。

  4. コンポーネントのクライアントがコンポーネントのクライアントインターフェイスを呼び出してトランザクションをコミットするときに、 Zwpreの参加リストzwの参加リスト、および zwcommit参加 リストを呼び出します。

KTM では、トランザクションごとに1つの上位参加リストのみを許可します。 他のリソースマネージャーは、追加の参加を作成できます。 これらの参加リストは、コミット操作を開始できないため、 下位参加リスト と呼ばれます。

優れた参加リストをロールバックするために、上位トランザクションマネージャーは ZwRollbackEnlistmentを呼び出します。

優れた参加リストを復旧するために、上位トランザクションマネージャーは Zw回復参加リストを呼び出します。

上位トランザクションマネージャーがトランザクションをコミット、ロールバック、または復旧すると、KTM はトランザクション 通知 をすべての下位参加要素に送信して参加できるようにします。

上位トランザクションマネージャーを含む TPS は、 単一フェーズコミット操作を使用できません。

復旧操作中に、KTM がトランザクションの結果を判断できない場合は、TRANSACTION_NOTIFY_RECOVER_QUERY 通知が上位トランザクションマネージャーに送信されます。 応答として、トランザクションをコミット できる場合は 、またはトランザクションをロールバックする必要がある場合は、 ZwRollbackEnlistment を呼び出す必要があります。 上位トランザクションマネージャーがトランザクションの結果を判断できない場合、結果を特定できるまで TRANSACTION_NOTIFY_RECOVER_QUERY 通知に応答しません。