Compartir a través de


Notificaciones de transacción

KTM proporciona una cola de notificaciones para cada administrador de recursos. KTM entrega notificaciones a un administrador de recursos colocandolas en la cola del administrador de recursos.

Un administrador de recursos puede recuperar notificaciones de su cola de forma sincrónica o asincrónica.

  • Para recuperar notificaciones de forma sincrónica, el administrador de recursos puede llamar repetidamente a ZwGetNotificationResourceManager.

  • Para recibir notificaciones de forma asincrónica, el administrador de recursos puede llamar a TmEnableCallbacks para configurar una rutina de devolución de llamada. KTM llama a la rutina de devolución de llamada cada vez que coloca una notificación en la cola del administrador de recursos.

Cuando un administrador de recursos llama a ZwCreateEnlistment para crear una inscripción para una transacción, el administrador de recursos especifica los tipos de notificaciones que debe recibir. Los administradores de recursos solo reciben notificaciones que se registran para recibir.

Las constantes de notificación se definen en Ktmtypes.h. Los nombres de constantes de notificación tienen un formato de TRANSACTION_NOTIFY_Xxx.

En el resto de este tema se enumeran todas las constantes de notificación que Ktmtypes.h define y las divide en tres grupos:

  • Notificaciones que los administradores de recursos pueden recibir

  • Notificaciones que pueden recibir administradores de transacciones superiores

  • Constantes de notificación definidas pero que actualmente no se usan

Notificaciones para administradores de recursos

Todos los administradores de recursos deben registrarse para recibir notificaciones de TRANSACTION_NOTIFY_PREPREPARE, TRANSACTION_NOTIFY_PREPARE y TRANSACTION_NOTIFY_COMMIT, incluso si posteriormente llaman a ZwReadOnlyEnlistment para marcar un alistamiento como de solo lectura.

Los administradores de recursos pueden admitir TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT, pero también deben admitir las notificaciones de pre-preparación, preparación y confirmación de varias fases.

La lista siguiente contiene todas las notificaciones que pueden recibir los administradores de recursos:

TRANSACTION_NOTIFY_PREPARAR_PREVIO
Cuando se envía: un cliente llama a ZwCommitTransaction y ningún administrador de recursos admite la confirmación de una sola fase, o si un administrador de transacciones superior llama a ZwPrePrepareEnlistment.

Recibido por: Administradores de recursos.

Acción necesaria del destinatario: realice operaciones previas a la preparación y, a continuación, llame a ZwPrePrepareComplete. (Para obtener más información sobre las operaciones de pre-preparación, consulte Manejo de operaciones de confirmación.)

Restricciones: El administrador de recursos también debe admitir TRANSACTION_NOTIFY_PREPARE y TRANSACTION_NOTIFY_COMMIT.

TRANSACTION_NOTIFY_PREPARE
Cuando se envía: después de TRANSACTION_NOTIFY_PREPREPARE si un cliente llama a ZwCommitTransaction y ningún administrador de recursos admite la confirmación de una sola fase, o si un administrador de transacciones superior llama a ZwPrepareEnlistment.

Recibido por: Administradores de recursos.

Acción necesaria del destinatario: Realice operaciones de preparación y llame a ZwPrepareComplete. (Para obtener más información sobre las operaciones de preparación, consulte Manejo de Operaciones de Confirmación.)

Restricciones: El administrador de recursos también debe admitir TRANSACTION_NOTIFY_PREPREPARE y TRANSACTION_NOTIFY_COMMIT.

TRANSACTION_NOTIFICAR_CONFIRMAR
Cuando se envía: después de TRANSACTION_NOTIFY_PREPARE si un cliente llama a ZwCommitTransaction y ningún administrador de recursos admite la confirmación de una sola fase, o si un administrador de transacciones superior llama a ZwCommitEnlistment.

Recibido por: Administradores de recursos.

