將 Liberty 設定檔伺服器內嵌在應用程式中

您可以利用 Liberty 設定檔所提供的「系統程式設計介面 (SPI)」,在您的應用程式中配置、控制及監視 Liberty 設定檔伺服器。

關於這項作業

Liberty 設定檔提供下列 SPI 來啟動或停止 Liberty 設定檔伺服器:
  • com.ibm.wsspi.kernel.embeddable.Server
  • com.ibm.wsspi.kernel.embeddable.ServerBuilder
利用 Future 物件來儲存啟動或停止作業的結果。 內嵌作業所使用的回覆碼與 server 指令所使用的回覆碼相同。 如需回覆碼、伺服器 Script 使用之 JVM 選項,以及伺服器 Script 使用之程序環境的相關資訊,請參閱 伺服器指令選項

此外,您可以建立自己的類別來實作 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.optionsserver.env 檔。
  • 假設 JVM 和環境的管理是由呼叫端進行管理。

程序

  1. 將 SPI 匯入您的呼叫端類別中,然後定義操作 Liberty 設定檔伺服器所需的引數。
    import com.ibm.wsspi.kernel.embeddable.Server;
    import com.ibm.wsspi.kernel.embeddable.ServerBuilder;
    public class MyEmbeddedServer {
        serverName="defaultServer";
        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() 方法,以啟動伺服器。在 Future 上呼叫 get(),以封鎖至啟動作業完成時。 使用下列其中一項來判斷伺服器是否已順利啟動:
    • 檢查傳回的結果碼。
    • 使用 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() 方法以停止伺服器。在 Future 上呼叫 get(),以封鎖至停止作業完成。 使用下列其中一項來判斷伺服器是否已順利停止:
    • 檢查傳回的結果碼。
    • 使用 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);
        }
    }

指示主題類型的圖示 作業主題

資訊中心條款 | 意見


「時間戳記」圖示 前次更新: 2015 年 6 月 22 日
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=phil&product=was-libcore-mp&topic=twlp_extend_embed
檔名:twlp_extend_embed.html