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és et non modifiables, telles que les connexions entre les composants et un gestionnaire de ressources donné. Au moment 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, aux threads, aux objets et aux blocs de mémoire, sont mis à la disposition du distributeur de ressources. Le processus d’application obtient 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 tout ce qu’un distributeur de ressources crée. Par exemple, une connexion à un gestionnaire de ressources est une ressource courante. Les ressources résident dans la mémoire du distributeur de ressources et ne sont jamais copiées dans le gestionnaire du distributeur. Une ressource est connue uniquement par un handle opaque (RESID) et peut ou non être en mesure d’effectuer des transactions. Bien que les ressources gérées puissent souvent être 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.

 

D’un point de vue architectural, le système de distribution de ressources COM+ se compose de distributeurs 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 pour les ressources partagées. Le gestionnaire de 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. Le premier, IDispenserDriver, fournit au responsable du distributeur des informations de base sur la création, la destruction et l’inscription des ressources qu’il gère. La seconde est exposée 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 à son tour peut proposer n’importe quelle 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 distributeur fourni par COM+ suit les distributeurs de ressources et les coordonne entre eux. Il implémente deux interfaces : IDispenserManager et IHolder. les distributeurs de ressources s’inscrivent eux-mêmes à l’aide de l’interface IDispenserManager . Le responsable du distributeur leur donne ensuite un pointeur vers un IHolder qu’ils utilisent pour informer le responsable du distributeur de leurs activités.

Un distributeur de ressources transactionnelles doit s’inscrire dans une transaction DTC (Distributed Transaction Coordinator). Cela implique l’utilisation d’un gestionnaire de ressources interne ou externe (au distributeur de ressources) qui est conforme aux transactions OLE.

Notes

Le modèle de programmation COM+ inclut des transactions déclaratives, qui aident à 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ées 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 ne doivent pas nécessairement être transactionnelles. Un distributeur de ressources qui pools des ressources non transactionnelles peut toujours obtenir 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 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+, fournissant uniquement des fonctionnalités de regroupement de ressources. Par exemple, si un distributeur de ressources expose une API (comme ODBC), il peut s’agir d’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 actuel.

Au démarrage, une DLL de distributeur de ressources doit s’inscrire auprès du gestionnaire du distributeur. Le gestionnaire de distributeur est l’exécutif 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 de distributeur COM+.) Le distributeur de ressources appelle d’abord la fonction GetDispenserManager , puis appelle la méthode IDispenserManager::RegisterDispenser , en passant le pointeur IDispenserDriver que le distributeur de ressources implémente. Cet appel retourne une référence à IHolder.

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

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

Tâches du distributeur de ressources COM+