Liberty-Server in Anwendungen integrieren

Sie können die von Liberty bereitgestellten Systemprogrammierschnittstellen (SPIs) verwenden, um einen Liberty-Server in Ihren Anwendungen zu konfigurieren, zu steuern und zu überwachen.

Informationen zu diesem Vorgang

Liberty stellt die folgenden SPIs bereit, um einen Liberty-Server zu starten bzw. zu stoppen:
  • com.ibm.wsspi.kernel.embeddable.Server
  • com.ibm.wsspi.kernel.embeddable.ServerBuilder
Verwenden Sie ein Future-Objekt, um das Ergebnis eines Start- oder Stoppvorgangs zu speichern. Die Rückgabecodes, die von den integrierten Operationen verwendet werden, sind identisch mit den Rückgabecodes, die der Befehl server verwendet. Weitere Informationen zu Rückgabecodes, vom Server-Script verwendete JVM-Optionen und die vom Server-Script verwendete Prozessumgebung finden Sie unter Optionen für den Befehl 'server'.

Sie können zusätzlich asynchrone Benachrichtigungen empfangen, wenn der Server startet oder bereits gestartet oder gestoppt ist, indem Sie Ihre eigene Klasse erstellen, die die Schnittstelle com.ibm.wsspi.kernel.embeddable.ServerEventListener implementiert.

Anmerkung: Wenn Sie eine Instanz eines integrierten Servers innerhalb Ihrer Anwendung erstellen möchten, müssen Sie die folgenden Schritte ausführen:
  • Schließen Sie die Datei ws-server.jar in den Klassenpfad ein. Die Datei ws-server.jar befindet sich im Verzeichnis ${wlp.install.dir}/bin/tools der Liberty-Installation.
  • Geben Sie den Namen des Zielservers an. Der Zielserver muss vorhanden sein.
  • Optional: Konfigurieren Sie die Datei ws-javaagent.jar mit der JVM-Option -javaagent. Die Datei ws-javaagent.jar befindet sich im Verzeichnis ${wlp.install.dir}/bin/tools der Liberty-Installation. Es wird empfohlen, die Datei ws-javaagent.jar zu konfigurieren, es ist jedoch nicht verbindlich, es sei denn, Sie verwenden die dafür vorgesehene Serverfunktionalität, wie beispielsweise Überwachung oder Traceerstellung. Wenn Sie sich an den IBM® Support wenden, werden Sie möglicherweise aufgefordert, den Trace bereitzustellen. In diesem Fall müssen Sie den Server mit der Datei ws-javaagent.jar starten, auch wenn Sie dies in der Regel nicht tun.
Anmerkung: In einer integrierten Umgebung:
  • Umgebungsvariable werden nicht geprüft, und die Dateien jvm.options und server.env werden nicht gelesen.
  • Es wird vorausgesetzt, dass die Verwaltung der JVM und der Umgebung vom aufrufenden Programm durchgeführt wird.

Vorgehensweise

  1. Importieren Sie die SPIs in Ihre Caller-Klasse und definieren Sie Argumente, die für den Betrieb des Liberty-Servers erforderlich sind.
    import com.ibm.wsspi.kernel.embeddable.Server;
    import com.ibm.wsspi.kernel.embeddable.ServerBuilder;
    public class MyEmbeddedServer {
        	String serverName="defaultServer";
        	File userDir = new File("usr");
        	File outputDir = new File("usr/servers/");	
        ...
    }
    Für diese Angaben gilt Folgendes:
    • Das Argument serverName ist erforderlich und muss mit dem Namen des zuvor erstellten Servers überinstimmen.
    • Das Argument userDir ist optional und wird verwendet, um den Pfad des Benutzerverzeichnisses anzugeben. Standardmäßig lautet der Name des Benutzerverzeichnisses ${wlp.user.dir}.
    • Das Argument outputDir ist optional und wird verwendet, um den Pfad des Ausgabeverzeichnisses anzugeben. Standardmäßig lautet der Name des Ausgabeverzeichnisses ${wlp.user.dir}/servers.
  2. Initialisieren Sie den Server mit der Klasse ServerBuilder.
        ServerBuilder sb = new ServerBuilder();
        Server libertyServer = sb.setName(serverName)
                                 .setUserDir(userDir)
                                 .setOutputDir(outputDir)
                                 .build();
  3. Rufen Sie die Methode Server.start() auf, um den Server zu starten. Rufen Sie die Methode get() für "Future" auf, um bis zum Abschluss der Startoperation zu blockieren. Verwenden Sie eine der folgenden Methoden, um zu bestimmen, ob der Server erfolgreich gestartet wurde:
    • Überprüfen Sie den zurückgegebenen Ergebniscode.
    • Verwenden Sie die Methode successful().
    • Wenn der Server gestartet ist, gibt die Methode server.isRunning() den Wert "true" zurück.
        Future<Result> startReturnCode = libertyServer.start();
        Result result = startReturnCode.get(); // Ggf. blockieren, bis Operation abgeschlossen ist
        System.out.println("Start returned: success=" + result.successful() + ", rc=" + result.getReturnCode() + ", ex=" + result.getException());
  4. Rufen Sie die Methode Server.stop() auf, um den Server zu stoppen. Rufen Sie die Methode get() für "Future" auf, um bis zum Abschluss der Stoppoperation zu blockieren. Verwenden Sie eine der folgenden Methoden, um zu bestimmen, ob der Server erfolgreich gestoppt wurde:
    • Überprüfen Sie den zurückgegebenen Ergebniscode.
    • Verwenden Sie die Methode successful().
    • Wenn der Server gestoppt ist, gibt die Methode server.isRunning() den Wert "false" zurück.
        Future<Result> stopReturnCode = libertyServer.stop();
        Result result = stopReturnCode.get(); // Ggf. blockieren, bis Operation abgeschlossen ist
        System.out.println("Stop returned: success=" + result.successful() + ", rc=" + result.getReturnCode() + ", ex=" + result.getException());
  5. Implementieren Sie die Schnittstelle "ServerEventListener". Wenn Sie die Schnittstelle "ServerEventListener" implementieren, können Sie Benachrichtigungen empfangen, wenn der Server gestartet oder gestoppt ist.
    // Aktualisieren Sie die Klassendeklaration, um anzuzeigen, dass sie "ServerEventListener" implementiert.
    public class MyEmbeddedServer implements ServerEventListener {
        ...
        MyEmbeddedServer() throws ServerException {
            // Legen Sie den Listener über das Servererstellungsprogramm fest.
            ServerBuilder sb = new ServerBuilder();
            Server libertyServer = sb.setName(serverName)
                                     .setServerEventListener(this)
                                     .build();
        }
    
        ...
        @Override
        	public void serverEvent(ServerEvent event) {
            // Geben Sie eine Implementierung der Methode "serverEvent" an.
            System.out.println("serverEvent: " + event);
        }
    }

Symbol das den Typ des Artikels anzeigt. Taskartikel

Dateiname: twlp_extend_embed.html