Acción necesaria del destinatario: realice operaciones de confirmación y, a continuación, llame a ZwCommitComplete. (Para obtener más información sobre las operaciones de confirmación, vea Control de operaciones de confirmación).

Restricciones: El administrador de recursos también debe admitir TRANSACTION_NOTIFY_PREPREPARE y TRANSACTION_NOTIFY_PREPARE.

NOTIFICAR_TRANSACCIÓN_CONFIRMAR_FASE_ÚNICA
Cuando se envía: un cliente llama a ZwCommitTransaction y un administrador de recursos admite operaciones de confirmación de fase única.

Recibido por: Administradores de recursos.

Acción necesaria del destinatario: confirme la transacción o llame a ZwSinglePhaseReject. (Para obtener más información sobre las operaciones de confirmación de una sola fase, consulte Control de operaciones de confirmación).

Restricciones: El administrador de recursos también debe admitir TRANSACTION_NOTIFY_PREPREPARE, TRANSACTION_NOTIFY_PREPARE y TRANSACTION_NOTIFY_COMMIT.

NOTIFICAR_ROLLBACK_DE_TRANSACCIÓN
Cuando se envía: un cliente llama a ZwRollbackTransaction, un administrador de transacciones superior llama a ZwRollbackEnlistment o KTM detecta un error (por ejemplo, una escritura errónea en la secuencia de registro).

Recibido por: administradores de recursos y administradores de transacciones superiores.

Acción necesaria del destinatario: realice las operaciones necesarias para revertir los datos de la transacción y, a continuación, llame a ZwRollbackComplete. (Para obtener más información sobre las operaciones de reversión, consulte Control de operaciones de reversión).

Restricciones: Todos los administradores de recursos y los administradores de transacciones superiores deben admitir TRANSACTION_NOTIFY_ROLLBACK.

TRANSACTION_NOTIFY_RECOVER
Cuando se envía: un administrador de recursos llama a ZwRecoverResourceManager.

Recibido por: Administradores de recursos.

Acción necesaria del destinatario: el administrador de recursos debe llamar a ZwRecoverEnlistment. (Para obtener más información sobre las operaciones de recuperación, consulte Control de operaciones de recuperación).

Restricciones: Ninguno.

NOTIFICAR_ULTIMA_RECUPERACIÓN_DE_TRANSACCIÓN
Cuando se envía: después de que KTM haya enviado el último TRANSACTION_NOTIFY_RECOVER para los enlistamientos de un administrador de recursos.

Recibido por: Administradores de recursos.

Acción necesaria del destinatario: finalice la operación de recuperación. (Para obtener más información sobre las operaciones de recuperación, consulte Control de operaciones de recuperación).

Restricciones: Ninguno.

TRANSACTION_NOTIFY_INDOUBT
Cuando se envía: después de que un administrador de recursos llame a ZwRecoverEnlistment, si KTM no puede determinar si la transacción debe confirmarse o revertirse (normalmente porque el TPS tiene un administrador de transacciones superior que no está disponible).

Recibido por: Administradores de recursos.

Acción necesaria del destinatario: no haga nada hasta que KTM envíe TRANSACTION_NOTIFY_COMMIT o TRANSACTION_NOTIFY_ROLLBACK.

Restricciones: Ninguno.

TRANSACTION_NOTIFY_RM_DISCONNECTED
Cuando se envía: el administrador de recursos que controla una operación de confirmación de una sola fase cierra el identificador de inscripción sin indicar que se ha confirmado o revertida la transacción.

Recibido por: Administradores de recursos y administradores de transacciones superiores que tienen alistamientos para la transacción.

Acción necesaria del destinatario: operaciones de limpieza específicas de la transacción. Normalmente, esta notificación es útil para administradores de recursos de solo lectura.

Restricciones: Ninguno.

Notificaciones para administradores de transacciones superiores

Los administradores de transacciones superiores pueden recibir las siguientes notificaciones:

NOTIFICAR_ROLLBACK_DE_TRANSACCIÓN
Consulte la descripción anterior.

