アプリケーションへの Liberty サーバーの組み込み

Liberty で提供されるシステム・プログラミング・インターフェース (SPI) を使用して、アプリケーションで Liberty サーバーの構成、制御、およびモニターを行うことができます。

このタスクについて

Liberty では、Liberty サーバーの始動または停止を行うために、次の SPI を提供しています。
  • com.ibm.wsspi.kernel.embeddable.Server
  • com.ibm.wsspi.kernel.embeddable.ServerBuilder
Future オブジェクトを使用して、開始または停止の操作の結果を保管します。組み込み操作によって使用される戻りコードは、server コマンドによって使用される戻りコードと同じです。戻りコード、サーバー・スクリプトによって使用される JVM オプション、およびサーバー・スクリプトによって使用されるプロセス環境について詳しくは、『サーバー・コマンド・オプション』を参照してください。

さらに、com.ibm.wsspi.kernel.embeddable.ServerEventListener インターフェースを実装する独自のクラスを作成することにより、サーバーが始動している時、始動した時、または停止した時に非同期通知を受信することができます。

注: アプリケーション内に組み込みサーバーのインスタンスを作成するには、以下のステップを実行する必要があります。
  • ws-server.jar ファイルをクラス・パスに含めます。ws-server.jar ファイルは、Liberty のインストール済み環境の ${wlp.install.dir}/bin/tools ディレクトリーにあります。
  • ターゲット・サーバーの名前を指定します。ターゲット・サーバーは存在している必要があります。
  • オプション: -javaagent JVM オプションを指定して ws-javaagent.jar ファイルを構成します。ws-javaagent.jar ファイルは、Liberty のインストール済み環境の ${wlp.install.dir}/bin/tools ディレクトリーにあります。ws-javaagent.jar ファイルは構成することが推奨されていますが、モニターまたはトレースなど、そのファイルを必要とするサーバーの機能を使用しない限り必須ではありません。IBM® サポートに連絡するときにトレースの提供が必要になることがあります。その場合は、通常使用しない場合でも、ws-javaagent.jar ファイルを使用してサーバーを始動する必要があります。
注: 組み込み環境では、次のようになります。
  • 環境変数はチェックされません。また、jvm.options および server.env ファイルは読み取られません。
  • JVM および環境は、呼び出し元によって管理されるものと想定されます。

手順

  1. SPI を呼び出し元クラスにインポートし、Liberty サーバーの操作に必要な引数を定義します。
    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/");
        ...
    }
    各部の意味は次のとおりです。
    • serverName は必須であり、前に作成したサーバーの名前と一致している必要があります。
    • userDir はオプションで、ユーザー・ディレクトリーのパスを設定するために使用されます。デフォルトでは、ユーザー・ディレクトリーは ${wlp.user.dir} です。
    • outputDir はオプションで、出力ディレクトリーのパスを設定するために使用されます。デフォルトでは、出力ディレクトリーは ${wlp.user.dir}/serversです。
  2. ServerBuilder クラスを使用して、サーバーを初期化します。
        ServerBuilder sb = new ServerBuilder();
        Server libertyServer = sb.setName(serverName)
                                 .setUserDir(userDir)
                                 .setOutputDir(outputDir)
                                 .build();
  3. Server.start() メソッドを呼び出してサーバーを始動します。get() を Future で呼び出して、開始操作が完了するまでブロックします。 次のいずれかの方法を使用して、サーバーが正常に始動したかどうかを判別します。
    • 返された結果コードを確認する。
    • successful() メソッドを使用する。
    • サーバーが始動している場合、server.isRunning() メソッドは true を返す。
        Future<Result> startReturnCode = libertyServer.start();
        Result result = startReturnCode.get(); // block until operation complete, if necessary
        System.out.println("Start returned: success=" + result.successful() + ", rc=" + result.getReturnCode() + ", ex=" + result.getException());
  4. Server.stop() メソッドを呼び出してサーバーを停止します。get() を Future で呼び出して停止操作が完了するまでブロックします。 次のいずれかの方法を使用して、サーバーが正常に停止したかどうかを判別します。
    • 返された結果コードを確認する。
    • successful() メソッドを使用する。
    • サーバーが停止している場合、server.isRunning() メソッドは false を返す。
        Future<Result> stopReturnCode = libertyServer.stop();
        Result result = stopReturnCode.get(); // block until operation complete, if necessary
        System.out.println("Stop returned: success=" + result.successful() + ", rc=" + result.getReturnCode() + ", ex=" + result.getException());
  5. ServerEventListener インターフェースを実装します。ServerEventListener インターフェースを実装すると、サーバーが始動または停止した時に通知を受け取ることができます。
    // update the class declaration to indicate that it implements ServerEventListener
    public class MyEmbeddedServer implements ServerEventListener {
        ...
        MyEmbeddedServer() throws ServerException {
            // set the listener via the server builder
            ServerBuilder sb = new ServerBuilder();
            Server libertyServer = sb.setName(serverName)
                                     .setServerEventListener(this)
                                     .build();
        }
    
        ...
        @Override
        public void serverEvent(ServerEvent event) {
            // provide an implementation of the serverEvent method
            System.out.println("serverEvent: " + event);
        }
    }

トピックのタイプを示すアイコン タスク・トピック



タイム・スタンプ・アイコン 最終更新: Tuesday, 6 December 2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twlp_extend_embed
ファイル名: twlp_extend_embed.html