Création d’un client transactionnel
Un client transactionnel est un composant de système de traitement des transactions (TPS) qui utilise l’interface exportée d’un gestionnaire de ressources pour accéder à une ressource, telle qu’une base de données, prise en charge par le gestionnaire de ressources.
En règle générale, le client crée une transaction, effectue un ensemble d’opérations de base de données, puis valide la transaction pour rendre les opérations permanentes. Si le client rencontre une erreur, il peut restaurer la transaction pour supprimer les opérations de la transaction au lieu de valider la transaction.
En règle générale, un client transactionnel qui utilise KTM en mode noyau doit effectuer les tâches suivantes pour chaque transaction :
Créez un objet de transaction.
Un appel à ZwCreateTransaction crée un objet de transaction, fournit un handle d’objet et affecte un identificateur d’objet (GUID) que le client peut passer au gestionnaire de ressources pour identifier la transaction.
Obtenez l’identificateur de l’objet transaction.
Le client peut appeler ZwQueryInformationTransaction pour obtenir l’identificateur d’objet.
Passez l’identificateur de l’objet de transaction à un gestionnaire de ressources.
Le client appelle généralement l’interface exportée du gestionnaire de ressources pour ouvrir un chemin de communication vers le gestionnaire de ressources et pour associer le chemin d’accès à la transaction. Par exemple, le gestionnaire de ressources peut fournir une routine CreateDataObject similaire à celle décrite dans la rubrique Présentation des composants TPS .
Effectuez des opérations à inclure dans la transaction.
En règle générale, le client appelle l’interface du gestionnaire de ressources pour accéder à la ressource du gestionnaire de ressources. Par exemple, le client d’un gestionnaire de base de données peut lire et écrire dans la base de données.
Commitez ou restaurez la transaction.
Si toutes les opérations de ressources réussissent, le client doit appeler ZwCommitTransaction pour rendre les opérations permanentes. Si une opération échoue, le client doit appeler ZwRollbackTransaction au lieu de ZwCommitTransaction. Par exemple, si le client d’un gestionnaire de base de données détermine qu’une des opérations d’écriture a échoué, le client doit appeler ZwRollbackTransaction afin qu’aucune des opérations d’écriture ne devienne permanente.
Les clients peuvent appeler ZwCommitTransaction et ZwRollbackTransaction de manière synchrone ou asynchrone. Si les clients appellent ces routines de manière synchrone, les routines ne retournent pas tant que l’opération de validation ou de restauration n’est pas terminée.
Pour plus d’informations sur la validation et la restauration des transactions, consultez Gestion des opérations de transaction.
Fermez le handle de l’objet transaction.
Une fois que le client a terminé le traitement de la transaction, il doit appeler ZwClose pour fermer le handle de l’objet de transaction
Un TPS peut inclure plusieurs gestionnaires de ressources. Si la transaction d’un client inclut des opérations sur plusieurs ressources, telles que deux bases de données prises en charge par deux gestionnaires de ressources, le client effectue généralement les opérations suivantes :
Crée un objet transaction unique pour chaque transaction.
Transmet l’identificateur de l’objet transaction à chaque gestionnaire de ressources.
Effectue des opérations sur chaque base de données en appelant l’interface de chaque gestionnaire de ressources.
Valide la transaction si toutes les opérations se sont terminées sans erreurs, ou restaure la transaction si une erreur a été détectée.
Si votre TPS inclut un gestionnaire de transactions supérieur, les clients transactionnels n’appellent généralement pas KTM. Pour plus d’informations sur les gestionnaires de transactions supérieurs et leurs clients, consultez Création d’un gestionnaire de transactions supérieur.
Les clients transactionnels peuvent appeler ZwSetInformationTransaction pour définir des informations spécifiques à la transaction. Par exemple, un client peut définir une valeur de délai d’attente pour la transaction ou fournir une chaîne de caractères descriptif. Les clients peuvent appeler ZwQueryInformationTransaction pour récupérer des informations sur une transaction. Par exemple, un client peut appeler cette routine pour déterminer si une transaction a été validée ou restaurée.