BeenThere 範例 - TechNotes


尋找程式碼
檢視程式撰寫注意事項


尋找程式碼

BeenThere 應用程式的程式碼在 profile_root/samples/src/BeenThere 目錄中,其中 <profile_root> 是部署管理程式設定檔的完整路徑。

z/OS 客戶:z/OS 平台不提供範例的程式碼樹狀結構,因為範例應用程式不是在 z/OS 平台上建置的。



檢視程式撰寫注意事項

概觀

BeenThere 應用程式示範 IBM WebSphere Application Server Network Deployment Edition 的工作量管理 (WLM) 功能。BeenThere 應用程式包含 BeenThere Servlet 和 BeenThere Stateless Session Enterprise Bean。BeenThere Servlet 示範 HTTP 要求被分派到的叢集中的應用程式伺服器。BeenThere Enterprise Bean 示範 Enterprise Bean 要求被分派到的叢集中的應用程式伺服器。BeenThere Enterprise 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)。

Web 儲存器工作量管理

HTTP 要求的工作量管理由 Web 伺服器外掛程式處理。

請考量圖 1 中的配置。web 機器正在執行 IBM HTTP Server,它將 HTTP 要求分派至每一部應用程式伺服器 WebServer1 和 WebServer2,這些伺服器組成 MyWebCluster 叢集的成員,並且正在執行 BeenThere Servlet。這些應用程式伺服器分別在 app1app2 機器上配置。此外,IBM HTTP Server 外掛程式被配置為 WebServer1 具有 WLM 權重 2,WebServer2 具有 WLM 權重 3。您可以將權重視為一個計數器,從它們的配置值開始,每服務一個要求就減少 1。使用循環式程序將要求分派至目前其權重計數器值大於 0 的任何應用程式伺服器。如果這個值為 0,就會跳過該應用程式伺服器。在所有的權重計數器都遞減到 0 之後,所有應用程式伺服器的權重計數器都會被重設為其配置值,分派程序則從頭重新開始。

EJB 儲存器工作量管理

EJB 要求的工作量管理由 WLM 控制器在 WebSphere Application Server 內部處理。

請考量圖 1 中的配置。A MyEJBCluster 叢集被配置為由應用程式伺服器成員 EJBServer1 和 EJBServer2 所組成,這些成員負責執行 BeenThere Stateless Session Enterprise Bean。BeenThere Servlet 呼叫 Enterprise Bean,來取得關於 Enterprise Bean 執行所在之應用程式伺服器的執行資訊。此外,這些伺服器分別被配置為權重值 13

在 z/OS 平台中,加權值用來平衡 HTTP 要求,但不用來平衡網際網路交互 ORB 通訊協定 (IIOP) 要求。

WebSphere 管理應用程式設計介面

BeenThere 應用程式利用 WebSphere Application Server 中的管理應用程式設計介面。應用程式可以利用這些介面來存取執行時期和環境配置資訊:


AdminService

提供伺服器端介面來取得應用程式伺服器屬性資訊,以及執行標準 JMX MBean 管理功能的能力。

AdminClient

提供對遠端 AdminService 物件的用戶端介面。AdminClient 類別會透過其中一個支援的「Java 管理延伸規格」(JMX) 連接器,提供一個 Proxy 給遠端 AdminService 物件。

ConfigService

提供介面來本端或遠端查詢或修改配置資料,以及管理應用程式伺服器配置文件的位置和內容。

為了示範應用程式在使用 WebSphere Application Server 管理介面時所具有的強大功能和彈性,BeenThere 應用程式以下列方式利用這所有的介面:


AdminService

BeenThere Servlet 和 Enterprise Bean 都使用 AdminService 介面,來取得它們執行所在之應用程式伺服器的節點名稱、應用程式伺服器名稱和程序 ID。下列程式碼區段示範如何取得伺服器屬性資訊:


// 取得 WebSphere AdminService。
AdminService adminService = AdminServiceFactory.getAdminService();

// 取得 WebSphere Admin Local Server MBean 實例。
ObjectName localServer = adminService.getLocalServer();

// 取得節點名稱。
nodeName = (String) adminService.getAttribute(localServer, "nodeName");

// 取得應用程式伺服器名稱。
serverName = (String) adminService.getAttribute(localServer, "name");

// 取得應用程式伺服器程序 ID。
serverPid = (String) adminService.getAttribute(localServer, "pid");

AdminClient

AdminClient 介面用來連接至部署管理程式程序,以擷取執行 BeenThere Enterprise Bean 之叢集的所有應用程式伺服器成員的叢集成員權重值。下列程式碼區段示範如何取得 AdminClient 介面的實例:


// 取得 WebSphere AdminService。
AdminService adminService = AdminServiceFactory.getAdminService();

// 取得部署管理程式的 AdminClient 實例。
adminClient = adminService.getDeploymentManagerAdminClient();

ConfigService

ConfigService 介面用來讀取 WebSphere Application Server cell.xml 配置文件,以判斷 BeenThere 應用程式是在 WebSphere Application Server Base Edition 或 Network Deployment Edition 環境中執行。 下列程式區段示範如何判斷應用程式執行所在之環境:


// 建立新的 WebSphere 管理階段作業。
Session session = new Session();

// 取得執行這個 Servlet 之應用程式伺服器的
// WebSphere ConfigService 實例。
ConfigService configService = ConfigServiceFactory.getConfigService();
if (configService != null)
{
  // 讀取 cell.xml 文件
  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;
    }
  }

  // 釋放階段作業。
  configService.discard(session);

如果偵測到 Network Deployment 環境,則會啟用並顯示 Display Bean 叢集成員權重選項,因為這個選項只有在這種類型的環境中有效。否則,這個選項不會顯示成可選取的選項。