KTM 會為每個資源管理員提供通知佇列。 KTM 會透過將通知放入資源管理員的佇列中來傳遞通知。
資源管理員可以同步或非同步地從其佇列擷取通知。
若要同步擷取通知,資源管理員可以重複呼叫 ZwGetNotificationResourceManager。
若要以非同步方式接收通知,資源管理員可以呼叫 TmEnableCallbacks 來設定回呼常式。 KTM 每次將通知放入資源管理員佇列時都會呼叫回呼常式。
當資源管理員呼叫 ZwCreateEnlistment 來建立交易的登記時,資源管理員會指定它應該接收的通知類型。 資源管理員只會收到他們註冊接收的通知。
通知常數定義在 Ktmtypes.h 中。 通知常數名稱的格式為 TRANSACTION_NOTIFY_Xxx。
本主題的其餘部分會列出 Ktmtypes.h 所定義的所有通知常數,並將它們分成三個群組:
資源管理員可以接收的通知
上級交易管理員可以接收的通知
已定義但目前未使用的通知常數
資源管理員的通知
所有資源管理員都必須註冊以接收TRANSACTION_NOTIFY_PREPREPARE、TRANSACTION_NOTIFY_PREPARE和TRANSACTION_NOTIFY_COMMIT通知,即使他們隨後呼叫ZwReadOnlyEnlistment將註冊標記為唯讀。
資源管理員可以支援 TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT,但也必須支援多階段的預先準備、準備、和提交通知。
下列清單包含資源管理員可以接收的所有通知:
交易通知預準備
傳送時:用戶端會呼叫 ZwCommitTransaction ,而且沒有資源管理員支援單一階段認可,或 如果上層交易管理員 呼叫 ZwPrePrepareEnlistment。
接收者:資源管理員。
收件者所需的動作:執行預先準備作業,然後呼叫 ZwPrePrepareComplete。 (如需預先準備作業的詳細資訊,請參閱 處理認可作業。
限制: 資源管理員也必須支援TRANSACTION_NOTIFY_PREPARE和TRANSACTION_NOTIFY_COMMIT。
TRANSACTION_NOTIFY_PREPARE
傳送時:在TRANSACTION_NOTIFY_PREPREPARE之後,如果用戶端呼叫 ZwCommitTransaction ,且沒有資源管理員支援單階段提交,或上級交易管理員呼叫 ZwPrepareEnlistment。
接收者:資源管理員。
收件者所需的動作: 執行準備作業,然後呼叫 ZwPrepareComplete。 (如需準備作業的詳細資訊,請參閱 處理認可作業。)
限制: 資源管理員也必須支援TRANSACTION_NOTIFY_PREPREPARE和TRANSACTION_NOTIFY_COMMIT。
TRANSACTION_NOTIFY_COMMIT
傳送時:在TRANSACTION_NOTIFY_PREPARE之後,如果用戶端呼叫 ZwCommitTransaction 且無資源管理員支援單相認可,或若上層交易管理員呼叫 ZwCommitEnlistment。
接收者:資源管理員。
收件者所需的動作:執行認可作業,然後呼叫 ZwCommitComplete。 (如需認可作業的詳細資訊,請參閱 處理認可作業。)
㯻: 資源管理員也必須支援TRANSACTION_NOTIFY_PREPREPARE和TRANSACTION_NOTIFY_PREPARE。
交易通知單一階段提交
傳送時:用戶端會呼叫 ZwCommitTransaction ,而資源管理員支援單一階段認可作業。
接收者:資源管理員。
收件者所需的動作:認可交易或呼叫 ZwSinglePhaseReject。 (如需單階段認可作業的詳細資訊,請參閱 處理認可作業。
限制: 資源管理員也必須支援 TRANSACTION_NOTIFY_PREPREPARE、TRANSACTION_NOTIFY_PREPARE 和 TRANSACTION_NOTIFY_COMMIT。
TRANSACTION_NOTIFY_ROLLBACK
傳送時:用戶端呼叫 ZwRollbackTransaction、上層交易管理員呼叫 ZwRollbackEnlistment,或 KTM 偵測到錯誤 (,例如寫入記錄資料流程失敗) 。
接收者:資源管理員和上級交易管理員。
收件者所需的動作:執行復原交易數據所需的任何作業,然後呼叫 ZwRollbackComplete。 (如需復原作業的詳細資訊,請參閱 處理復原作業。
㯻: 所有資源管理員和上級交易管理員都必須支援TRANSACTION_NOTIFY_ROLLBACK。
交易通知恢復
傳送時:資源管理員會呼叫 ZwRecoverResourceManager。
接收者:資源管理員。
收件者所需的動作:資源管理員必須呼叫 ZwRecoverEnlistment。 (如需復原作業的詳細資訊,請參閱 處理復原作業。
限制: 沒有。
TRANSACTION_NOTIFY_LAST_RECOVER(交易最後恢復通知)
傳送時:在 KTM 傳送資源管理員登記的最後一個TRANSACTION_NOTIFY_RECOVER之後。
接收者:資源管理員。
收件者所需的動作:結束復原作業。 (如需復原作業的詳細資訊,請參閱 處理復原作業。
限制: 沒有。
交易通知待定
傳送時:在資源管理員呼叫 ZwRecoverEnlistment 之後,如果 KTM 無法判斷交易是否應該被提交或回復(通常是因為 TPS 的上級交易管理員無法使用)。
接收者:資源管理員。
收件者所需的動作:在 KTM 傳送TRANSACTION_NOTIFY_COMMIT或TRANSACTION_NOTIFY_ROLLBACK之前,不要執行任何動作。
限制: 沒有。
TRANSACTION_NOTIFY_RM_DISCONNECTED
傳送時:處理單一階段認可作業的資源管理員會關閉登記控制碼,但不會指出它已認可或復原交易。
接收者:具有交易登記的資源管理員和上層交易管理員。
收件者所需的動作:交易特定的清除作業。 一般而言,此通知對唯讀資源管理員很有用。
限制: 沒有。
給高級交易經理的通知
上級交易管理員 可以收到以下通知:
TRANSACTION_NOTIFY_ROLLBACK
請參閱先前的描述。
TRANSACTION_NOTIFY_PREPREPARE_COMPLETE
傳送時:在所有資源管理員收到TRANSACTION_NOTIFY_PREPREPARE並呼叫 ZwPrePrepareComplete 來回應之後。
接收者:高級交易經理。
收件者所需的動作:上級交易管理員應該呼叫 ZwPrepareEnlistment。
交易通知準備完成
傳送時:在所有資源管理員收到TRANSACTION_NOTIFY_PREPARE並呼叫 ZwPrepareComplete 來回應之後。
接收者:高級交易經理。
收件者所需的動作:上層交易管理員應該呼叫 ZwCommitEnlistment。
交易通知提交完成
傳送時:在所有資源管理員收到TRANSACTION_NOTIFY_COMMIT並呼叫 ZwCommitComplete 來回應之後。
接收者:資深交易管理者。
收件者所需的動作:交易清除作業。
交易通知回滾完成
傳送時:在所有資源管理員收到TRANSACTION_NOTIFY_ROLLBACK並呼叫 ZwRollbackComplete 進行回應之後。
接收者:高級交易經理。
收件者所需的動作:交易清除作業。
TRANSACTION_NOTIFY_RECOVER_QUERY
傳送時:上層交易管理員會呼叫 ZwRecoverResourceManager。
接收者:高級交易經理。
收件者所需的動作:上層交易管理員必須呼叫 ZwCommitEnlistment 或 ZwRollbackEnlistment 才能進行登記。
TRANSACTION_NOTIFY_COMMIT_REQUEST
傳送時:用戶端會呼叫 ZwCommitTransaction。 如果上層交易管理員已註冊此通知以進行登記,KTM 會將TRANSACTION_NOTIFY_COMMIT_REQUEST傳送至上層交易管理員, 而不是 將TRANSACTION_NOTIFY_COMMIT傳送至資源管理員。
接收者:高級交易經理。
收件者所需的動作:上層交易管理員會呼叫 ZwCommitEnlistment。
交易通知請求結果
傳送時:資源管理員會在交易處於備妥狀態時呼叫 TmRequestOutcomeEnlistment 。
接收者:高級交易經理。
收件者所需的動作:上層交易管理員必須呼叫 ZwCommitEnlistment 或 ZwRollbackEnlistment。
未使用的通知
下列通知定義在 Ktmtypes.h 中,但 KTM 目前不支援它們:
TRANSACTION_NOTIFY_DELEGATE_COMMIT
TRANSACTION_NOTIFY_ENLIST_MASK
交易通知登記準備預處理
TRANSACTION_NOTIFY_MARSHAL
交易通知提升
交易通知促銷新條款
TRANSACTION_NOTIFY_PROPAGATE_PULL
交易_通知_傳播_推送
交易通知_TM_在線
交易_通知_提交_完成