在应用程序中嵌入 Liberty 概要文件服务器

可以使用 Liberty 概要文件所提供的系统编程接口 (SPI) 来配置、控制和监视应用程序中的 Liberty 概要文件服务器。

关于此任务

Liberty 概要文件提供了下列 SPI 来启动或停止 Liberty 概要文件服务器:
  • 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.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);
        }
    }

用于指示主题类型的图标 任务主题

信息中心的条款和条件 | 反馈


时间戳记图标 最近一次更新时间: Wednesday, 2 September 2015
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=phil&product=was-libcore-mp&topic=twlp_extend_embed
文件名:twlp_extend_embed.html