我有一个使用 CXF 在 Java 中实现的工作 SOAP Web 服务。在服务器端计算方法执行的好方法是什么?
我现在所做的是使用拦截器。我已经public static long start
在我的 InInterceptor(Phase.RECEIVE) 中定义了。在我的 OutInterceptor(Phase.SEND) 我计算响应时间是这样的:
@Override
public void handleMessage(Message arg0) {
long stop = System.currentTimeMillis();
long executionTime = stop - RequestStartInterceptor.start;
System.out.println("execution time was ~" + executionTime + " ms");
}
有一个更好的方法吗?我正在阅读有关通过代理执行方法的信息,但我不知道该怎么做。
问题更新:
我用谷歌搜索了更多使用代理的第二种方式,即:
@Aspect
public class MyServiceProfiler {
@Pointcut("execution(* gov.noaa.nhc.*.*(..))")
public void myServiceMethods() { }
@Around("myServiceMethods()")
public Object profile(ProceedingJoinPoint pjp) throws Throwable {
long start = System.currentTimeMillis();
System.out.println("Going to call the method.");
Object output = pjp.proceed();
System.out.println("Method execution completed.");
long elapsedTime = System.currentTimeMillis() - start;
System.out.println("Method execution time: " + elapsedTime + " milliseconds.");
return output;
}
}
根据到目前为止对这个问题的评论,使用拦截器比使用代理更好。我希望尽可能减慢 Web 服务的速度(这肯定会减慢速度),同时获得精确的性能测量。