Concepts d’activation juste-à-temps COM+
Le service d’activation juste-à-temps (JIT) permet à COM+ de désactiver un objet alors qu’un client contient toujours une référence active à cet objet. La prochaine fois que le client appelle une méthode sur l’objet, que le client estime toujours actif, le service d’activation JIT COM+ réactive l’objet en toute transparence sur le client, juste à temps.
L’avantage main de l’utilisation de l’activation COM + JIT est que vous pouvez permettre aux clients de conserver des références à des objets aussi longtemps qu’ils en ont besoin, sans nécessairement lier des ressources serveur précieuses telles que la mémoire. Voici d’autres avantages importants :
L’utilisation du service d’activation JIT COM+ simplifie considérablement le modèle de programmation pour le client, car le client n’a pas à réfléchir à la façon dont il utilise des objets serveur et des ressources serveur coûteux. Sans activation JIT, les clients peuvent entraîner une pénalité importante lorsqu’ils ont fréquemment besoin d’appeler et de libérer des objets.
Notes
Vous pouvez affiner davantage cet avantage en matière de performances à l’aide du service de regroupement d’objets COM+ . En regroupant des objets activés par JIT, vous pouvez accélérer considérablement la réactivation des objets pour les clients tout en réutilisant les ressources qu’ils peuvent contenir, ce qui vous donne un contrôle plus précis sur la quantité de mémoire utilisée par un objet donné sur le serveur. Pour plus d’informations, consultez Regroupement d’objets et activation JIT COM+.
Avec les applications distribuées, un aller-retour réseau coûteux est nécessaire pour la création de chaque objet, et plus le client est éloigné du serveur, plus les coûts d’activation et de marshaling de l’objet serveur, d’ouverture du canal et de configuration du proxy et du stub sont élevés. En utilisant le service d’activation JIT COM+, vous pouvez réduire la fréquence de création d’objets pour améliorer considérablement les performances de votre application.
Lorsque vous utilisez l’activation JIT COM+ pour activer les objets auxquels les clients contiennent des références de longue durée, mais qu’ils n’utilisent pas nécessairement tout le temps, la mémoire du serveur n’est pas toujours liée pour maintenir ces objets en vie. Cela peut augmenter considérablement la scalabilité de votre application. Le seul impact sur les performances que les clients voient est le temps nécessaire à COM+ pour réactiver l’objet, généralement légèrement plus de temps qu’il n’en faut pour allouer de la mémoire à l’objet et beaucoup moins que l’aller-retour réseau pour la création d’objets distants.
Activation de l’activation JIT COM+
Vous pouvez activer le service d’activation JIT COM+ pour un composant à l’aide de l’outil d’administration Services de composants ou des fonctions d’administration. Pour plus d’informations sur la procédure à suivre, consultez Activation JIT pour un composant.
L’activation JIT COM+ peut interagir avec d’autres services COM+, tels que les suivants :
- Lorsque votre composant nécessite des transactions, l’activation JIT est automatiquement activée pour celui-ci. Pour plus d’informations, consultez Transactions et activation JIT COM+.
- Lorsque votre composant est activé pour l’activation JIT, la synchronisation est automatiquement définie sur obligatoire. Cela signifie que si deux clients appellent simultanément un composant activé par JIT et qu’un appel de méthode pour l’un d’eux retourne, ce qui entraîne la désactivation de l’objet, l’autre n’est pas laissé en panne.
Comment la désactivation est déclenchée
COM+ désactive un objet en fonction de la status du bit doneness sur le contexte de l’objet. Votre objet peut utiliser ce bit pour indiquer s’il est terminé (c’est-à-dire prêt à être désactivé) pendant un appel de méthode donné. Pour plus d’informations, consultez Définition du bit terminé.
Utilisation de la propriété Auto-Done
À l’aide de l’outil d’administration Component Services, vous pouvez configurer une méthode de sorte que l’objet soit automatiquement désactivé lors du retour de méthode. (Pour obtenir des instructions sur la définition de cette propriété, consultez Activation de l’exécution automatique pour une méthode .) En sélectionnant cette option, vous pouvez éliminer les appels de méthode répétitifs pour le vote dans les transactions. Étant donné que le paramètre par défaut du bit de cohérence est True, si vous avez également remplacé le bit terminé par True et que vous n’effectuez aucune action pour modifier ces paramètres, IObjectContext::SetComplete est appelé automatiquement après le retour de la méthode.
Toutefois, il existe une mise en garde à ce comportement : COM+ examine le HRESULT retourné par la méthode. Si ce HRESULT indique un échec, le bit de cohérence est défini sur False et le résultat est le même que si vous aviez appelé IObjectContext::SetAbort.
Pour résumer, si vous sélectionnez auto-done pour une méthode et que vous n’effectuez aucune action pour définir des bits, et si un HRESULT(hr) est retourné, les conditions suivantes s’appliquent :
- Si l’option SUCCEEDS(hr), c’est comme si vous appeliez SetComplete.
- Si FAILED(hr), c’est comme si vous appeliez SetAbort.
Utilisation d’IObjectControl pour gérer l’activation et la désactivation d’objets
Vous pouvez implémenter l’interface IObjectControl afin que le runtime COM+ gère automatiquement la désactivation et la réactivation de vos objets. Lorsqu’un objet implémente cette interface, COM+ appelle IObjectControl::D eactivate lorsqu’il désactive l’objet et IObjectControl::Activate lorsqu’il le réactive. Ces méthodes permettent l’initialisation automatique du contexte lors de l’activation d’objet et le nettoyage de l’état lors de la désactivation.
Si vous poolez des objets qui utilisent l’activation JIT COM+, il est vivement recommandé d’implémenter IObjectControl. Pour plus d’informations, consultez Regroupement d’objets et activation JIT COM+.
Apatridie et activation JIT
Les objets transactionnels sont nécessairement sans état, car vous ne pouvez pas partager l’état au-delà d’une limite de transaction. Par conséquent, vous n’utilisez l’activation JIT que lorsque votre objet ne contient aucun état qui serait perdu lors de la désactivation ; dans le cas contraire, vous violez l’isolation des transactions. En raison des modèles d’utilisation naturelle des objets transactionnels (ils effectuent une unité de travail et libèrent l’objet lorsque la transaction est validée ou abandonnée), l’activation JIT et les transactions automatiques sont étroitement liées. La configuration d’un objet pour exiger des transactions active automatiquement l’activation JIT COM+.
Rubriques connexes