Dernière mise à jour :2008-07-24

informatique

Petit tour du côté des transactions

Microsoft transaction serveur ou MTS de son petit nom est une solution apportée par Microsoft au problème de la gestion de transactions multiples pour des solutions client/serveur n-tiers. MTS apporte un énorme gain de performance à tout composant (ActiveX DLL in-process) créé pour être utilisé avec celui-ci. En effet, il serait un peu dur de recréer toutes les options qui sont offerte avec MTS.

Liste des éléments qui compose MTS

  • Just-in-time Activation : Les objets non utilisé peuvent être mit en cache donc ne consomme pas les ressource du serveur. Lorsque le composant est réutilisé, MTS reprend les ressources pour ce composant pour que le client puisse l'utiliser.
  • Process Isolation : Les process sont isolés donc si une erreur se produit dans l'un des composants ca ne fait pas 'crasher' les composants des autres process.
  • Database Connection Pooling : MTS a une 'pool of connections' a un data source qui expédit les accès à la base de données en réutilisant les connections existantes.
  • Thread Pooling : MTS est pourvu et administre un pool de threads dans lequel les composants sont créé et utilisés se qui résulte un gain de rapidité de réponse des composants aux requêtes des clients
  • Role-Based Security : MTS permet aux composants d'utiliser un niveau élevé de sécurité. La sécurité est gérée par MTS au lieu d'être intégré dans le composant lui-même.
  • Automatic Transaction Support : Permet le fonctionnement de transactions au niveau du composant

Si vous venez un jour à vous intéresser de plus prêt à MTS, vous entendrez sûrement parler de DCOM ou Distributed COM. C'est le mécanisme utilisé pour parfaire les communications entre les clients et les composants MTS. Pour un bon fonctionnement de MTS, DCOM doit obligatoirement être installer.

Si vous venez un jour à vous intéresser de plus prêt à MTS, vous entendrez sûrement parler de DCOM ou Distributed COM. C'est le mécanisme utilisé pour parfaire les communications entre les clients et les composants MTS. Pour un bon fonctionnement de MTS, DCOM doit obligatoirement être installer.

Les packages et MTS

MTS mani les composants en utilisant des packages. Pour qu'un composant soit utilisé par MTS, le composant doit faire partie d'un package. Un ordinateur peu prendre en charge plusieurs packages mais un composant ne peut faire partie que d'un seul package.

Tout fichier d'un package tourne dans le même espace de process. Le process peut tourner sur le client ou le serveur. Ce qui détermine celà, c'est l'activation Type du package. Un package peut être un 'Library package' ou 'Server package'. Le premier tourne dans le même proccess que le client et le second, dans son propre process sur sa machine.

Lorsqu'un package est de type 'Server package', il tourne dans son propre process et est totalement isolé des autres composants des autres packages. On appel celà le 'fault isolation' puisque si le composant commet une faute, les seuls composants qui 'crash' sont ceux du même package.

Lorsqu'un client effectu une requête a un 'Server package' pour la première fois, un certain délai résulte de l'opération car MTS doit ouvrir tous les composants du package. Ceci cause une petite perte de performance mais accélère considérablement l'opération pour les autres requêtes des autres clients.

Les 'Library Packages' tourne dans le même process que celui du client. Un 'Library Package' doit être installé sur la machine du client qui doit accéder au composant.

Sécurité et MTS

La sécurité est supporté seulement sur les machines qui sont sur un système NT mais pas pour les composants utilisés sur windows 9x.

Le modèle de sécurité de MTS est en quelque sorte une extention de celui de windows NT. Ce modèle est basé sur des rôles qui sont similaires aux groupes sur NT en ce sens qu'on peut mettre plusieurs utilisateurs pour un rôle. On peut aussi ajouter des groupes dans les rôles.

Deux types de sécurités sont supportés par MTS soit: Déclaratif ou programmatique.

Niveau de sécurité déclaratif

Declarative ou package level security est utilisé pour allouer ou non l'accès a un composant. Si l'utilisateur est membre d'un rôle, il aura accès complet a un composant sinon, il n'aura pas accès du tout.

Dans l'onglet de sécurité de MTS, il est possible d'activer une liste déroulante permettant la gestion des authentifications pour les appels au packages (drop down list Authentication level for calls). Les choix de cette liste sont énumérés ci-dessous:

  • None: Enlève la coche de 'Enable authorization checking' qui lorsque coché active la liste déroulante
  • Connect: Active l'authentification quand le client accède la première fois au package
  • Call: Active l'authentification chaque fois que l'utilisateur fait une requête pour accéder au package.
  • Packet: (Défaut) Cause l'authentification sur tous les paquets transmis par le serveur au client. L'information de l'identité est encryptée.
  • Packet Integrity: Même chose que le précédent sauf que l'intégrité de chaque paquet peut être vérifié.
  • Packet Privacy: Même que le précédent sauf qu'en plus, tous les paquet sont encryptés.

