J2EEWeb服務客戶端質量報告(三)
|
Payload軟件包
Payload軟件包可用于客戶端,也可用于服務器。它包含三個類:ClientReport、CurrentReport、和 Serializer。
ClientReport 表示一個客戶端次數報告:
| package Payload; import java.io.*; import java.util.*; /** * * @author Brian Connolly [email protected] */ public class ClientReport implements Serializable { public Date clientStartDateTime; public Date serverStartDateTime; public long clientElapsedMS; public String type; public String status; public String transactionID; public String clientID; //Default public constructor for WSDL public ClientReport() { } /* . . . Get, set property methods are not shown */ |
在上述代碼中,clientStartDateTime記錄客戶端初始化事務的時間。serverStartDateTime 當前沒有使用;它的用途是保存事務的服務器開始時間以便事務次數可與服務器資源使用的隨時間的變化關聯起來。
ClientElapsedMS是我們記錄的主要工具:從客戶端開始記錄新事務到它收到最后一個Web服務調用的結果為止這段時間的毫秒數。
Type允許客戶端使用類型特征化事務。通常,事物系統提供許多種類型的事務。我們期望某些類型對于服務器來說相對容易一些,某些類型相對難一些,這樣當我們分析響應次數和測量服務器資源時我們能夠將他們辨別出來。
Status記錄事務完成時的完成狀態。
ClientID 是客戶端標記符。當分析服務品質時我們可以使用它來區別同一個客戶端完成的事務。
客戶端使用第二個類CurrentReport來定界應用事務:
| package Payload; import java.util.*; import java.rmi.server.*; /** * * @author Brian Connolly [email protected] */ public class CurrentReport { public static UID ClientIdentifier = new UID(); /** Holds value of property currentReport */ public static ClientReport Report; public static ClientReport LastReport; /** Creates a new instance of CurrentReport */ public CurrentReport() { } public void BeginTransaction() { Report = new ClientReport(); Report.setClientID(ClientIdentifier.toString()); Report.setClientStartDateTime( new Date()); } public void CommitTransaction(String transactionID, String type, String status) { Report.setTransactionID(transactionID); Report.setStatus(status); Report.setType(type); long l1 = Report.getClientStartDateTime().getTime(); long l2 = new Date().getTime(); Report.setClientElapsedMS(l2-l1); LastReport = Report; Report = null; } /** Getter for property currentReport * @return Value of property currentReport */ public static ClientReport getReport() { ClientReport last = LastReport; LastReport = null; return last; } /** Setter for property currentReport * @param currentReport New value of property currentReport */ public void setReport(ClientReport Report) { this.LastReport = Report; } } |
CurrentReport保存進行中的事務的當前 ClientReport 。它也保存LastReport,也就是一個完成的事務。它還產生一個作為唯一設備標記符使用的客戶端標記符——在實際的應用中,這個客戶端標記符可被修改為全局的唯一標記符。CurrentReport是非線程安全的;我們假設在客戶端應用中只有一個單線程執行服務器事務。