共用方式為


交易通知

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,但它們也必須支援多階段預先準備、準備和認可通知。

下列清單包含資源管理員可接收的所有通知:

TRANSACTION_NOTIFY_PREPREPARE
傳送時:用戶端會呼叫 ZwCommitTransaction ,且沒有任何資源管理員支援單一階段認可,或如果 上層交易管理員 呼叫 ZwPrepareEnlistment,則為 。

接收者:資源管理員。

收件者的必要動作:執行預先準備作業,然後呼叫 ZwPrepareComplete。 (如需預先準備作業的詳細資訊,請參閱 處理認可作業。)

限制: 資源管理員也必須支援TRANSACTION_NOTIFY_PREPARE和TRANSACTION_NOTIFY_COMMIT。

TRANSACTION_NOTIFY_PREPARE
傳送時:如果用戶端呼叫 ZwCommitTransaction 且沒有資源管理員支援單一階段認可,或進階交易管理員呼叫 ZwPrepareEnlistment,則為TRANSACTION_NOTIFY_PREPREPARE之後。

接收者:資源管理員。

收件者的必要動作: 執行準備作業,然後呼叫 ZwPrepareComplete。 (如需準備作業的詳細資訊,請參閱 處理認可作業。)

限制: 資源管理員也必須支援TRANSACTION_NOTIFY_PREPREPARE和TRANSACTION_NOTIFY_COMMIT。

TRANSACTION_NOTIFY_COMMIT
傳送時:如果用戶端呼叫 ZwCommitTransaction 且沒有資源管理員支援單一階段認可,或在上層交易管理員呼叫 ZwCommitEnlistment時,則為TRANSACTION_NOTIFY_PREPARE。

接收者:資源管理員。

收件者的必要動作:執行認可作業,然後呼叫 ZwCommitComplete。 (如需認可作業的詳細資訊,請參閱 處理認可作業。)

限制: 資源管理員也必須支援TRANSACTION_NOTIFY_PREPREPARE和TRANSACTION_NOTIFY_PREPARE。

TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT
傳送時:用戶端會呼叫 ZwCommitTransaction ,而資源管理員支援單階段認可作業。

接收者:資源管理員。

收件者的必要動作:認可交易或呼叫 ZwSinglePhaseReject。 (如需單階段認可作業的詳細資訊,請參閱 處理認可作業。)

限制: 資源管理員也必須支援TRANSACTION_NOTIFY_PREPREPARE、TRANSACTION_NOTIFY_PREPARE和TRANSACTION_NOTIFY_COMMIT。

TRANSACTION_NOTIFY_ROLLBACK
傳送時:用戶端呼叫 ZwRollbackTransaction時,上層交易管理員會呼叫 ZwRollbackEnlistment,或 KTM 偵測到錯誤 (例如無法寫入記錄資料流程) 。

接收者:資源管理員和上層交易管理員。

收件者的必要動作:執行復原交易資料所需的任何作業,然後呼叫 ZwRollbackComplete。 (如需復原作業的詳細資訊,請參閱 處理復原作業。)

限制: 所有資源管理員和上層交易管理員都必須支援TRANSACTION_NOTIFY_ROLLBACK。

TRANSACTION_NOTIFY_RECOVER
傳送時:資源管理員會呼叫 ZwRecoverResourceManager

接收者:資源管理員。

收件者的必要動作:資源管理員必須呼叫 ZwRecoverEnlistment。 (如需復原作業的詳細資訊,請參閱 處理復原作業。)

限制 :無。

TRANSACTION_NOTIFY_LAST_RECOVER
傳送時:KTM 傳送資源管理員登記的最後一個TRANSACTION_NOTIFY_RECOVER之後。

接收者:資源管理員。

收件者的必要動作:結束復原作業。 (如需復原作業的詳細資訊,請參閱 處理復原作業。)

限制 :無。

TRANSACTION_NOTIFY_INDOUBT
傳送時:在資源管理員呼叫 ZwRecoverEnlistment之後,如果 KTM 無法判斷交易是否應該認可或回復 (通常是因為 TPS 有無法使用) 的上層交易管理員。