Après avoir changer le niveau de sécurité pour un package, on doit redémarrer le package serveur avant que les changements prennent effet.

Niveau de sécurité Programmatique

Pour implémenter la sécurité programmatiquement, une référence à 'Microsoft Transaction Server Type Library' doit être ajoutée au projet.

L'objet parent utilisé pour exécuter la plupart des fonction MTS est l'objet ObjectContext. La méthode IsSecurityEnabled est utilisée pour déterminer si la sécurité MTS est activée. La méthode IsCallerInRole permet de passer le nom d'un role et si l'utilisateur est dans ce role, la méthode retourne True.

Maintenant, si un jour vous avez besoin pour votre boulot ou pour le plaisir (qui sait) de faire l'installation de MTS, celui-ci est disponible et peut être installé à partir de Windows NT 4 option Pack.

Configurer MTS

Toute la configuration se fait à l'aide du 'MTS Explorer'. La configuration initiale consiste à la définition des rôles et la création des packages. MTS inclut un package system qui n'est pas modifiable et est utilisé pour fin d'opérations internes. La première opération consiste à sécuriser l'explorer MTS et MTS lui-même en général en assignant un utilisateur au rôle administrator du package system. Dans le TreeView, sélectionnez System->Roles->Administrator->Users et sélectionnez ensuite New -> user du menu Action. Lorsque sélectionné, la boite de dialogue 'Add Users And Groups To Roles' apparait.

L'explorer MTS peut être utiliser pour administrer des packages et autres composants utilisés sur d'autres machines qui utilisent MTS. Pour ajouter un nouvel ordinateur, utiliser l'option NewComputer du menu Action.

Ensuite, si vous désirez faire la création de package, ceux-ci sont définis avec le Package Wizard.

Créer des composants MTS avec Visual Basic

En majeur partie, les DLLs se crées de la même façon qu'une DLL normal à l'exception qu'il faut ajouter une référence à la 'Microsoft Transaction Server Type Library' pour programmer la sécurité. De plus, si possible, créer un composant multithreaded. Chaque fois qu'il est nécessaire de recompiler un composant MTS pour fin de distribution, utiliser la 'binary compatibility'.

Les composants traditionnels on une durée de vie fini. Ils existent tant que le client garde une référence sur le composant. Les données locales du composant (globales et niveau module) persistent pour la durée de vie du composant. Ce procédé est connu sous le nom de 'maintaining state'. Lors de la création de composants MTS le but est de créer un composant 'stateless'. Les composants 'stateless' sont principalement formés de méthodes et non de propriétés. Les méthodes ne sont pas accées sur la persistance des données. Ce processus est important puisque si l'objet est désactivé par les méthodes Setcomplete ou SetAbort, les données 'persisted' (persistantes) sont perdues.

Procédé de configuration d'un composant pour un processus de transaction:

Le procédé de transaction d'une classe est déterminé par la propriété MTSTransactionMode qu'une classe de composant est configurée à MultiUse. Cette propriété peut prendre de multiples valeurs. En voici la liste:

  • NotAnMTSObject : (Defaut) Le composant ne supporte pas Microsoft Transaction Server
  • NoTransactions : Le composant ne supporte pas les transactions.
  • RequiresTransaction : Le composant doit s'exécuté dans une transaction. Si le client n'a pas de transaction et qu'il cré l'objet, une nouvelle transaction est créée.
  • UsesTransaction : Si le client a une transaction, l'objet est créé dans le cour de celle-ci. Si il n'en a pas, l'objet est créé sans transaction.
  • RequiresNewTransaction : Une nouvelle transaction est toujours créé pour exécuter l'objet.

Voter pour dire si une transaction doit être annulée ou non

Deux méthodes existent pour procéder au vote. L'objet ObjectContext peut voter pour dire que la transaction se déroule correctement en utilisant les méthodes Setcomplete qui dit a MTS que le process s'est accomplit avec succès, que l'objet peut maintenant être détruit et que MTS est libre de compléter la transaction et SetAbort qui sert à communiquer à MTS que le proccess de l'objet ne peut se conclure correctement et que MTS doit aborder la transaction.

Ce texte aurait pu être plus détaillé et plus long. MTS est une technologie évolué qui permet d'ajouter un gros plus à vos application client/serveur sans que vous soyez obligé de réinventer la roue. Mais MTS est tout de même sensiblement complexe à apprendre et à gérer.

Auteur : Sylvain Bilodeau

Date de mise en ligne : 2001-07-24

Aucun commentaire pour l'instant.