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

J2EE Web 服務客戶端質量報告實戰(四):服務端組件構建與應用部署

     編輯:Java 相關知識

本篇聚焦服務端基礎設施構建:Web 服務包生成與 Tie 類改造、MDB 接收器實現、Sun ONE Studio 環境下的應用組裝與部署全流程。

一、客戶端 Stub 類改造:報告附加邏輯植入

1. 自動生成與修改點

  • Stub 類命名:<ServiceName>ServantInterface_Stub
  • 每個業務方法對應一個 Stub 方法 (如 submitWork())
  • 核心修改:在 _send() 前插入 Serializer.attachPendingReportToMessage()

2. 關鍵代碼片段

public String submitWork(String string_1) throws RemoteException {
    try {
        StreamingSenderState _state = _start(_handlerChain);
        InternalSOAPMessage _request = _state.getRequest();
        _request.setOperationCode(SubmitWork_OPCODE);
        // ... 請求構建代碼 ...
        
        // 【關鍵插入】附加待發送報告至 SOAP 消息
        Serializer.attachPendingReportToMessage(_state.getMessageContext());
        
        _send((String) _getProperty(ENDPOINT_ADDRESS_PROPERTY), _state);
        // ... 響應處理代碼 ...
    } catch (RemoteException e) { throw e; }
    catch (JAXRPCException e) { throw new RemoteException(e.getMessage(), e); }
    catch (Exception e) { /* 統一異常包裝 */ }
}

3. 機制說明

  • attachPendingReportToMessage():無待發報告則直接返回;否則將 XML 序列化報告作為文本附件添加至 SOAP Message
  • 所有業務方法 (submitWork/checkWork/getResult) 同樣修改

二、服務端 Tie 類改造:報告剝離與入隊

1. Tie 類角色

  • 類名:<ServiceName>ServantInterface_Tie
  • Web 服務模塊頂層棧,將 SOAP 請求綁定至 EJB 方法
  • 每個業務方法對應 invoke_<MethodName>()

2. 關鍵修改

private void invoke_SubmitWork(StreamingHandlerState state) throws Exception {
    // ... 反序列化請求參數代碼 ...
    
    // 【關鍵插入】剝離第一個附件並入隊處理
    Serializer.queueFirstAttachmentText(state.getMessageContext());
    
    // ... 調用 EJB 業務方法、構建響應代碼 ...
}

3. 流程說明

  • queueFirstAttachmentText():從 SOAP 消息獲取第一個附件內容 → 調用 Serializer.queueReportXML() 入隊
  • 所有 invoke_<X> 方法同樣插入

三、MDB 接收器實現:異步處理報告

public class TestMDBBean implements MessageDrivenBean, MessageListener {
    private MessageDrivenContext context;

    public void onMessage(Message aMessage) {
        try {
            if (aMessage instanceof TextMessage) {
                TextMessage msg = (TextMessage) aMessage;
                String crXML = msg.getText();
                ClientReport cr = Serializer.ClientReportXML(crXML); // XML 反序列化
                System.out.println("Took:" + cr.getClientElapsedMS() + " MS. for: " + cr.getType());
            } else {
                System.out.println("Message of wrong type: " + aMessage.getClass().getName());
            }
        } catch (JMSException e) {
            context.setRollbackOnly();
        } catch (Throwable te) { /* 記錄異常 */ }
    }
    // 生命週期方法...
}

關鍵點

  • 實現 MessageListener 接口,容器自動調用 onMessage()
  • 使用 Serializer.ClientReportXML() 將 XML 還原為 ClientReport 對象
  • 演示場景直接打印控制台;生產環境應持久化至數據庫供分析
  • 異常捕獲確保 MDB 不因解析失敗而回滾事務 (除 JMSException)

四、Sun ONE Studio 環境下應用構建與部署

1. 組件創建順序

  1. EJB Module:EJBModule_Xact — 含 XactBean (submitWork/checkWork/getResult)
  2. Web Module:Xact_Module — 右鍵 EJB → New → JSP & Servlet → Web Module
  3. Web Service Module:TransactionService/XactServiceGenServer — 右鍵 Web Module → New → Web Services → Web Module 向導 → 選擇 EJB 方法
  4. Enterprise Application:TransactionServerApp — 添加 EJB Module 與 Web Service Module

2. 關鍵操作提示

  • Web Service 創建會關閉 Tie 上的 Serialize 調用:修改 Tie 代碼需在 Web Service 創建之後進行
  • 右鍵 Application → Deploy 部署至默認服務器
  • 檢查服務器控制台輸出確認部署成功

3. 環境啟動步驟

  1. Windows → Programs → Sun Microsystems → Sun ONE Application Server → Start Application Server
  2. 啟動 IDE,確保運行時服務器實例設置為默認
  3. 掛載文件系統:Metrics/Metrics (Payload 包)、Metrics/TransactionServer (服務端組件)

五、架構圖景回顧

質量報告架構圖

  • Payload 包:客戶端/服務端共享,定義報告模型與序列化邏輯
  • 客戶端 Stub:攜帶報告 (附件)
  • 服務端 Tie:剝離報告 → 入隊
  • MDB:異步消費 → 持久化/分析
  • 無額外網絡跳轉:報告隨業務請求攜帶,零開銷

六、下一步預告

下篇將演示樣品客戶端應用構建、JMS 隊列配置、MDB 部署驗證及端到端運行結果分析。

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