ActiveX-Clientprogrammierung, Threading-Tipps

Die ActiveX-EJB-Brücke unterstützt den Free-Threaded- und den Apartment-Threaded-Zugriff und implementiert den Free Threaded Marshaler, der in einer Hybridumgebung, wie z. B. Active Server Pages, eingesetzt werden kann. Jeder im ActiveX-Prozess erstellte Thread wird in der Java-Umgebung gespiegelt, wenn der Thread über die ActiveX-EJB-Brücke kommuniziert.

Die ActiveX-EJB-Brücke gibt den Thread aus dem JVM-Code frei, wenn alle Referenzen auf Java-Objekte (es gibt keine JObjectProxy- oder JClassProxy-Objekte) in einem ActiveX-Thread geladen wurden. Daher müssen Sie darauf achten, dass ein Java-Code, auf den Sie über eine Windows-Anwendung mit mehreren Threads zugreifen, threadsicher ist. Visual Basic-Code und VBScript-Anwendungen arbeiten im Grunde mit Einzel-Threads. Daher haben Visual-Basic- und VBScript-Anwendungen keine Threadprobleme in den Java-Programmen, auf die sie zugreifen. Bei Active Server Pages sowie Multi-Thread-C- und -C++-Programmen können Probleme auftreten.

Stellen Sie sich folgendes Szenario vor:
  1. Ein Windows-Automationscontainer mit mehreren Threads (ActiveX-Prozess) wird gestartet. Der Container befindet sich in Thread A.
  2. Der ActiveX-Prozess initialisiert die ActiveX-EJB-Brücke, die den JVM-Code startet. Die JVM wird demselben Thread zugeordnet und bezeichnet den Thread intern als Thread 1.
  3. Der ActiveX-Prozess startet zwei Threads: B und C.
  4. Thread B im ActiveX-Prozess verwendet die ActiveX-EJB-Brücke, um auf ein Objekt, das in Thread A erstellt wurde, zuzugreifen. Die JVM wird Thread B zugeordnet und bezeichnet diesen Thread als Thread 2.
  5. Thread C im ActiveX-Prozess kommuniziert nie mit dem JVM-Code, daher ist es nicht erforderlich, die JVM dem Code zuzuordnen. In diesem Fall hat der JVM-Code keine Eins-zu-eins-Beziehung zwischen ActiveX- und Java-Threads.
  6. Thread B gibt später alle verwendeten JObjectProxy- und JClassProxy-Objekte frei. Der Java-Thread 2 wird freigegeben.
  7. Thread B im ActiveX-Prozess verwendet die ActiveX-EJB-Brücke erneut, um auf ein Objekt, das in Thread A erstellt wurde, zuzugreifen. Der JVM-Code wird dem Thread erneut zugeordnet und bezeichnet diesen Thread als Thread 3.
Tabelle 1. Threadszenario. Threadszenario
ActiveX-Prozess JVM-Zugriff nach ActiveX-Prozess
Thread A - erstellt in 1 Thread 1 - zugeordnet in 2
Thread B - erstellt in 4 Thread 2 - zugeordnet in 4, freigegeben in 6, Thread 3 - zugeordnet in 7
Thread C - erstellt in 4  

Threads und Active Server Pages

Active Server Pages (ASP) unter Microsoft Internet Information Server ist eine Multi-Thread-Umgebung. Wenn Sie das XJB.JClassFactory-Objekt erstellen, können Sie es in der Anwendungsgruppe als globales Anwendungsobjekt (Application-global) speichern. Alle Threads in der ASP-Umgebung können jetzt auf dasselbe Objekt der ActiveX-EJB-Brücke zugreifen. Active Server Pages erstellt standardmäßig 10 Apartment-Threads pro ASP-Prozess pro CPU. Das bedeutet, wenn das Objekt der ActiveX-EJB-Brücke initialisiert wird, können alle 10 Threads das Objekt aufrufen, nicht nur der Thread, der es erstellt hat.

Wenn Sie das Verhalten eines Single-Apartment-Thread simulieren müssen, können Sie eine Single-Apartment Threaded ActiveX DLL (Dynamic Link Library) in Visual Basic erstellen und das Objekt der ActiveX-EJB-Brücke dort einbinden. Durch diese Einbindung gewährleisten Sie, dass der gesamte Zugriff auf das JVM-Objekt über denselben Thread durchgeführt wird. Sie müssen den Tag <OBJECT> verwenden, um die XJB.JClassFactory einem Anwendungsobjekt zuzuordnen. Beachten Sie die Konsequenzen, die die Einführung eines Single-Thread-Verhaltens in eine Webanwendung hat.

Die Microsoft Knowledge Base enthält mehrere Abschnitte zu ASP und Threads, z. B.:
  • Q243543 INFO: Keine STA-Objekte in Sitzung oder Anwendung speichern
  • Q243544 INFO: Zusammenfassung der Modelle für Komponenten-Threading unter Active Server Pages
  • Q243548 INFO: Designrichtlinien für VB-Komponenten unter ASP

Symbol, das den Typ des Artikels anzeigt. Referenzartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rcli_xthread
Dateiname:rcli_xthread.html