共用方式為


建立上層交易管理員

在 KTM 中, 上層交易管理員 是資源管理員,可為其參與的交易建立上層登記。 上層登記是一項登記,可授與資源管理員協調登記交易認可作業的能力。 換句話說,交易式用戶端或上層交易管理員可以啟動交易的預先準備/準備/認可順序。

在資源管理員建立交易的上層登記之後,KTM 會拒絕對 交易的所有 ZwCommitTransaction 呼叫。 因此,交易式用戶端無法認可這類交易。 相反地,建立上層登記的資源管理員必須呼叫 ZwPrepareEnlistmentZwPrepareEnlistmentZwCommitEnlistment

建立上層交易管理員的時機

假設您想要將交易處理系統 (TPS) 元件與 KTM 整合,但元件包含用戶端可以呼叫的專屬非 KTM 交易管理功能。 在這種情況下,您可能必須建立較佳的交易管理員。

例如,假設您的元件提供自己的介面,供用戶端用來建立和認可交易。 因為元件的用戶端不會呼叫 KTM 來建立或認可交易,所以當您將元件整合到 KTM 型 TPS 時,您的元件必須成為上層交易管理員。

如何建立上層交易管理員

如果您想要讓元件成為上層交易管理員,它必須執行下列動作:

  1. 呼叫 ZwCreateResourceManager 以註冊為資源管理員。

  2. 每次元件用戶端使用元件的用戶端介面建立交易時,呼叫 ZwCreateTransaction

  3. 呼叫 ZwCreateEnlistment、設定ENLISTMENT_SUPERIOR旗標,以及同時指定ENLISTMENT_SUPERIOR_RIGHTS和ENLISTMENT_SUBORDINATE_RIGHTS存取旗標。

  4. 當您的元件用戶端呼叫元件的用戶端介面以認可交易時,呼叫 ZwPrepareEnlistmentZwPrepareEnlistmentZwCommitEnlistment

KTM 只允許每個交易一個上層登記。 其他資源管理員可以建立其他登記。 這些登記稱為 次級登記, 因為它們無法起始認可作業。

若要復原上層登記,您的上層交易管理員會呼叫 ZwRollbackEnlistment

若要復原上層登記,您的上層交易管理員會呼叫 ZwRecoverEnlistment

當上層交易管理員認可、復原或復原交易時,KTM 會將 交易通知 傳送給所有次級登記,讓他們可以參與。

包含上層交易管理員的 TPS 無法使用 單一階段認可作業

在復原作業期間,如果 KTM 無法判斷交易的結果,它會將TRANSACTION_NOTIFY_RECOVER_QUERY通知傳送給上層交易管理員。 在回應中,如果交易可以認可,則上層交易管理員必須呼叫 ZwCommitEnlistment ;如果交易應該回復,則必須呼叫 ZwRollbackEnlistment 。 如果上層交易管理員無法判斷交易的結果,則在判斷結果之前,它不應該回應TRANSACTION_NOTIFY_RECOVER_QUERY通知。