Programmation de client ActiveX : Gestion des unités d'exécution
La passerelle ActiveX vers EJB (Enterprise JavaBeans) prend en charge les accès en exécution libre ou compartimentée et implémente Free Threaded Marshaler dans un environnement hybride, tel que Active Server Pages (ASP). Chaque unité d'exécution créée dans le processus ActiveX est reflétée dans l'environnement Java™ lorsque l'unité d'exécution communique par l'intermédiaire de la passerelle ActiveX vers EJB.
Quand toutes les références aux objets Java (il n'y a pas d'objets JObjectProxy ou JClassProxy) sont chargées dans une unité d'exécution ActiveX, la passerelle ActiveX vers EJB rompt la liaison entre l'unité d'exécution et le code de la machine virtuelle Java (JVM). Par conséquent, vous devez veiller à ce que tout code Java auquel vous accédez à partir d'une application Windows à unités d'exécution multiples (multithreaded) respecte le cloisonnement des unités d'exécution. Les applications Visual Basic et VBScript sont principalement à unité d'exécution unique. Par conséquent, les applications Visual Basic et VBScript ne sont pas concernées a priori par les problèmes d'unité d'exécution lorsqu'elles accèdent aux programmes Java. Par contre, les programmes Active Server Pages et C ou C++ à unités d'exécution multiples doivent impérativement les prendre en compte.
- Un conteneur d'automatisation Windows à unités d'exécutions multiples (notre processus ActiveX) démarre. Il figure dans l'unité d'exécution A.
- Le processus ActiveX initialise la passerelle ActiveX vers EJB, qui exécute le code JVM. Cette dernière établit une liaison avec la même unité d'exécution et l'appelle, en interne, Unité d'exécution 1.
- Le processus ActiveX lance deux unités d'exécution : B et C.
- L'unité d'exécution B du processus ActiveX a recours à la passerelle ActiveX vers EJB pour accéder à un objet créé dans l'unité d'exécution A. La machine JVM établit une liaison avec l'unité d'exécution B et l'appelle Unité d'exécution 2.
- L'unité d'exécution C du processus ActiveX ne communique jamais avec le code JVM. Par conséquent, la JVM n'a jamais besoin de s'y connecter. Dans ce cas, la machine JVM ne dispose pas d'une relation univoque entre les unités d'exécution ActiveX et Java.
- L'unité d'exécution B libère par la suite tous les objets JObjectProxy et JClassProxy qu'elle a utilisés. La liaison de l'unité d'exécution 2 de Java est supprimée.
- L'unité d'exécution B utilise de nouveau la passerelle ActiveX vers EJB pour accéder à un objet créé dans l'unité d'exécution A. Le code JVM établit de nouveau une liaison avec l'unité d'exécution et la nomme Unité d'exécution 3.
Processus ActiveX | Accès à la JVM par le processus ActiveX |
---|---|
Unité d'exécution A - Créée dans 1 | Unité d'exécution 1 - Liée dans 2 |
Unité d'exécution B - Créée dans 4 | Unité d'exécution 2 - Liée dans 4, lien supprimé dans 6 Unité d'exécution 3 - Liée dans 7 |
Unité d'exécution C - Créée dans 4 |
Unités d'exécution et Active Server Pages
Active Server Pages (ASP), dans Microsoft Internet Information Server, est un environnement à unités d'exécution multiples. Lorsque vous créez l'objet XJB.JClassFactory, vous devez l'enregistrer dans la collection Application en tant qu'objet Application-global. Cela permet à l'ensemble des unités d'exécution de votre environnement ASP d'accéder au même objet passerelle ActiveX vers EJB. Active Server Pages crée par défaut 10 unités d'exécution compartimentées par processus ASP et par CPU. Ceci signifie que lorsque votre objet passerelle ActiveX vers EJB est initialisé, il peut être appelé par l'une des 10 unités d'exécution et non pas par l'unité d'exécution qui l'a créé.
Si vous devez simuler un comportement à compartiment unique, créez une DLL (dynamic link library) ActiveX avec une unité d'exécution à un seul compartiment dans Visual Basic et encapsulez l'objet passerelle ActiveX vers EJB dans cette DLL. Cela garantit que toutes les tentatives d'accès à la machine JVM passent par la même unité d'exécution. Utilisez la balise <OBJECT> pour attribuer XJB.JClassFactory à un objet Application et gardez à l'esprit les conséquences de l'introduction d'unités d'exécution uniques dans une application Web.
- Q243543 INFO: Do Not Store STA Objects in Session or Application
- Q243544 INFO: Component Threading Model Summary Under Active Server Pages
- Q243548 INFO: Design Guidelines for VB Components Under ASP