Empfohlene Methoden für die Programmierung von ActiveX-Clients

Es wird empfohlen, für den Zugriff auf Java™-Komponenten die Sprache Java zu verwenden. Es empfiehlt sich, so viel wie möglich in Java zu programmieren und eine kleine, einfache Schnittstelle zwischen dem COM-Automationscontainer (z. B. Visual Basic) und dem Java-Code zu verwenden. Bei Verwendung dieses Schnittstelle vermeiden Sie Probleme mit dem Systemaufwand und der Leistung, die normalerweise bei der Navigation in der Schnittstelle auftreten.

Bewährtes Verfahren Bewährtes Verfahren: Die folgenden Themen werden behandelt:
  • Richtlinien für Visual Basic
  • CScript und Windows Scripting Host
  • Richtlinien für Active Server Pages
  • Richtlinien für J2EE
best-practices

Richtlinien für Visual Basic

Die folgenden Richtlinien sollen Ihnen helfen, die Verwendung der ActiveX-EJB-Brücke mit Visual Basic zu optimieren:

  • Starten Sie die Replikation von Visual Basic über die Datei launchClientXJB.bat. Wenn Sie die Visual Basic-Anwendung über den Visual Basic-Debugger ausführen möchten, müssen Sie IDE (Visual Basic Integrated Development Environment) in der Umgebung der ActiveX-EJB-Brücke ausführen. Wenn Sie Ihr Visual Basic-Projekt erstellt haben, können Sie es über eine Befehlszeile starten; z. B. launchClientXJB MyApplication.vbp. Sie können die Visual-Basic-Anwendung auch separat in der Umgebung der ActiveX-EJB-Brücke starten, indem Sie den Visual-Basic-Direktaufruf im Startmenü von Windows so ändern, dass die Datei launchClientXJB.bat vor dem Aufruf der Datei VB6.EXE ausgeführt wird.
  • Beenden Sie Visual Basic IDE, bevor Sie ein Debugging von Programmen durchführen.

    Da der JVM-Code (Java Virtual Machine) dem aktiven Prozess zugeordnet wird, müssen Sie den Editor von Visual Basic verlassen, bevor Sie ein Debugging des Programms durchführen. Wenn Sie das Debugging durchführen und erst dann das Programm in Visual Basic IDE verlassen, wird der JVM-Code weiter ausgeführt, und Sie ordnen denselben JVM-Code erneut zu, wenn XJBInit() vom Debugger aufgerufen wird. Dadurch entstehen Fehler, wenn Sie versuchen, XJBInit()-Parameter (z. B. classpath) zu aktualisieren, da die Änderungen erst nach einem Neustart von Visual Basic wirksam werden.

  • Speichern Sie das XJB.JClassFactory-Objekt global.

    Da Sie den JVM-Code nicht entladen oder erneut initialisieren können, müssen Sie das entstehende XJB.JClassFactory global speichern. Der Systemaufwand, der dadurch entsteht, dass Sie dieses Objekt als globale Variable behandeln oder eine einzelne Referenz übergeben, ist wesentlich geringer, als wenn Sie ein neues XJB.JClassFactory-Objekt erstellen und den XJBInit()-Parameter mehrmals aufrufen.

CScript und Windows Scripting Host

Die folgenden Richtlinien sollen Ihnen helfen, die Verwendung der ActiveX-EJB-Brücke mit CScript und WSH (Windows Scripting Host) zu optimieren:
  • Führen Sie einen Start in der ActiveX-EJB-Umgebung durch.
    Rufen Sie die VBScript-Dateien in der Umgebung der ActiveX-EJB-Brücke auf, um VBScript-Dateien in .vbs-Dateien auszuführen. Sie haben zwei Möglichkeiten, Ihr Script zu starten:
    • launchClientXJB MyScript.vbs
    • launchClientXJB cscript MyScript.vbs

Richtlinien für Active Server Pages