接收者:資源管理員。

收件者的必要動作:在 KTM 傳送TRANSACTION_NOTIFY_COMMIT或TRANSACTION_NOTIFY_ROLLBACK之前,不執行任何動作。

限制 :無。

TRANSACTION_NOTIFY_RM_DISCONNECTED
傳送時:處理單一階段認可作業的資源管理員會關閉登記控制碼,而不會指出它已認可或回復交易。

接收者:具有交易登記的資源管理員和上層交易管理員。

收件者的必要動作:交易特定的清除作業。 一般而言,此通知對唯讀資源管理員很有用。

限制 :無。

進階交易管理員的通知

上層交易管理員 可以接收下列通知:

TRANSACTION_NOTIFY_ROLLBACK
請參閱先前的描述。

TRANSACTION_NOTIFY_RM_DISCONNECTED
請參閱先前的描述。

TRANSACTION_NOTIFY_PREPREPARE_COMPLETE
傳送時:呼叫 ZwPrepareComplete收到TRANSACTION_NOTIFY_PREPREPARE並回應所有資源管理員之後。

接收者:上層交易管理員。

收件者的必要動作:上層交易管理員應該呼叫 ZwPrepareEnlistment

TRANSACTION_NOTIFY_PREPARE_COMPLETE
傳送時:所有資源管理員都收到TRANSACTION_NOTIFY_PREPARE,並藉由呼叫 ZwPrepareComplete來回應。

接收者:上層交易管理員。

收件者的必要動作:上層交易管理員應該呼叫 ZwCommitEnlistment

TRANSACTION_NOTIFY_COMMIT_COMPLETE
傳送時:所有資源管理員都收到TRANSACTION_NOTIFY_COMMIT,並透過呼叫 ZwCommitComplete來回應。

接收者:上層交易管理員。

收件者的必要動作:交易清除作業。

TRANSACTION_NOTIFY_ROLLBACK_COMPLETE
傳送時:所有資源管理員都收到TRANSACTION_NOTIFY_ROLLBACK,並藉由呼叫 ZwRollbackComplete來回應。

接收者:上層交易管理員。

收件者的必要動作:交易清除作業。

TRANSACTION_NOTIFY_RECOVER_QUERY
傳送時:上層交易管理員會呼叫 ZwRecoverResourceManager

接收者:上層交易管理員。

收件者的必要動作:上層交易管理員必須針對登記呼叫 ZwCommitEnlistmentZwRollbackEnlistment

TRANSACTION_NOTIFY_COMMIT_REQUEST
傳送時:用戶端會呼叫 ZwCommitTransaction。 如果上層交易管理員已註冊此通知以進行登記,KTM 會將TRANSACTION_NOTIFY_COMMIT_REQUEST傳送給上層交易管理員, 而不是 將TRANSACTION_NOTIFY_COMMIT傳送給資源管理員。

接收者:上層交易管理員。

收件者的必要動作:上層交易管理員會呼叫 ZwCommitEnlistment

TRANSACTION_NOTIFY_REQUEST_OUTCOME
傳送時:當交易處於備妥狀態時,資源管理員會呼叫 TmRequestOutcomeEnlistment

接收者:上層交易管理員。

收件者的必要動作:上層交易管理員必須呼叫 ZwCommitEnlistmentZwRollbackEnlistment

未使用的通知

下列通知是在 Ktmtypes.h 中定義,但 KTM 目前不支援這些通知:

TRANSACTION_NOTIFY_DELEGATE_COMMIT

TRANSACTION_NOTIFY_ENLIST_MASK

TRANSACTION_NOTIFY_ENLIST_PREPREPARE

TRANSACTION_NOTIFY_MARSHAL

TRANSACTION_NOTIFY_PROMOTE

TRANSACTION_NOTIFY_PROMOTE_NEW

TRANSACTION_NOTIFY_PROPAGATE_PULL

TRANSACTION_NOTIFY_PROPAGATE_PUSH

TRANSACTION_NOTIFY_TM_ONLINE

TRANSACTION_NOTIFY_COMMIT_FINALIZE