Concepts du distributeur de ressources COM+

Les composants d’application utilisent le distributeur de ressources COM+ pour accéder et gérer les informations d’État partagées non durables, telles que les connexions entre les composants et un gestionnaire de ressources donné. Lors de l’exécution, les pools dynamiques de ressources, tels que les connexions de base de données, les connexions réseau, les connexions aux files d’attente, les threads, les objets et les blocs de mémoire, sont mis à la disposition du distributeur de ressources. Le processus d’application atteint des performances élevées en utilisant un nombre minimal de ressources fréquemment utilisées. Le distributeur de ressources peut également automatiser les transactions et la récupération. (Pour plus d’informations sur cette fonctionnalité, consultez récupération automatique des ressources .)

Notes

Une ressource est un tout ce que crée un distributeur de ressources. Par exemple, une connexion à un gestionnaire de ressources est une ressource commune. Les ressources résident dans la mémoire du distributeur de ressources et ne sont jamais copiées dans le gestionnaire de distribution. Une ressource est connue uniquement par un handle opaque (RESID) et peut ou ne peut pas être en capacité à effectuer des transactions. Bien que les ressources gérées soient souvent des connexions à un composant gérant un État durable, les connexions elles-mêmes ne sont pas durables. Un distributeur de ressources utilise souvent un gestionnaire de ressources associé pour conserver l’État durable.

Architecturale, le système de distribution de ressources COM+ est constitué de dispenseurs de ressources et d’un gestionnaire de distributeur. Les distributeurs de ressources sont des composants fournis par l’utilisateur qui fournissent aux applications des interfaces simples aux ressources partagées. Le gestionnaire du distributeur est un composant fourni par COM+ qui coordonne les activités des différents distributeurs de ressources.

Un distributeur de ressources est un composant de bibliothèque de liens dynamiques (DLL) qui fournit au moins deux interfaces. La première, IDispenserDriver, fournit au gestionnaire de distribution des informations de base sur la création, la destruction et l’inscription des ressources qu’il gère. Le deuxième est exposé aux applications et peut être une interface COM ou un ensemble d’interfaces ou peut être une interface de programmation d’applications (API) à laquelle un composant est lié via une bibliothèque d’importation. Une application peut appeler n’importe quel distributeur de ressources, qui peut, à son tour, proposer toute API à l’application. Si le distributeur de ressources est un composant Automation, il est accessible à partir de Microsoft Visual Basic. Un distributeur de ressources est instancié lorsqu’un composant d’application y fait référence.

Le gestionnaire de distribution fourni par COM+ effectue le suivi des distributions et des coordonnées des ressources entre eux. Il implémente deux interfaces : IDispenserManager et IHolder. les distributeurs de ressources s’inscrivent à l’aide de l’interface IDispenserManager . Le gestionnaire de distribution lui donne ensuite un pointeur vers un IHolder qu’il utilise pour notifier le responsable du distributeur de ses activités.

Un distributeur de ressources transactionnel doit s’inscrire dans une transaction Distributed Transaction Coordinator (DTC). Cela implique l’utilisation d’un gestionnaire de ressources interne ou externe (pour le distributeur de ressources) qui est compatible avec les transactions OLE.

Notes

Le modèle de programmation COM+ comprend des transactions déclaratives, qui permettent de protéger le travail effectué par un objet d’application pendant sa durée de vie. Lorsqu’un objet d’application utilise un distributeur de ressources COM+, le travail qu’il effectue est automatiquement transactionnel ; autrement dit, le composant n’a pas besoin de déclarer explicitement des transactions. Ces transactions sont définies dans la spécification OLE Transactions, implémentée par le DTC et lancées pour le compte de l’objet d’application par COM+. Pour plus d’informations, consultez le Guide de développement DTC.

Les ressources n’ont pas besoin d’être transactionnelles. Un distributeur de ressources qui regroupe des ressources non transactionnelles peut toujours atteindre des performances élevées en permettant aux objets d’application d’accéder à un pool partagé de ces ressources. Ce type de distributeur de ressources retourne S _ false à partir de la méthode IDispenserDriver :: EnlistResource , ce qui signifie que le distributeur de ressources n’a pas inscrit la ressource, car la ressource n’est pas transactionnelle.

Le distributeur de ressources peut également fonctionner indépendamment de COM+, en fournissant uniquement des fonctionnalités de mise en pool de ressources. Par exemple, si un distributeur de ressources expose une API (par exemple, ODBC), le distributeur de ressources peut être une DLL accessible par l’application via une bibliothèque d’importation (ou à l’aide des fonctions LoadLibrary et GetProcAddress ). Un distributeur de ressources peut également être un composant COM auquel une application accède en appelant CoCreateInstance. Sans COM+, la méthode EnlistResource d’un distributeur de ressources ne peut jamais être appelée, car le gestionnaire du distributeur n’a aucune connaissance de la transaction du composant en cours.

Au démarrage, une DLL de distributeur de ressources doit s’inscrire auprès du gestionnaire du distributeur. Le gestionnaire du distributeur est le cadre de contrôle qui gère le chargement et le déchargement des distributeurs de ressources, fournit le contexte COM+ et contrôle le gestionnaire des statistiques d’inventaire. (Pour plus d’informations, consultez Gestionnaire du distributeur com+.) Le distributeur de ressources appelle d’abord la fonction GetDispenserManager , puis appelle la méthode IDispenserManager :: RegisterDispenser , en passant le pointeur IDispenserDriver implémenté par le distributeur de ressources. Cet appel retourne une référence à IHolder.

Pour arrêter, un distributeur de ressources appelle IHolder :: Close. Pour garantir un arrêt correct du package, un distributeur de ressources doit être en mesure de gérer la situation dans laquelle les appels continuent d’arriver à partir des objets métier après que COM+ a demandé l’arrêt du distributeur.

Les rubriques suivantes de cette section fournissent des informations plus détaillées sur le service de distribution de ressources COM+ :

Tâches du distributeur de ressources COM+