关于此任务
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.options 和 server.env 文件。
- 假定由调用者来管理 JVM 和环境。
- 将 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。
- 使用 ServerBuilder 类来初始化服务器。
ServerBuilder sb = new ServerBuilder();
Server libertyServer = sb.setName(serverName)
.setUserDir(userDir)
.setOutputDir(outputDir)
.build();
- 调用 Server.start() 方法来启动服务器。将来调用 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());
- 调用 Server.stop() 方法以停止服务器。将来调用 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());
- 实现 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);
}
}