TRANSACTION_NOTIFY_RM_DISCONNECTED
Consulte la descripción anterior.

TRANSACTION_NOTIFY_PREPREPARE_COMPLETE
Cuando se envía: después de que todos los administradores de recursos hayan recibido TRANSACTION_NOTIFY_PREPREPARE y respondan llamando a ZwPrepareComplete.

Recibido por: Administradores de transacciones superiores.

Acción necesaria del destinatario: el administrador de transacciones superior debe llamar a ZwPrepareEnlistment.

TRANSACTION_NOTIFY_PREPARE_COMPLETE
Cuando se envía: después de que todos los administradores de recursos hayan recibido TRANSACTION_NOTIFY_PREPARE y respondan llamando a ZwPrepareComplete.

Recibido por: Administradores de transacciones superiores.

Acción necesaria del destinatario: el administrador de transacciones superior debe llamar a ZwCommitEnlistment.

TRANSACTION_NOTIFY_COMMIT_COMPLETE
Cuando se envía: después de que todos los administradores de recursos hayan recibido TRANSACTION_NOTIFY_COMMIT y respondieron llamando a ZwCommitComplete.

Recibido por: Administradores de transacciones superiores.

Acción necesaria del destinatario: operaciones de limpieza de transacciones.

NOTIFICACIÓN_DE_TRANSACCIÓN_REVERTIR_COMPLETO
Cuando se envía: después de que todos los administradores de recursos hayan recibido TRANSACTION_NOTIFY_ROLLBACK y respondieron llamando a ZwRollbackComplete.

Recibido por: Administradores de transacciones superiores.

Acción necesaria del destinatario: operaciones de limpieza de transacciones.

TRANSACTION_NOTIFY_RECOVER_QUERY
Cuando se envía: un administrador de transacciones superior llama a ZwRecoverResourceManager.

Recibido por: Administradores de transacciones superiores.

Acción necesaria del destinatario: el administrador de transacciones superior debe llamar a ZwCommitEnlistment o ZwRollbackEnlistment para la inscripción.

SOLICITUD_NOTIFICACIÓN_COMMIT_TRANSACCIÓN
Cuando se envía: un cliente llama a ZwCommitTransaction. Si un administrador de transacciones superior se ha registrado para esta notificación para una inscripción, KTM envía TRANSACTION_NOTIFY_COMMIT_REQUEST al administrador de transacciones superior en lugar de enviar TRANSACTION_NOTIFY_COMMIT a los administradores de recursos.

Recibido por: Administradores de transacciones superiores.

Acción necesaria del destinatario: el administrador de transacciones superior llama a ZwCommitEnlistment.

TRANSACTION_NOTIFY_REQUEST_OUTCOME
Cuando se envía: un administrador de recursos llama a TmRequestOutcomeEnlistment mientras la transacción está en su estado preparado.

Recibido por: Administradores de transacciones superiores.

Acción necesaria del destinatario: el administrador de transacciones superior debe llamar a ZwCommitEnlistment o ZwRollbackEnlistment.

Notificaciones sin usar

Las siguientes notificaciones se definen en Ktmtypes.h, pero KTM actualmente no las admite:

NOTIFICACIÓN_TRANSACCIÓN_DELEGAR_CONFIRMAR

TRANSACTION_NOTIFY_ENLIST_MASK

TRANSACTION_NOTIFY_ENLIST_PREPREPARE

NOTIFICACIÓN_TRANSACCIÓN_MARSHAL

Notificación de promoción de transacción

NOTIFICAR_PROMOCIÓN_TRANSACCIÓN_NUEVA

TRANSACTION_NOTIFY_PROPAGATE_PULL

TRANSACTION_NOTIFY_PROPAGATE_PUSH

TRANSACTION_NOTIFY_TM_ONLINE

NOTIFICAR_TRANSACCIÓN_COMPROMISO_FINALIZAR