Creación de un cliente transaccional

Un cliente transaccional es un componente del sistema de procesamiento de transacciones (TPS) que usa la interfaz exportada de un administrador de recursos para acceder a un recurso, como una base de datos, que admite el administrador de recursos.

Normalmente, el cliente crea una transacción, realiza un conjunto de operaciones de base de datos y, a continuación, confirma la transacción para que las operaciones sean permanentes. Si el cliente encuentra un error, puede revertir la transacción para quitar las operaciones de la transacción en lugar de confirmar la transacción.

Normalmente, un cliente transaccional que usa el modo kernel KTM debe realizar las siguientes tareas para cada transacción:

  1. Cree un objeto de transacción.

    Una llamada a ZwCreateTransaction crea un objeto de transacción, proporciona un identificador de objeto y asigna un identificador de objeto (un GUID) que el cliente puede pasar al administrador de recursos para identificar la transacción.

  2. Obtenga el identificador del objeto de transacción.

    El cliente puede llamar a ZwQueryInformationTransaction para obtener el identificador de objeto.

  3. Pase el identificador del objeto de transacción a un administrador de recursos.

    Normalmente, el cliente llama a la interfaz exportada del administrador de recursos para abrir una ruta de comunicación al administrador de recursos y asociar la ruta de acceso a la transacción. Por ejemplo, el administrador de recursos podría proporcionar una rutina CreateDataObject similar a la que describe el tema Descripción de los componentes de TPS .

  4. Realice operaciones que se incluirán en la transacción.

    Normalmente, el cliente llama a la interfaz del administrador de recursos para acceder al recurso del administrador de recursos. Por ejemplo, el cliente de un administrador de bases de datos podría leer y escribir en la base de datos.

  5. Confirme o revierte la transacción.

    Si todas las operaciones de recursos se realizan correctamente, el cliente debe llamar a ZwCommitTransaction para que las operaciones sean permanentes. Si se produce un error en una operación, el cliente debe llamar a ZwRollbackTransaction en lugar de ZwCommitTransaction. Por ejemplo, si el cliente de un administrador de bases de datos determina que se produjo un error en una serie de operaciones de escritura, el cliente debe llamar a ZwRollbackTransaction para que ninguna de las operaciones de escritura se convierta en permanente.

    Los clientes pueden llamar a ZwCommitTransaction y ZwRollbackTransaction de forma sincrónica o asincrónica. Si los clientes llaman a estas rutinas de forma sincrónica, las rutinas no se devuelven hasta que se complete la operación de confirmación o reversión.

    Para obtener más información sobre cómo confirmar y revertir transacciones, consulte Control de operaciones de transacción.

  6. Cierre el identificador del objeto de transacción.

    Una vez que el cliente haya terminado de procesar la transacción, debe llamar a ZwClose para cerrar el identificador del objeto de transacción.

Un TPS puede incluir más de un administrador de recursos. Si la transacción de un cliente incluye operaciones en varios recursos, como dos bases de datos que admiten dos administradores de recursos, el cliente suele hacer lo siguiente:

  1. Crea un único objeto de transacción para cada transacción.

  2. Pasa el identificador del objeto de transacción a cada administrador de recursos.

  3. Realiza operaciones en cada base de datos mediante una llamada a la interfaz de cada administrador de recursos.

  4. Confirma la transacción si todas las operaciones se completaron sin errores o revierten la transacción si se detectó un error.

Si el TPS incluye un administrador de transacciones superior, los clientes transaccionales normalmente no llaman a KTM. Para obtener más información sobre los administradores de transacciones superiores y sus clientes, vea Crear un administrador de transacciones superior.

Los clientes transaccionales pueden llamar a ZwSetInformationTransaction para establecer información específica de la transacción. Por ejemplo, un cliente puede establecer un valor de tiempo de espera para la transacción o proporcionar una cadena de caracteres descriptivo. Los clientes pueden llamar a ZwQueryInformationTransaction para recuperar información sobre una transacción. Por ejemplo, un cliente puede llamar a esta rutina para determinar si se ha confirmado o revertido una transacción.