Zur Erzeugung von Daten muss in einer Aufzeichnungssitzung mindestens ein Client gestartet werden. Mit dem Produkt werden mehrere Clients ausgeliefert. Wenn Sie das Starten einer bestimmten Anwendung automatisieren möchten, können Sie einen neuen Client definieren.
Der Client dient nur dazu, eine Anwendung zu starten und das Recorder-Framework über Lebenszyklusereignisse des Clients zu benachrichtigen. Informationen zum Konfigurieren eines Clients, damit er von einem Recorder aufgezeichnet werden kann, finden Sie unter Aufzeichnung eines Clients mit einem Recorder definieren.
Manchmal steht kein Client zum Starten zur Verfügung, da der Client bereits vorhanden ist oder der Client ein System mit eigenem Lebenszyklus darstellt. In diesem Fall können Sie den im Produkt enthaltenen manuellen Client verwenden. Die ID des manuellen Clients lautet "com.ibm.rational.test.lt.recorder.core.manualClient".
Zum Definieren eines neuen Clienttyps müssen Sie folgende Schritte ausführen:
- Deklarieren Sie in der Datei plugin.xml einen neuen Clienttyp. Verwenden Sie dazu den Erweiterungspunkt com.ibm.rational.test.lt.recorder.core.client.
- Legen Sie fest, ob der Client lokal innerhalb der Workbench, über Fernzugriff in einer separaten JVM oder in derselben JVM wie der Recorder, an den er gebunden ist, ausgeführt werden kann.
- Definieren Sie einen Delegaten, bei dem es sich um die Implementierungsklasse des Clients handelt. Die Aufgabe des Delegaten besteht darin, den Client zu starten und zu stoppen und das Framework zu benachrichtigen, wenn der Client gestartet oder beendet wird.
- Wenn der Client remote angebunden ist, definieren Sie eine Implementierung eines fernen Startprogramms, die Details zu der JVM bereitstellt, in der der Delegat ausgeführt wird.
- Optional können Sie ein Prüfprogramm für Voraussetzungen definieren, mit dem eine grundlegende Prüfung vorgenommen wird, ob der Client auf dem aktuellen Computer ausgeführt werden kann.
So implementieren Sie die Schnittstelle IClientDelegate:
- Sie müssen eine Implementierung dieser Schnittstelle bereitstellen. Diese Schnittstelle dient dazu, den Client zu starten und zu stoppen und Benachrichtigungen über Ereignisse wie "Client gestartet" und "Client gestoppt" zu senden.
- Die Methoden "start()" und "stop()" sind asynchron. Dies bedeutet, dass die Operation nicht abgeschlossen sein muss, wenn diese Methoden zurückgegeben werden. Aus diesem Grund muss das Framework von einem Client-Delegaten benachrichtigt werden, wenn eine Operation abgeschlossen ist.
- Die Operation "stop()" wird nur aufgerufen, wenn der Benutzer auf der Benutzeroberfläche auf Stoppen klickt. In vielen Fällen führt der Benutzer Aktionen in der Anwendung selbst aus, um sie zu schließen. Der Delegat muss die Anwendung überwachen und das Framework benachrichtigen, wenn die Anwendung geschlossen wird.
- Ein Client kann eine Konfiguration aufweisen. Die Konfiguration wird entweder mithilfe einer XML-Datei (einer Datei mit der Erweiterung ".recconfig") oder mit einem Assistenten erstellt. Wenn Sie ein Beispiel einer XML-Datei anzeigen möchten, öffnen Sie eine vorhandene Aufzeichnungssitzungsdatei und klicken Sie dann auf . Die Konfiguration ist in einem Objekt des Typs "ClientConfiguration" gespeichert, bei dem es sich um eine Zuordnung von Zeichenfolgen zu verschiedenen Objekttypen handelt. Diese Konfiguration wird von einem Client-Delegaten in seiner Methode "initialize()" gelesen.
- Einem Client-Delegaten wird in seiner Methode "initialize()" ein Kontext gegeben. Dieser Kontext ermöglicht es dem Recorder, Benachrichtigungen über Ereignisse zu senden und Protokollnachrichten aufzuzeichnen.
- Normalerweise erweitern Sie die Klasse "BaseClientDelegate", anstatt die Klasse "IClientDelegate" direkt zu implementieren. Über die abstrakte Basisklasse wird ein grundlegendes Verhalten für die meisten Methoden bereitgestellt. Diejenigen, für die eine Überschreibung erforderlich ist, können Sie überschreiben.
- Ein Client-Delegat kann Nachrichten an den Benutzer senden, indem er die Methode "sendUserMessage()" aufruft oder die Methode "getContext().sendMessage(new UserMessage(...)) verwendet, wenn er nicht die Klasse "BaseClientDelegate" erweitert.
- Einem Client-Delegaten kann die Kommunikation mit externen Entitäten ermöglicht werden, indem dynamische Eigenschaften festgelegt oder abgerufen oder Nachrichten empfangen werden. Ein Client-Delegat ist nur dann nützlich, wenn Sie eine bestimmte Benutzeroberfläche für den Client entwickeln oder wenn Sie einen Client-Dekorator für den Client definieren.
Wenn mit dem Client ein bestimmter Prozess gestartet wird, können Sie die Klasse "com.ibm.rational.test.lt.recorder.core.clients.ProcessBuilderClientDelegate" erweitern. In diesem Fall müssen Sie nur die Methode "initialize()" erweitern und dann Setter-Methoden aufrufen, um Befehlszeile, Argumente, Umgebungsvariablen und Arbeitsverzeichnis einzurichten.