Compartilhar via


Criando um cliente transacional

Um cliente transacional é um componente do TPS (sistema de processamento de transações) que usa a interface exportada de um gerenciador de recursos para acessar um recurso, como um banco de dados, ao qual o gerenciador de recursos dá suporte.

Normalmente, o cliente cria uma transação, executa um conjunto de operações de banco de dados e confirma a transação para tornar as operações permanentes. Se o cliente encontrar um erro, ele poderá reverter a transação para remover as operações da transação em vez de confirmar a transação.

Normalmente, um cliente transacional que usa KTM no modo kernel deve executar as seguintes tarefas para cada transação:

  1. Crie um objeto de transação.

    Uma chamada para ZwCreateTransaction cria um objeto de transação, fornece um identificador de objeto e atribui um identificador de objeto (um GUID) que o cliente pode passar para o gerenciador de recursos para identificar a transação.

  2. Obtenha o identificador do objeto de transação.

    O cliente pode chamar ZwQueryInformationTransaction para obter o identificador de objeto.

  3. Passe o identificador do objeto de transação para um gerenciador de recursos.

    O cliente normalmente chama a interface exportada do gerenciador de recursos para abrir um caminho de comunicação para o gerenciador de recursos e associar o caminho à transação. Por exemplo, o gerenciador de recursos pode fornecer uma rotina CreateDataObject semelhante à que o tópico Understanding TPS Components descreve.

  4. Execute operações a serem incluídas na transação.

    Normalmente, o cliente chama a interface do gerenciador de recursos para acessar o recurso do gerenciador de recursos. Por exemplo, o cliente de um gerenciador de banco de dados pode ler e gravar no banco de dados.

  5. Confirme ou reverta a transação.

    Se todas as operações de recurso forem bem-sucedidas, o cliente deverá chamar ZwCommitTransaction para tornar as operações permanentes. Se uma operação falhar, o cliente deverá chamar ZwRollbackTransaction em vez de ZwCommitTransaction. Por exemplo, se o cliente de um gerenciador de banco de dados determinar que uma de uma série de operações de gravação falhou, o cliente deverá chamar ZwRollbackTransaction para que nenhuma das operações de gravação se torne permanente.

    Os clientes podem chamar ZwCommitTransaction e ZwRollbackTransaction de forma síncrona ou assíncrona. Se os clientes chamarem essas rotinas de forma síncrona, as rotinas não retornarão até que a operação de confirmação ou reversão seja concluída.

    Para obter mais informações sobre como confirmar e reverter transações, consulte Manipulando operações de transação.

  6. Feche o identificador do objeto de transação.

    Depois que o cliente terminar de processar a transação, ele deverá chamar ZwClose para fechar o identificador do objeto de transação

Um TPS pode incluir mais de um gerenciador de recursos. Se a transação de um cliente incluir operações em vários recursos, como dois bancos de dados aos quais dois gerenciadores de recursos dão suporte, o cliente normalmente faz o seguinte:

  1. Cria um único objeto de transação para cada transação.

  2. Passa o identificador do objeto de transação para cada gerenciador de recursos.

  3. Executa operações em cada banco de dados chamando a interface de cada gerenciador de recursos.

  4. Confirma a transação se todas as operações forem concluídas sem erros ou reverterá a transação se um erro for detectado.

Se o TPS incluir um gerenciador de transações superior, os clientes transacionais normalmente não chamarão KTM. Para obter mais informações sobre gerenciadores de transações superiores e seus clientes, consulte Criando um Gerenciador de Transações Superior.

Clientes transacionais podem chamar ZwSetInformationTransaction para definir informações específicas da transação. Por exemplo, um cliente pode definir um valor de tempo limite para a transação ou fornecer uma cadeia de caracteres descritiva. Os clientes podem chamar ZwQueryInformationTransaction para recuperar informações sobre uma transação. Por exemplo, um cliente pode chamar essa rotina para determinar se uma transação foi confirmada ou revertida.