首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

靈活運用 EJB 本地與遠端介面 (四):部署架構實戰與效能測試分析

     編輯:Java 相關知識

本系列最終篇,聚焦於雙介面 EJB 應用在不同部署拓撲下的實際配置、部署步驟與效能基準測試。透過 WebSphere Application Server (WAS) 與 Tomcat 雙容器環境,驗證本地/遠端介面在 All-in-One、Separate Containers 架構下的表現,為架構決策提供量化依據。

一、 測試環境與伺服器專案建立

1. Tomcat 伺服器專案

  • 專案名:TestServerTomcat
  • 伺服器名:ServerTomcat,類型:Apache Tomcat 4.1 Test Environment
  • 指定 TOMCAT_HOME 與 JDK 路徑。

Tomcat 伺服器設定

圖 7:Tomcat 伺服器設定

2. WebSphere 伺服器專案

  • 專案名:TestServerWAS
  • 伺服器名:ServerWAS,接受預設值 (參考「Hello World J2EE 應用」文章)。

工作台全貌

圖 8:包含所有專案的工作台

二、 三種部署架構配置與驗證

架構 A:All-in-One-All-Local (單一 WAS,全本地介面)

  1. 將 DualEARForAllInOne 加入 WAS 配置,設定類路徑、JVM 參數 (-Xms512M -Xmx512M)、禁用通用測試客戶端。
  2. 資料源:移除 Cloudscape,新增 DB2 5.0 資料源 dualDB,設為預設 CMP 連線工廠 (jdbc/ds1),授權類型 Per_Connection_Factory。
  3. EJB 模組 DualEJBModule01:CMP 連線工廠 JNDI = jdbc/ds1。
  4. DualEJBModule02 的 web.xml、ejb-jar.xml 中 useLocal=true。
  5. 發布啟動 ServerWAS,瀏覽器訪問 https://localhost:9080/DualWebModule03 驗證。

索引與結果頁面

圖 9:索引與結果頁面

架構 B:All-in-One-All-Remote (單一 WAS,全遠端介面)

無需變更專案設定,僅將 DualEJBModule02 的部署描述符中 useLocal 改為 false 即可切換至遠端介面通訊。

架構 C:Separate Containers (分離容器:WAS 跑 EJB,Tomcat 跑 Web)

  1. 從 ServerWAS 移除 DualEARForAllInOne,加入 DualEARForEJBContainer (僅含 EJB 模組)。
  2. 將 DualWebModule03 加入 ServerTomcat 配置。
  3. Servlet 端配置:取消 web.xml 中 EJB 定位 URL 參數註解,指定 WAS IIOP 位址。
  4. ejb-jar.xml 設 useLocal=true (WAS 容器內 EJB 間通訊仍用本地介面最快)。
  5. Tomcat 環境設定 (關鍵):
    • Class Path 添加:${WAS_50_PLUGINDIR}/properties、DualEJBModule02/ejbModule、DualJavaModule00。
    • 外部 JAR 添加:j2ee-modified.jar (僅含 EJB 相關類,避免 javax.servlet 衝突)。
    • JVM 參數:-Xms256M -Xmx256M。
  6. 啟動順序:先 ServerWAS,再 ServerTomcat。訪問 https://localhost:8080/DualWebModule03 (Tomcat 預設 8080 埠)。

三、 效能測試工具與方法論

使用簡易 Java HTTP 測試客戶端 (含 GUI),支援多執行緒並發,測量平均回應時間與成功採樣數 (吞吐量)。

  • 測試模式:GET 請求預熱 (Set),POST 請求正式測試。
  • 參數:id (隨機)、firstName/lastName (預定義陣列)。
  • 每請求同步等待回應,模擬真實用戶行為。
  • 測試前禁用追蹤日誌。

Java HTTP 測試客戶端

圖 10:簡易 Java HTTP 測試客戶端

測試環境規格

  • 硬體:Intel Pentium III 1GHz、1.5GB RAM、單處理器。
  • 軟體:Windows 2000、DB2 V8.1、WSAD 5.1、Tomcat 4.1.29、IBM JDK 1.3.1 (JIT 啟用)。
  • 所有服務運行於同一機器。

測試類型

  • 單執行緒 (1 Thread)
  • 多執行緒 (100 Threads) - Tomcat 需調整 server.xml maxProcessors=200 minProcessors=200。

每組運行 10 分鐘,首輪預熱捨棄,每輪清空 PERSON 表。

四、 測試結果與深度分析

單執行緒平均回應時間

圖 11:單執行緒客戶端平均回應時間

多執行緒平均回應時間

圖 12:多執行緒客戶端平均回應時間

單執行緒吞吐量

圖 13:單執行緒客戶端吞吐量

多執行緒吞吐量

圖 14:多執行緒客戶端吞吐量

關鍵發現

  1. 本地介面優勢明顯:同一 JVM 內 All-Local 延遲最低、吞吐最高,符合預期 (避免序列化/網路開銷)。
  2. 遠端介面開銷固定:All-Remote 比 All-Local 慢約 30-50%,主要來自 RMI/IIOP 編碼解碼與埠通訊。
  3. 分離容器性能折損:Separate Containers 架構因跨進程 (Tomcat→WAS) 遠端呼叫,性能接近 All-Remote,但 Web 容器分離帶來安全/擴縮彈性收益。
  4. 多執行緒擴縮受限於單核:單處理器環境下執行緒調度開銷抵消並發優勢,吞吐量未線性增長甚至下降。
  5. 相對趨勢一致:絕對數值受限於測試機器,但相對比率具備普適參考價值。

五、 結語與架構建議

  • **公開雙介面不限制部署彈性**:同一應用程式碼支援多種拓撲,僅需調整部署描述符。
  • **同一 JVM 必用本地介面**:效能最優,無理由使用遠端。
  • **分離容器接受性能代價**:換取安全隔離與獨立擴縮能力。
  • **推薦模式**:會話 Bean (有時實體 Bean) 同時實現本地/遠端介面,透過部署配置自動路由,極小代碼成本換取最大部署靈活度與效能。

作者:Sheldon Wosnick,IBM 多倫多實驗室 WebSphere Studio Application Developer Server Tools 組顧問軟體工程師。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved