Présentation des unités d'exécution, des connexions et des transactions

Il est important de savoir comment les unités d'exécution, les connexions et les transactions interagissent.

Vous devez séparer les unités d'exécution pour les connexions d'adaptateur et pour la logique de la mappe. Cela permet aux connexions de rester ouvertes, même après la fin des mappes. Le Gestionnaire de ressources gère un ensemble d'unités d'exécution de connexion et en associe une ou plusieurs à une unité d'exécution de mappe pendant l'exécution d'une mappe.

Il existe toujours une relation "un pour un" entre une connexion et une unité d'exécution. Une connexion est associée à une unité d'exécution. Plusieurs appels associés à une connexion se produisent tous sur une seule unité d'exécution, c'est-à-dire si la méthode Connect est appelée à partir de l'unité d'exécution n, tous les appels Listen, Get, Put, BeginTransaction, EndTransaction et Disconnect pour cette connexion seront également appelés à partir de l'unité d'exécution n.

Les adaptateurs se divisent en deux catégories :
  • Ceux qui ont une relation "un pour un" entre une connexion et une transaction.
  • Ceux qui autorisent plusieurs transactions simultanées sur la même connexion.
La détermination de la catégorie d'un adaptateur est normalement effectuée par l'implémentation du mécanisme de transaction dans la ressource à laquelle l'adaptateur s'interface.

L'adaptateur définit son mode de fonctionnement en définissant la valeur nTransMode de la bibliothèque vtable sur l'une des valeurs suivantes :

  • MPI_TRANSACTIONS_NONE
  • MPI_TRANSACTIONS_SINGLE
  • MPI_TRANSACTIONS_MULTIPLE
Ce paramètre prend effet lorsque les méthodes BeginTransaction et EndTransaction sont appelées comme suit :
  • Pour les adaptateurs autorisant une transaction unique par connexion, il n'y a qu'un seul appel à BeginTransaction et EndTransaction.
  • Pour les adaptateurs autorisant plusieurs transactions par connexion, il y aura plusieurs appels.
  • Pour les adaptateurs avec le mode de transaction NONE, il n'y aura pas d'appels à BeginTransaction ou EndTransaction.
L'exemple suivant présente la séquence d'appels pour une mappe comportant deux cartes en sortie, avec un paramètre de portée défini sur Mappe, qui peut fonctionner dans la même connexion :
Une seule transaction par connexion Plusieurs transactions par connexion
Connexion Connexion
BeginTransaction (1) BeginTransaction (1)
Put (1) Put (1)
CompareConnection --> MPI_CMP_EQUAL CompareConnection --> MPI_CMP_EQUAL
Put (2) BeginTransaction (2)
EndTransaction (1) Put (2)
Déconnecter EndTransaction (1)

EndTransaction (2)

Déconnecter

Certaines ressources nécessitent que toutes les activités d'une ressource unique se produisent sur une seule unité d'exécution. Il est possible d'exécuter Listen, Get et Put avec la même unité d'exécution de connexion.

Bien sûr, si une unité d'exécution de connexion est utilisée lors de l'exécution d'une mappe, elle ne peut pas surveiller l'arrivée de nouveaux événements. Par conséquent, plusieurs unités d'exécution de programme d'écoute doivent être démarrées pour permettre une exécution simultanée et une gestion des événements efficace. Cette opération ajoute une nouvelle contrainte pour le Gestionnaire de ressources : le nombre de mappes pouvant être exécutées simultanément pour traiter un programme de surveillance spécifique dépend du nombre d'unités d'exécution de programme d'écoute qui ont été créées.

Le fichier de configuration dtx.ini possède un paramètre (MaxWatchThreads), qui correspond au nombre maximal d'unités d'exécution pouvant être créées pour les connexions d'une ressource donnée. Ceci est utilisé pour déterminer le nombre d'unités d'exécution qui seront démarrées pour écouter un événement donné si la propriété d'adaptateur MPIP_ADAPTER_LISTEN_USESAMECONN a la valeur TRUE.