J2EEWeb服務客戶端質量報告(五)
|
建立樣品客戶端應用
要建立樣品客戶端應用,請將下列文件系統添加到IDE中:<download directory>/Metrics/TransactionClient.
該文件系統包含一個應用類和一個Xact 軟件包。應用類可模仿客戶端事務的執行,Xact 軟件包包含客戶端Web服務處理器。
Xact軟件包可使用Sun Web服務開發者工具包來創建,這個工具包包括在Sun ONE應用框架內。批文件gen.bat使用wscompile命令創建Xact軟件包。如果你想重建該軟件包的話, 你只需調整環境變量和它使用的config.xml 中的URL。但是,如果你這樣做的話,你得重寫添加到Stub 類Web方法的代碼行,你要用它來覆蓋原來的代碼行。
我們看看XactClientApp,樣品客戶端應用程序類:
| import Xact.*; import javax.xml.rpc.Stub; import Payload.*; public class XactClientApp { /** Creates a new instance of XactClientApp */ public XactClientApp() { } /** * @param args the command line arguments */ public static void main(String[] args) { try { int cyclesPerXact = 1; int numberXacts = 5; String transactionID = ""; String transactionType = String.valueOf(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); boolean unused = xact.checkWork(transactionID); String ignore = xact.getResult(transactionID); } cr.CommitTransaction(transactionID, transactionType,"success"); } } catch (Exception ex) { ex.printStackTrace(); } } private static Stub createProxy() { return (Stub)(new XactService_Impl()).getXactServiceServantInterfacePort(); } } |
先看它的內部循環。客戶端應用判斷商業事務的組成。在本例中,它包括三個Web服務調用:針對submitWork()、checkWork()和getResult()的分別調用。客戶端使用beginTransaction()和 commitTransaction()定界事務。在該循環的第二個循環中,在CurrentReport.LastReport 對象中將出現一個完整的ClientReport。當客戶端調用submitWork()時,Web 服務客戶端Stub 類中相應方法調用Serializer.attachPendingReportToMessage() 將該報告連接到SOAP信息上。
CyclesperXact和numberXacts用于控制每件事務的Web服務調用數和客戶端在運行過程中遞交的事務數。
右擊應用程序圖標XactClientApp;先選擇Build All項,接著選擇Execute項。在執行窗口中,你會看到:對于每件事務,應用都報告它收到的事務標志符。觀察應用服務Windows輸出控制臺,你可以看到以下的代碼行:
INFO: CORE3274: successful server startup
INFO: CORE5053: Application onReady complete.
INFO: CORE3282: stdout: Exception occurred connecting to queue: javax.naming.Nam
eNotFoundException
INFO: CORE3282: stdout: Exception occurred connecting to queue: javax.naming.Nam
eNotFoundException
INFO: CORE3282: stdout: Exception occurred connecting to queue: javax.naming.Nam
eNotFoundException
INFO: CORE3282: stdout: Exception occurred connecting to queue: javax.naming.Nam
eNotFoundException
我們還沒有安裝應用服務次數排列或者配置應用服務次數讀取器EJB。客戶端產生次數福建,服務器接收它,并試圖將它列隊到一個不存在的隊列中。Serializer 類只是報告錯誤并允許應用程序繼續運行。回想我們的目標之一就是保持商業事物系統的總可靠性。可是我們卻看到即使新的次數組件失敗,關鍵的商業事務仍然可以照常進行。