Die folgenden Richtlinien sollen Ihnen helfen, die Verwendung der ActiveX-EJB-Brücke mit Active Server Pages zu optimieren:

  • Verwenden Sie die ActiveX-EJB-Helper-Funktionen über die Anwendung Active Server Pages.

    Da der ASP-Code (Active Server Pages) normalerweise VBScript verwendet, können Sie die mitgelieferten Helper-Funktionen in jeder VBScript-Umgebung verwenden, wenn Sie geringfügige Änderungen vornehmen. Weitere Informationen zu diesen Helper-Funktionen enthält der Abschnitt "Helper-Funktionen für Datentypkonvertierung". Wenn Sie außerhalb der ASP-Umgebung arbeiten, entfernen oder ändern Sie alle Referenzen auf Server-, Anforderungs-, Antwort-, Anwendungs- und Sitzungsobjekte. Ändern Sie z. B. Server.CreateObject in CreateObject.

  • Konfigurieren Sie den JRE-Pfad global im System.

    Das XJB.JClassFactory-Objekt muss die Java-Laufzeit-DLL (Dynamic Link Library) bei der Initialisierung lokalisieren können. Beim Internet Information Server haben Sie nicht die Möglichkeit, einen separaten Pfad für die Prozesse anzugeben. Sie müssen die Prozesspfade in der Systemvariable PATH angeben. Sie können auf einer Maschine, die die ASP-Anwendung verwendet, nur eine einzelne JVM-Version einsetzen. Beachten Sie auch, dass Sie die IIS-Maschine nach einer Änderung der Systemvariable PATH erneut starten müssen, damit der Internet Information Server die Änderungen erkennen kann.

  • Definieren Sie die Umgebungsvariable TEMP.

    Wird die Umgebungsvariable TEMP nicht definiert, speichert der Internet Information Server alle temporären Dateien im Verzeichnis WINNT, was im Normalfall nicht wünschenswert ist.

  • Verwenden Sie eine hohe Isolationsstufe bzw. einen isolierten Prozess.

    Wenn Sie die ActiveX-Java-Brücke mit Active Server Pages verwenden, sollten Sie Ihre Webanwendung in einem eigenen Prozess erstellen. Sie können nur eine JVM-Anweisung pro Prozess laden. Möchten Sie mehrere Anwendungen mit verschiedenen JVM-Umgebungsoptionen ausführen (z. B. verschiedene Klassenpfade), benötigen Sie separate Prozesse.

  • Verwenden Sie die Option zum Entladen der Anwendung.

    Wählen Sie beim Debugging für Ihre Anwendung die Option Entladen aus, wenn Sie die Eigenschaften der ASP-Anwendung in der Administrationskonsole des Internet Information Server anzeigen, um den Prozess über den Speicher zu entladen und somit den JVM-Code zu entladen.

  • Führen Sie einen Prozess pro Anwendung aus.

    Verwenden Sie in Ihrer ASP-Umgebung eine ASP-Anwendung pro J2EE-Anwendung oder JVM-Umgebung. Wenn Sie separate Klassenpfade oder JVM-Einstellungen benötigen, müssen Sie separate ASP-Anwendungen (virtuelle Verzeichnisse mit hoher Isolationsstufe oder isolierten Prozess) verwenden.

  • Speichern Sie das XJB.JClassFactory-Objekt im Anwendungsbereich.

    Da zwischen einer JVM-Anweisung und einem Prozess eine Eins-zu-eins-Beziehung erforderlich ist und der JVM-Code nie unabhängig von einem Prozess abgehängt bzw. inaktiviert werden kann, müssen Sie das XJB.JClassFactory-Objekt im Anwendungsbereich zwischenspeichern und können die XJBInit()-Methode nur einmal aufrufen.

    Da die ActiveX-EJB-Brücke einen Free Threaded Marshaler verwendet, sollten Sie davon profitieren, dass der Internet Information Server und die ASP-Umgebung mit mehreren Threads arbeiten. Wenn Sie das XJB.JClassFactory-Objekt im Seitenbereich (lokale Variablen) erneut initialisieren möchten, kann die Methode XJBInit() nur die lokale XJB.JClassFactory-Variable initialisieren. Es ist effizienter, die XJBInit()-Methode einmal zu verwenden.

  • Verwenden Sie die Konvertierungsfunktionen von VBScript.

    Da der VBScript-Code nur verschiedene Datentypen unterstützt, müssen Sie die Funktionen CStr(), CByte(), CBool(), CCur(), CInt(), Clng(), CSng() und CDbl() verwenden, um der ActiveX-EJB-Brücke mitzuteilen, welche Datentypen Sie verwenden, z. B. oMyObjekt.Foo(CDbl(1.234)).

Richtlinien für J2EE

