本篇聚焦服務端基礎設施構建:Web 服務包生成與 Tie 類改造、MDB 接收器實現、Sun ONE Studio 環境下的應用組裝與部署全流程。
<ServiceName>ServantInterface_StubsubmitWork())_send() 前插入 Serializer.attachPendingReportToMessage()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) { /* 統一異常包裝 */ }
}
attachPendingReportToMessage():無待發報告則直接返回;否則將 XML 序列化報告作為文本附件添加至 SOAP MessagesubmitWork/checkWork/getResult) 同樣修改<ServiceName>ServantInterface_Tieinvoke_<MethodName>()private void invoke_SubmitWork(StreamingHandlerState state) throws Exception {
// ... 反序列化請求參數代碼 ...
// 【關鍵插入】剝離第一個附件並入隊處理
Serializer.queueFirstAttachmentText(state.getMessageContext());
// ... 調用 EJB 業務方法、構建響應代碼 ...
}
queueFirstAttachmentText():從 SOAP 消息獲取第一個附件內容 → 調用 Serializer.queueReportXML() 入隊invoke_<X> 方法同樣插入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 對象EJBModule_Xact — 含 XactBean (submitWork/checkWork/getResult)Xact_Module — 右鍵 EJB → New → JSP & Servlet → Web ModuleTransactionService/XactServiceGenServer — 右鍵 Web Module → New → Web Services → Web Module 向導 → 選擇 EJB 方法TransactionServerApp — 添加 EJB Module 與 Web Service ModuleMetrics/Metrics (Payload 包)、Metrics/TransactionServer (服務端組件)
下篇將演示樣品客戶端應用構建、JMS 隊列配置、MDB 部署驗證及端到端運行結果分析。