<ServiceName>ServantInterface_Tie — 服務端頂層堆棧Tie 將 SOAP 調用綁定到底層 EJB 組件修改 Tie 類中對應 EJB 業務方法的 invoke_<MethodName>() 方法,植入統計邏輯。
// 原生成代碼片段
private void invoke_SubmitWork(StreamingHandlerState state) throws Exception {
// ... 反序列化請求參數 ...
java.lang.String result = ((XactServiceServantInterface) getTarget())
.SubmitWork(requestStruct.getString_1());
// ... 序列化響應 ...
}
// 在方法開頭添加
import com.example.monitoring.PayloadSerializer; // 自定義統計工具
// 在業務調用前插入
PayloadSerializer.queueFirstAttachmentText(state.getMessageContext());
// 或更通用:
MonitoringService.incrementCounter("SubmitWork");
MonitoringService.recordRequestSize(state.getMessageContext());
private void invoke_SubmitWork(StreamingHandlerState state) throws Exception {
// 【統計植入點 1】請求接收
MonitoringService.onRequestReceived("SubmitWork", state.getMessageContext());
TransactionService.XactServiceGenServer.XactServiceServantInterface_SubmitWork_RequestStruct req = null;
Object reqObj = state.getRequest().getBody().getValue();
if (reqObj instanceof SOAPDeserializationState) {
req = (RequestStruct) ((SOAPDeserializationState) reqObj).getInstance();
} else {
req = (RequestStruct) reqObj;
}
// 【統計植入點 2】業務調用前
long startNs = System.nanoTime();
try {
String result = ((XactServiceServantInterface) getTarget()).SubmitWork(req.getString_1());
// 【統計植入點 3】成功
MonitoringService.onSuccess("SubmitWork", System.nanoTime() - startNs);
// 構建響應...
} catch (Exception e) {
// 【統計植入點 4】失敗
MonitoringService.onError("SubmitWork", e, System.nanoTime() - startNs);
throw e;
}
}
invoke_* 方法,不動生成框架代碼MonitoringService,Tie 僅委派SOAPHandler、CXF Interceptor、Axis2 Module — 無需修改生成代碼在生成代碼中植入統計是「不得已而為之」的戰術手段。戰略上,應遷移至標準攔截器鏈或 APM 基礎設施,實現業務與觀測徹底解耦。