Die folgenden Richtlinien sollen Ihnen helfen, die Verwendung der ActiveX-EJB-Brücke mit der J2EE-Umgebung zu optimieren:

  • Speichern Sie die Objekte des Client-Containers global.

    Da Sie nur eine JVM-Anweisung pro Prozess und einen einzelnen J2EE-Client-Container (com.ibm.websphere.client.applicationclient.launchClient) pro JVM-Anweisung verwenden können, müssen Sie Ihren J2EE-Client-Container nur einmal initialisieren und können ihn dann wieder verwenden. Bei ASP-Anwendungen müssen Sie den J2EE-Client-Container in einer Variable auf Anwendungsebene speichern und nur einmal initialisieren (beim Ereignis Application_OnStart() in der Datei global.asa oder um mit IsEmpty() zu prüfen, ob der Container leer ist).

    Wenn Sie das Objekt des Client-Containers global speichern, müssen Sie beachten, dass Sie die Parameter des Client-Containers nicht ändern können, ohne dabei das Objekt zu löschen. In diesem Fall müssen Sie ein neues Objekt erstellen. Diese Parameter geben die EAR-Datei, den Bootstrap-Host, den Klassenpfad usw. an. Wenn Sie eine Visual Basic-Anwendung ausführen und die Parameter des Client-Containers ändern möchten, müssen Sie die Anwendung beenden und erneut starten. Wenn Sie eine Anwendung von Active Server Pages ausführen, müssen Sie zuerst die Anwendung über den Internet Information Server entladen (Siehe Abschnitt "Option zum Entladen der Anwendung verwenden" in den Richtlinien für Active Server Pages). Laden Sie dann die Anwendung von Active Server Pages mit den verschiedenen Parametern des Client-Containers. Die Parameter werden zum ersten Mal beim Start der Anwendung Active Server Pages festgelegt. Da der Client-Container auf dem Internet Information Server gespeichert ist, verwenden alle Browser-Clients die Parameter über die Anwendung Active Server Pages. Dieses Verhalten ist für den Code von Active Server Pages normal, kann aber verwirrend sein, wenn Sie versuchen, mehrere WebSphere Application Server mit derselben Anwendung von Active Server Pages auszuführen. Diese Vorgehensweise wird nicht unterstützt.

  • Verwenden Sie das angepasste temporäre Verzeichnis erneut, um die EAR-Datei zu extrahieren.

    Standardmäßig ruft der Client-Container die .ear-Datei der Anwendung auf und extrahiert sie im Verzeichnis temp. Dann definiert der Client-Container den Klassenlader des Thread, um das Verzeichnis der extrahierten EAR-Datei und die im Client-JAR-Manifest enthaltenen JAR-Dateien zu verwenden. Dieser Prozess ist zeitaufwändig. Außerdem werden diese Dateien aufgrund einiger Einschränkungen für das Herunterfahren der JVM über JNI (Java Native Interface) sowie Dateisperren nie gelöscht.

    Dies gilt insbesonders für die Client-Container-Methode launch(), die bei jedem Aufruf die EAR-Datei in einem wahlfreien Verzeichnis in Ihrem temporären Verzeichnis auf dem Festplattenlaufwerk entpackt. Der aktuelle Klassenlader des Java-Thread wird dann so geändert, dass er auf dieses extrahierte Verzeichnis verweist. Die Dateien in diesem Verzeichnis werden gesperrt. Auf einem normalen J2EE-Java-Client werden diese Dateien nach dem Beenden der Anwendung automatisch gelöscht. Die Bereinigung wird durchgeführt, wenn der Hook für das Herunterfahren des Client-Containers aufgerufen wird (dies geschieht in der ActiveX-EJB-Brücke nie). Dabei bleibt das temporäre Verzeichnis erhalten.

    Möchten Sie diese Probleme vermeiden, können Sie ein Verzeichnis angeben, um die EAR-Datei zu extrahieren. Dazu müssen Sie die Java-Systemeigenschaft com.ibm.websphere.client.applicationclient.archivedir definieren, bevor Sie die Methode launch() des Client-Containers aufrufen. Wenn das Verzeichnis nicht vorhanden oder leer ist, können Sie die EAR-Datei normal extrahieren. Wenn die EAR-Datei zuvor extrahiert wurde, wird das Verzeichnis wieder verwendet. Dieses Feature ist besonders für Serverprozesse (z. B. ASP) von Bedeutung, die gestoppt und erneut gestartet werden können und dabei die Methode launchClient() möglicherweise mehrmals aufrufen.

    Wenn Sie Ihre EAR-Datei mehrmals aktualisieren müssen, löschen Sie zuerst das temporäre Verzeichnis. Das nächste Mal, wenn Sie das Objekt des Client-Containers erstellen, extrahiert es die neue EAR-Datei in das temporäre Verzeichnis. Wenn Sie das temporäre Verzeichnis nicht löschen bzw. den Wert der Systemeigenschaft nicht dahingehend ändern, dass er auf ein anderes temporäres Verzeichnis verweist, verwendet der Client-Container die gegenwärtig extrahierte EAR-Datei und nicht Ihre geänderte EAR-Datei.

    Anmerkung: Achten Sie bei der Angabe der Eigenschaft "com.ibm.websphere.client.applicationclient.archivedir" darauf, dass das angegebene Verzeichnis für jede EAR-Datei, die Sie verwenden, eindeutig ist. Geben Sie z. B. für die Dateien MyEar1.ear und MyEar2.ear nicht dasselbe Verzeichnis an.

    Wenn Sie angeben, dass Sie diese Systemeigenschaft nicht verwenden möchten, wechseln Sie regelmäßig in das Windows-Verzeichnis temp, und löschen Sie die Unterverzeichnisse WSTMP*. In kurzer Zeit können diese Unterverzeichnisse eine beträchtliche Menge an Festplattenspeicherplatz beanspruchen.


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_activexbestpractice
Dateiname:rcli_activexbestpractice.html