Partager via


Configuration des transactions

L’attribut de transaction est une propriété déclarative qui gère automatiquement les transactions pour le développeur du composant. En définissant cet attribut, vous éliminez la nécessité d’utiliser des contrôles de transaction explicites dans votre composant.

COM+ utilise l’attribut transactionnel du composant pour déterminer le type de protection des transactions requise pour chaque objet qu’il active. En fonction de ses besoins, un objet peut partager la transaction de son appelant, exiger une nouvelle transaction ou fonctionner sans protection des transactions.

COM+ fournit les valeurs d’attribut de transaction suivantes :

Handicapés

En général, vous devez définir cette valeur d’attribut uniquement lorsque vous êtes sûr que le composant n’accède jamais à un gestionnaire de ressources. Lorsque vous désactivez l’attribut de transaction, COM+ ignore les exigences transactionnelles du composant pour déterminer l’emplacement du contexte de l’objet. Par conséquent, l’objet peut partager le contexte (et la transaction) de son appelant. Lors de la migration d’un composant COM vers COM+, vous devez désactiver l’attribut de transaction pour conserver le même comportement transactionnel que le composant COM non configuré.

Notes

Un composant non configuré est un composant COM qui n’a pas été installé dans une application COM+.

Non pris en charge

Lorsque vous définissez cette valeur d’attribut, COM+ garantit que tout objet créé à partir du composant ne participe jamais à une transaction, quelle que soit la status transactionnelle de son appelant. En déclarant cette valeur, vous vous assurez qu’un objet ne vote pas dans la transaction de son appelant et ne peut pas commencer une transaction qui lui est propre. Non pris en charge est la valeur par défaut pour tous les composants.

Soutenu

Lorsque vous définissez cette valeur d’attribut, COM+ garantit que tout objet créé à partir du composant participe à une transaction, le cas échéant. Vous déclarez cette valeur quand vous souhaitez qu’un objet partage dans la transaction de son appelant sans avoir besoin d’une transaction qui lui est propre.

Obligatoire

Lorsque vous définissez cette valeur d’attribut, COM+ garantit que tout objet créé à partir du composant est transactionnel. Lorsque COM+ active un objet avec le paramètre Obligatoire, il examine la status transactionnelle de son appelant. Si l’appelant a une transaction, le nouvel objet est inclus dans la transaction actuelle. Dans le cas contraire, COM+ commence une transaction, ce qui fait du nouvel objet la racine de la transaction. Il s’agit du paramètre préféré pour un composant qui effectue des activités de ressources, car il permet de protéger les transactions pour ces activités.

Nécessite un nouveau

Lorsque vous définissez cette valeur d’attribut, COM+ garantit que tous les objets créés à partir du composant doivent participer à une nouvelle transaction en tant que racine de la transaction, quelle que soit la status transactionnelle de l’appelant. COM+ lance automatiquement une nouvelle transaction distincte de la transaction de l’appelant.

Notes

COM+ ne prend pas en charge les transactions imbriquées. Lorsqu’un objet transactionnel appelle un autre composant marqué comme Nécessite nouveau, COM+ crée une limite transactionnelle indépendante pour l’objet nouvellement activé. La deuxième transaction ne peut pas affecter la première transaction, sauf si la première transaction note explicitement les résultats de la deuxième transaction et modifie son vote en fonction de ces résultats.

Dépendances d’attributs de transaction

Le tableau suivant présente les caractéristiques de chaque valeur d’attribut de transaction COM+, y compris l’effet de la valeur sur les caractéristiques de transaction. COM+ applique l’activation et la synchronisation JIT pour tous les composants de transaction.

Valeur d'attribut Nouvelle transaction Transaction du client Racine de transaction JIT Activation Synchronization
Désactivé
Jamais
Peut-être
Jamais
Facultatif
Facultatif
Non pris en charge
Jamais
Jamais
Jamais
Facultatif
Facultatif
Pris en charge
Jamais
Si le client a une transaction
Jamais
Obligatoire
Obligatoire
Obligatoire
Peut-être
Si le client a une transaction
Si le client n’a pas de transaction
Obligatoire
Obligatoire
Nouveau requis
Toujours
Jamais
Toujours
Obligatoire
Obligatoire

