工作负载管理 |
BeenThere 样本的技术说明 |
查找源代码 |
查看编码注意事项 |
BeenThere 应用程序的源代码在
z/OS 客户:z/OS 平台上未提供样本的源代码树,这是因为 z/OS 平台上没有构建样本应用程序。
BeenThere 应用程序演示 IBM WebSphere Application Server Network Deployment Edition 的工作负载管理(WLM)功能。BeenThere 应用程序包含 BeenThere servlet 和 BeenThere 无状态会话企业 bean。BeenThere servlet 演示位于分派 HTTP 请求所至的集群中的应用程序服务器。BeenThere 企业 bean 演示位于分派企业 bean 请求所至的集群中的应用程序服务器。BeenThere 企业 bean 由 BeenThere servlet 调用。
BeenThere servlet 显示下列信息:
另外,BeenThere servlet 可以执行下列操作:
用于演示 Web 容器和 EJB 容器工作负载管理的样本环境在下图中描述:
图 1 样本环境
该环境中的机器包括:
配置包含两个服务器集群 MyWebCluster 和 MyEJBCluster。一个服务器集群由一组应用程序服务器组成。如果其中一个成员服务器发生故障,那么请求会被路由到集群的其他成员。 每个样本集群由两个集群成员组成。集群 MyWebCluster 由集群成员 WebServer1 和 WebServer2 组成,集群 MyEJBCluster 由集群成员 EJBServer1 和 EJBServer2 组成。
该配置环境是一个仅用于演示如何运行 BeenThere 应用程序的样本。在生产环境中,必须进行仔细的资源容量规划以确定基于期望的客户机请求负载要在特定机器数上创建多少应用程序服务器成员。
WebSphere Application Server Network Deployment Edition 提供 HTTP 请求和 EJB 请求的工作负载管理(WLM)。
HTTP 请求的工作负载管理由 Web 服务器插件处理。
注意图 1 中的配置。web 机器正在运行将 HTTP 请求分派到每个应用程序服务器 WebServer1 和 WebServer2 的 IBM HTTP Server,这两个应用程序服务器组成了 MyWebCluster 集群的成员并且正在运行 BeenThere servlet。这些应用程序服务器分别在 app1 和 app2 机器上进行配置。此外,IBM HTTP Server 插件配置为 WebServer1 具有 WLM 权重 2 而 WebServer2 具有 WLM 权重 3。您可以把权重看作计数器,从配置的值开始记数,每运行一个请求减 1。使用循环法进程将请求分派到任何当前具有大于 0 的权重记数器值的应用程序服务器。如果值为 0,那么跳过该应用程序服务器。所有权重计数器都被减少到 0 后,那么将所有应用程序服务器权重记数器复位到它们配置的值,然后分派进程再次启动。
EJB 请求的工作负载管理由 WLM 控制器在 WebSphere Application Server 内部处理。
注意图 1 中的配置。定义了 MyEJBCluster 集群,它由负责运行 BeenThere 无状态会话企业 bean 的应用程序服务器成员 EJBServer1 和 EJBServer2 组成。BeenThere servlet 调用企业 bean 获取关于运行企业 bean 的应用程序服务器的执行信息。此外,分别用权重值 1 和 3 配置这些服务器。
在 z/OS 平台上,权重值用于均衡 HTTP 请求,但不用于均衡因特网 ORB 间协议(IIOP)请求。
BeenThere 应用程序使用 WebSphere Application Server 中的管理应用程序编程接口。通过使用这些接口应用程序可以访问运行时和环境配置信息:
提供服务器端接口获取应用程序服务器属性信息和执行标准 JMX MBean 管理功能的能力。
提供对远程 AdminService 对象的客户机端接口。AdminClient 类通过支持的 Java 管理扩展(JMX)连接器之一提供到远程 AdminService 对象的代理。
提供接口在本地或远程查询或修改配置数据和管理应用程序服务器配置文档的位置和内容。
为了演示使用 WebSphere Application Server 管理接口时应用程序拥有的强大功能和灵活性,BeenThere 应用程序以下列方式利用所有这些接口:
BeenThere servlet 和企业 bean 都使用 AdminService 接口以获取节点名、应用程序服务器名和运行它们的应用程序服务器的进程标识。以下代码段演示如何获取服务器属性信息:
// Get the WebSphere AdminService. AdminService adminService = AdminServiceFactory.getAdminService(); // Get the WebSphere Admin Local Server MBean instance. ObjectName localServer = adminService.getLocalServer(); // Get the Node name. nodeName = (String) adminService.getAttribute(localServer, "nodeName"); // Get the Application Server name. serverName = (String) adminService.getAttribute(localServer, "name"); // Get the Application Server Process Id. serverPid = (String) adminService.getAttribute(localServer, "pid");
AdminClient 接口用于连接到 Deployment Manager 进程以检索运行 BeenThere 企业 bean 的集群的所有应用程序服务器成员的集群成员权重值。以下代码段演示如何获取 AdminClient 接口的实例:
// Get the WebSphere AdminService. AdminService adminService = AdminServiceFactory.getAdminService(); // Get the AdminClient instance for the Deployment Manager. adminClient = adminService.getDeploymentManagerAdminClient();
使用 ConfigService 接口读取 WebSphere Application Server cell.xml 配置文档,以确定 BeenThere 应用程序是在 WebSphere Application Server Base Edition 中运行还是在 Network Deployment Edition 环境中运行。以下代码段演示如何确定应用程序运行的环境:
// Create a new WebSphere Management Session. Session session = new Session(); // Get the WebSphere ConfigService instance // for the application server executing this servlet. ConfigService configService = ConfigServiceFactory.getConfigService(); if (configService != null) { // Read the cell.xml document. ObjectName cellObj = ConfigServiceHelper.createObjectName(null, "Cell"); ObjectName[] cellObjs = configService.queryConfigObjects(session, null, cellObj, null); if (cellObjs.length != 0) { cellObj = cellObjs[0]; String cellName = (String) configService.getAttribute(session, cellObj, "name"); String cellType = (String) configService.getAttribute(session, cellObj, "cellType"); if (cellType.equals("DISTRIBUTED")) { websphereND = true; } } // Release the Session. configService.discard(session);如果检测到 Network Deployment 环境,那么启用并显示 Display bean 集群成员权重选项,这是因为该选项仅在该类型的环境中有效。否则,该选项不会作为可选选项显示。