Fonctionnement du regroupement d’objets
Lorsque vous configurez un composant à mettre en pool, COM+ conserve les instances de celui-ci dans un pool, prêt à être activé pour n’importe quel client qui demande le composant. Toutes les demandes de création d’objets seront gérées par le biais du gestionnaire de pool.
Les pools sont configurés et gérés par composant. Un pool se compose d’objets homogènes qui partagent le même CLSID. La seule exception concerne les objets transactionnels, pour lesquels les sous-pools sont conservés contenant des objets qui ont une affinité de transaction pendant qu’une transaction est en attente.
Lorsque l’application démarre, le pool est rempli jusqu’au niveau minimal que vous avez spécifié administrativement, tant que la création de l’objet réussit. À mesure que les demandes clientes pour le composant arrivent, ils sont satisfaits sur la base du premier arrivé, premier servi à partir du pool. Si aucun objet mis en pool n’est disponible et que le pool n’est pas encore au niveau maximal spécifié, un nouvel objet est créé et activé pour le client.
Lorsque le pool atteint son niveau maximal, les demandes clientes sont mises en file d’attente et reçoivent le premier objet disponible du pool. Le nombre d’objets, y compris activés et désactivés, ne dépassera jamais la valeur maximale du pool. Les demandes de création d’objet expirent après une période spécifiée administrativement afin que vous puissiez contrôler la durée d’attente des clients pour la création d’un objet. En cas d’échec du délai d’attente, le client obtient le E_TIMEOUT d’erreur de CoCreateInstance.
Dans la mesure du possible, COM+ tente de réutiliser un objet une fois qu’un client l’a libéré, jusqu’à ce que le pool atteigne son niveau maximal. L’objet est chargé de surveiller son état pour déterminer s’il peut être réutilisé et doit retourner une valeur appropriée pour IObjectControl::CanBePooled.
Lorsqu’un objet mis en pool est créé, il est agrégé en un objet plus grand qui gérera la durée de vie de l’objet. L’objet externe appelle des méthodes sur IObjectControl à des moments appropriés dans le cycle de vie de l’objet, comme suit :
- La méthode Activate est appelée chaque fois que l’objet est retourné à un client, activé dans un contexte spécifique.
- La méthode Deactivate est appelée chaque fois qu’un objet est libéré par le client ou, dans le cas d’un objet activé par JIT, lorsqu’il est désactivé.
- La méthode CanBePooled est appelée chaque fois qu’un objet doit être retourné au pool général. Si l’objet détecte qu’une ressource réutilisable est dans un état incorrect, il doit retourner FALSE pour cette méthode et le gestionnaire de pool rejette l’objet.
Un objet n’a pas nécessairement besoin d’implémenter IObjectControl. Si ce n’est pas le cas, les instances seront toujours réutilisées, jusqu’à ce que le niveau maximal du pool soit atteint.
Pour plus d’informations sur la configuration des composants à mettre en pool, consultez Configuration d’un composant à mettre en pool.
Rubriques connexes