Limites de transaction

Une transaction a un début, une fin et se produit exactement une fois. Pendant son exécution, une transaction peut appeler une ressource, telle qu’une base de données ou une file d’attente, pour accomplir une ou plusieurs tâches. Chaque ressource se trouve dans la limite de transaction. Toutes les ressources au sein d’une limite de transaction, qui peuvent s’étendre sur plusieurs limites de processus et d’ordinateurs, partagent une seule transaction. Il est important de gérer la cohérence au-delà de ces processus et des limites de l’ordinateur.

COM+ garantit la cohérence en gérant automatiquement les limites de transaction, en fonction de la valeur de l’attribut de transaction que vous définissez pour chaque composant. Une transaction COM+ circule automatiquement vers les objets auxquels il est demandé de participer à une transaction et contourne les objets dont l’exécution est effectuée en dehors d’une transaction. COM+ ne prend pas en charge les transactions imbriquées. Au lieu de cela, les transactions COM+ sont distinctes et de courte durée.

Le premier objet d’une limite de transaction est spécial à la transaction et est appelé objet racine de la transaction. Il ne peut y avoir qu’un seul objet racine dans une transaction. Tous les autres objets de la hiérarchie transactionnelle sous l’objet racine sont appelés objets intérieurs.

Transactions de mappage

Une façon de s’assurer qu’un objet est inclus dans la limite de transaction correcte consiste à mapper vos transactions avant de commencer à écrire vos composants. En mappant les transactions, vous pouvez déterminer le meilleur paramètre pour chaque composant que vous écrivez. Plus vous êtes sûr de la façon dont vos composants doivent être utilisés, plus il est facile de sélectionner la valeur d’attribut de transaction correcte.

Au moment de l’exécution, COM+ examine l’attribut de transaction pour déterminer si un objet doit être la racine d’une nouvelle transaction, être créé dans une transaction existante ou être créé en tant qu’objet non transactionnel.

L’illustration suivante montre un mappage de transaction possible. Dans l’illustration, le client crée l’objet 1, qui nécessite une transaction. Étant donné qu’il n’existe aucune transaction, COM+ crée transaction 1 et y place Object 1 en tant qu’objet racine. L’objet 1 crée l’objet 2, qui prend en charge les transactions et est donc placé dans la transaction 1. L’objet 2 crée l’objet 3, qui ne prend pas en charge les transactions et est donc placé en dehors de toutes les transactions. L’objet 2 crée également l’objet 4, qui nécessite une transaction et est donc placé dans la transaction 1. L’objet 3 crée l’objet 5, qui prend en charge les transactions. Toutefois, étant donné que l’objet 5 est créé par un objet qui n’existe pas dans une transaction, il est également placé en dehors de toutes les transactions. L’objet 4 crée l’objet 6, qui nécessite une nouvelle transaction, de sorte que COM+ crée la transaction 2 et y place l’objet 6 en tant qu’objet racine. L’objet 6 crée l’objet 7, qui prend en charge les transactions et est donc placé dans transaction 2.

Diagramme montrant une interaction client avec la transaction 1 et la transaction 2.

L’illustration précédente montre deux zones de problèmes potentiels. Tout d’abord, la majorité du travail est répartie entre deux transactions distinctes. Si la transaction 1 échoue après que l’objet 4 a créé l’objet 6, la transaction 2 s’exécute sans être affectée par le résultat de la transaction 1. Si ce résultat n’est pas souhaité, vous préférerez peut-être regrouper les opérations des deux transactions en une seule transaction, ce que vous pouvez accomplir en modifiant l’attribut de transaction de l’objet 6 en Obligatoire.

L’illustration de mappage montre également que l’objet 3 et l’objet 5 ne sont pas transactionnels, s’exécutant complètement en dehors de l’étendue des transactions 1 et 2. Si l’objet 5 met à jour des données persistantes, vous voudrez peut-être reconsidérer ses status non transactionnels. L’objet 5 peut être placé dans une transaction en modifiant son attribut de transaction sur Obligatoire.

Définition de l’attribut transactionnel