Compartir a través de


Creación de un administrador de transacciones superior

En KTM, un administrador de transacciones superior es un administrador de recursos que crea inscripciones superiores para las transacciones en las que participa. Una inscripción superior es una inscripción que concede al administrador de recursos la capacidad de coordinar la operación de confirmación para la transacción de la inscripción. En otras palabras, un cliente transaccional o el administrador de transacciones superior pueden iniciar la secuencia de preparación previa, preparación y confirmación de la transacción.

Una vez que un administrador de recursos ha creado una inscripción superior para una transacción, KTM rechaza todas las llamadas a ZwCommitTransaction para la transacción. Por lo tanto, los clientes transaccionales no pueden confirmar dicha transacción. En su lugar, el administrador de recursos que creó la inscripción superior debe llamar a ZwPrepareEnlistment, ZwPrepareEnlistment y ZwCommitEnlistment.

Cuándo crear un administrador de transacciones superior

Supongamos que desea integrar un componente del sistema de procesamiento de transacciones (TPS) con KTM, pero el componente contiene sus propias funcionalidades que no son de administración de transacciones KTM a las que pueden llamar los clientes. En tal situación, es posible que tenga que crear un administrador de transacciones superior.

Por ejemplo, supongamos que el componente proporciona sus propias interfaces que los clientes usan para crear y confirmar transacciones. Dado que los clientes del componente no llaman a KTM para crear o confirmar transacciones, el componente debe convertirse en un administrador de transacciones superior al integrarlo en un TPS basado en KTM.

Creación de un administrador de transacciones superior

Si desea que el componente sea un administrador de transacciones superior, debe hacer lo siguiente:

  1. Llame a ZwCreateResourceManager para registrarse como administrador de recursos.

  2. Llame a ZwCreateTransaction cada vez que un cliente del componente cree una transacción mediante la interfaz de cliente del componente.

  3. Llame a ZwCreateEnlistment, establezca la marca ENLISTMENT_SUPERIOR y especifique las marcas de acceso ENLISTMENT_SUPERIOR_RIGHTS y ENLISTMENT_SUBORDINATE_RIGHTS.

  4. Llame a ZwPrepareEnlistment, ZwPrepareEnlistment y ZwCommitEnlistment cuando el cliente del componente llame a la interfaz de cliente del componente para confirmar la transacción.

KTM solo permite una inscripción superior por transacción. Otros administradores de recursos pueden crear inscripciones adicionales. Estas inscripciones se denominan inscripciones subordinadas porque no pueden iniciar la operación de confirmación.

Para revertir una inscripción superior, el administrador de transacciones superior llama a ZwRollbackEnlistment.

Para recuperar una inscripción superior, el administrador de transacciones superior llama a ZwRecoverEnlistment.

Cuando un administrador de transacciones superior confirma, revierte o recupera una transacción, KTM envía notificaciones de transacción a todas las inscripciones subordinadas para que puedan participar.

Un TPS que incluya un administrador de transacciones superior no puede usar operaciones de confirmación de fase única.

Durante una operación de recuperación, si KTM no puede determinar el resultado de una transacción, envía una notificación TRANSACTION_NOTIFY_RECOVER_QUERY al administrador de transacciones superior. En respuesta, el administrador de transacciones superior debe llamar a ZwCommitEnlistment si la transacción se puede confirmar o ZwRollbackEnlistment si la transacción debe revertirse. Si el administrador de transacciones superior no puede determinar el resultado de una transacción, no debe responder a la notificación de TRANSACTION_NOTIFY_RECOVER_QUERY hasta que pueda determinar un resultado.