Evénements COM+
Cet article décrit la mise en oeuvre des événements COM+ au travers d'une application COM+ de test, composée d'un objet présentant une interface événement et d'un objet COM+ la supportant, avec Delphi. Nous montrerons comment ensuite exporter un proxy de cette application vers une machine cliente distante, pour que l'événement soit déclenché depuis celle-ci, et que l'objet qui a souscrit à cet événement soit instancié et réponde à cet événement.

MTS (Microsoft Transaction Server, pour les versions de Windows antérieures à Windows 2000) et COM+ (pour Windows 2000 ou plus) offrent un environnement distribué avec l'utilisation des services de transaction, la sécurité et la gestion des ressources. Delphi utilise le terme objet transactionnel pour désigner des objets qui utilisent ces services. L'application COM+ qui fait l'objet de cet article comprend deux objets transactionnels : l'objet événement et l'objet souscrivant à cet événement. Une application test permettra de créer une instance de l'objet événement, puis de déclencher un événement par appel de l'une des méthodes supportées par l'interface d'événement. COM+ se chargera alors d'invoquer les objets qui auront souscris à cet événement.


Objet événement

Créons tout d'abord l'objet événement en utilisant l'expert Objet Evénement COM+ de la palette ActiveX de Delphi. Pour cela, un projet de bibliothèque ActiveX est créé.
La création de cet objet est peu différente de celle d'un objet automation : vous devez saisir un nom de CoClasse et un nom d'interface qui aura IDispatch comme interface parent. Toutes les méthodes de l'interface devront être abstraites. Dans notre exemple, l'interface IObjEvent ne contient que la méthode Evenement et nous ne fournissons aucune implémentation de cette méthode.

TObjEvent = class(TAutoObject, IObjEvent)
protected
  procedure Evenement; virtual; safecall; abstract;
end;

Après compilation, l'étape suivante consiste à recenser le serveur ActiveX puis à installer l'objet COM+ en utilisant le menu "Exécuter|Installation des objets COM+" de Delphi. Dans la boîte de dialogue "Installation des objets COM+" cochez l'objet à installer et choisissez de l'installer dans une nouvelle application COM+ nommée "Test événement COM+".
Si vous démarrez le Service de composants à partir des "Outils d'administration" du "Panneau de configuration", vous verriez "Test événement COM+" avec notre composant, présent comme application COM+.




Objet client

Passons maintenant à l'objet transactionnel qui doit manifester son intérêt pour l'objet événement. Dans Delphi, nous démarrons une nouvelle bibliothèque ActiveX et y ajoutons un nouvel objet COM (par l'expert Objet COM). Celui-ci doit implémenter l'interface de l'objet événement.
Dans la boîte de dialogue de l'expert, vous devez sélectionner l'interface IObjEvent à l'aide du bouton Liste.
Après la génération de code, vous pouvez constater que la bibliothèque de types du projet ne comporte que la CoClasse pour laquelle vous allez donner une implémentation de la méthode Evenement.
Comme pour l'objet événement, après compilation, vous devez recenser le serveur et installer l'objet transactionnel dans l'application COM+ "Test événement COM+".
Dans le Service de composants, cette application contient maintenant deux objets.
Pour que l'objet client soit notifié de tout événement venant de l'objet événement, il faut créer un nouvel abonnement pour celui-ci dans le Service de composants. Sélectionnez l'icône "Abonnements" de l'objet client, puis avec le bouton droit de la souris créez un nouvel abonnement. L'assistant "Nouvel abonnement COM" vous guide alors dans la création de l'abonnement. Vous devez d'abord sélectionner la méthode qui sera utilisée pour l'abonnement, l'objet client qui implémente l'interface d'événement, et enfin un nom d'abonnement.
Il ne reste plus qu'à écrire une application de test qui instanciera l'objet événement et déclenchera la méthode Evenement de l'interface IObjEvent.


Application test

L'application de test peut effectuer un uses de l'unité générée à partir de la bibliothèque de type du l'objet événement pour utiliser la fonction de classe CoObjEvent.Create et créer une instance de l'objet événement :

procedure TForm1.Button1Click(Sender: TObject);
var
  FEvent: IObjEvent;
begin
  FEvent := CoObjEvent.Create;
  FEvent.Evenement;
end;

Le code ci-dessus a pour effet de déclencher l'exécution du code de réponse de l'objet client après son instanciation par COM+. Dans le Service de composants, l'activation d'un composant est signalé par une animation de l'icône du composant correspondant.


Exportation du proxy de l'application COM+

Vous pouvez utiliser le Services de composants pour exporter un proxy de l'application COM+ "Test événement COM+". Une fois le proxy installé sur une machine cliente, l' application de test pourra utiliser les informations du proxy pour, via DCOM, déclencher la réponse de l'objet client.
Pour cela, sélectionner "Test événement COM+" et par le bouton droit de la souris exécuter l'assistant d'exportation d'applications COM+ en choisissant d'exporter en tant que proxy d'application. L'assistant génère alors les fichiers d'installation.

Sommaire

Objet événement
Objet client
Application test
Exportation du proxy de l'application COM+

Début

Copyright © 2003 OBJECT-EVERYWHERE. Tous droits réservés | Bertrand Goetzmann