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

J2EE Web 服務客戶端質量報告實戰(五):樣品應用構建與端到端驗證

     編輯:Java 相關知識

本系列最終篇,通過完整樣品應用演示如何構建客戶端響應時間收集系統,涵蓋客戶端應用編寫、服務端隊列配置、MDB 接收器部署、運行驗證及改進方向。

一、樣品客戶端應用構建

1. 專案結構導入

  • 應用類:XactClientApp — 模擬業務事務執行
  • Xact 包:客戶端 Web 服務處理器 (由 wscompile 生成)
  • 構建腳本:gen.bat 調用 wscompile 配合 config.xml 生成

2. 核心客戶端邏輯

public class XactClientApp {
    public static void main(String[] args) {
        try {
            int cyclesPerXact = 1;
            int numberXacts = 5;
            String transactionID = "";
            String transactionType = cyclesPerXact + " submit,check,gets";
            Stub stub = createProxy();
            XactServiceServantInterface xact = (XactServiceServantInterface) stub;
            CurrentReport cr = new CurrentReport();

            for (int x = 1; x <= numberXacts; x++) {
                cr.BeginTransaction();
                for (int i = 1; i <= cyclesPerXact; i++) {
                    transactionID = xact.submitWork("new transaction");
                    System.out.println("Transaction: " + transactionID);
                    xact.checkWork(transactionID);
                    xact.getResult(transactionID);
                }
                cr.CommitTransaction(transactionID, transactionType, "success");
            }
        } catch (Exception ex) { ex.printStackTrace(); }
    }

    private static Stub createProxy() {
        return (Stub) (new XactService_Impl()).getXactServiceServantInterfacePort();
    }
}

3. 關鍵設計點

  • 事務邊界:BeginTransaction()/CommitTransaction() 定界業務事務
  • 內層循環:單事務包含 submit/check/get 三次 Web 服務調用
  • 報告攜帶:submitWork() 調用時,Stub 內 Serializer.attachPendingReportToMessage() 將報告附加至 SOAP 消息
  • 參數控制:cyclesPerXact、numberXacts 控制調用粒度與總量

二、服務端 JMS 隊列配置

Sun ONE Application Server 內嵌 MQ,三步完成:

  1. 物理目標:JMS → Services → Physical Destinations → New → TestMDBQueue (Queue 類型)
  2. JMS 目標資源:Destination Resources → New → JNDI: jms/TestMDBQueue、類型: javax.jms.Queue → 屬性 imqDestinationName=TestMDBQueue
  3. 連接工廠:Connection Factories → New → JNDI: jms/TestMDBFactory、類型: javax.jms.QueueConnectionFactory

應用變更後控制台輸出綁定確認信息。

三、MDB 接收器部署

  1. 安裝 MDBTester 文件系統,打開 TestMDB EJB
  2. 屬性頁 → Sun ONE AS 標籤 → 勾選映射訪問,關聯前置定義的 JMS 資源
  3. 右鍵 EJBModule_TestMDB → Deploy
  4. 控制台確認:
    MDB00044: Deploying message-driven bean [TestMDB], consuming from [jms/TestMDBQueue]
    MDB00022: Listening on JMS destination [TestMDBQueue]

獨立模塊部署:MDB 獨立於業務 EJB,避免資源競爭,便於複用。

四、端到端運行驗證

1. 基礎設施未就緒時

客戶端正常調用,服務端嘗試入隊失敗:

Exception occurred connecting to queue: javax.naming.NameNotFoundException

關鍵驗證:業務事務不受影響繼續執行,體現「業務可靠性優於監控完整性」原則。

2. 隊列與 MDB 就緒後

再次運行客戶端,控制台輸出響應時間:

Took:2613 MS. for: 1 submit,check,gets
Took:431 MS. for: 1 submit,check,gets
Took:4307 MS. for: 1 submit,check,gets
Took:871 MS. for: 1 submit,check,gets

注意:5 個事務僅 4 個報告,因最後一個事務無後續請求攜帶報告(取樣機制)。

五、改進與後續工作

1. ClientReport 擴展

  • 添加 (attribute, value) 字符串數組,捕獲事務二進制特征
  • 擴展客戶端軟件版本、操作系統版本字段,支持兼容性分析

2. 異常報告機制

  • 客戶端異常上下文持久化,應用重啟時上傳
  • MDB 接收錯誤報告 → 觸發 SNMP Trap 或 Email 警報 → 客服介入

3. 系統定位

本實現為事務取樣器而非全量記錄器:

  • 輕量級:無額外網絡通信,報告攜帶於業務請求
  • 低優先級:隊列異步處理,不搶佔業務資源
  • 容錯:監控失敗不影響業務完成

六、系列總結

通過Payload 包 (ClientReport/CurrentReport/Serializer)、客戶端 Stub 改造、服務端 Tie 改造、MDB 異步接收四大組件協作,實現了真實客戶端視角的事務響應時間測量。該架構可平滑遷移至任意 J2EE 實現,為服務質量監控、容量規劃、瓶頸定位提供數據支撐。

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