Payload软件包
Payload软件包可用于客户端,也可用于服务器。它包含三个类:ClientReport、CurrentReport、和 Serializer。
ClientReport 表示一个客户端次数报告:
package Payload;
import java.io.*; import java.util.*;
/** * * @author Brian Connolly Brian@ideajungle.com */ 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 Brian@ideajungle.com */ 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是非线程安全的;我们假设在客户端应用中只有一个单线程执行服务器事务。
|