本系列開幕篇,確立基於真實客戶端視角的事務響應時間測量架構,構建服務端 EJB 原型,為後續客戶端報告收集、SOAP 附件傳輸、異步持久化奠定基礎。

| 層級 | 組件 | 職能 | 技術實現 |
|---|---|---|---|
| 應用層 | EJB 組件 | 業務邏輯實現 | Session/Entity Bean |
| 應用程序 | 客戶端業務邏輯 + UI | Java Swing/Console/Web | |
| Web 服務層 | 服務端實現 | SOAP 請求路由 → EJB | Tie 類 + 容器 |
| 客戶端實現 | Stub 代理 → SOAP 發送 | JAX-RPC 生成 Stub | |
| 監控增強 (紅線) | Payload 包 | 報告模型、事務邊界、序列化、隊列傳輸 | 共享庫 (ClientReport/CurrentReport/Serializer) |
| 客戶端 Stub | 攜帶報告附件 | 修改 _send() 前調用 attachPendingReportToMessage() | |
| 服務端 Tie | 剝離報告 → 入隊 | 修改 invoke_<Method>() 插入 queueFirstAttachmentText() | |
| 異步持久化 | 報告消費、入庫、分析 | MDB (Message Driven Bean) 監聽 JMS 隊列 |
transactionID,後續調用攜帶該 IDpackage TransactionProcessor;
import javax.ejb.*;
import java.rmi.server.*;
import java.util.*;
public class XactBean implements javax.ejb.SessionBean {
private javax.ejb.SessionContext context;
private int mRandom; // 模擬事務 ID
public void setSessionContext(SessionContext aContext) { context = aContext; }
public void ejbActivate() {}
public void ejbPassivate() {}
public void ejbRemove() {}
public void ejbCreate() {
Random r = new Random();
mRandom = r.nextInt(10000); // 生成唯一事務標識
}
// 業務方法 1:提交工作,返回事務句柄
public java.lang.String SubmitWork(java.lang.String Work) {
return new Integer(mRandom).toString();
}
// 業務方法 2:檢查工作狀態 (總是返回 true 模擬即時完成)
public boolean CheckWork(java.lang.String Xact) {
return true;
}
// 業務方法 3:獲取結果 (返回同一事務標識)
public java.lang.String GetResult(java.lang.String Xact) {
return new Integer(mRandom).toString();
}
}
| 方法 | 業務含義 | 返回值 | 監控意義 |
|---|---|---|---|
| SubmitWork | 初始化事務 | transactionID (句柄) | 事務開始標記 |
| CheckWork | 輪詢進度 | boolean (是否完成) | 中間狀態檢查 |
| GetResult | 獲取最終結果 | 結果數據 | 事務結束標記 |
完整源碼可從 Resources 下載,基於 Sun ONE Studio Enterprise Edition Update 1 + Sun ONE Application Server 構建,原理通用於所有 J2EE 實現。