Tengo un servicio web SOAP activo implementado con CXF en Java. ¿Cuál sería una buena forma de calcular la ejecución del método en el lado del servidor?Cálculo de tiempo de ejecución de solicitud de servicio web
Lo que he hecho por ahora es utilizar interceptores. Definí public static long start
en mi InInterceptor (Phase.RECEIVE). Y en mi OutInterceptor (Phase.SEND) calculo el tiempo de respuesta como esta:
@Override
public void handleMessage(Message arg0) {
long stop = System.currentTimeMillis();
long executionTime = stop - RequestStartInterceptor.start;
System.out.println("execution time was ~" + executionTime + " ms");
}
¿Hay una mejor manera de hacer esto? Estaba leyendo acerca de la ejecución del método a través del proxy, pero no tengo ni idea de cómo hacerlo.
actualización Pregunta:
Googled un poco más de un encontrar mi camino cerca de la segunda manera es decir, utilizando el Proxy:
@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;
}
}
Basándose en los comentarios a esta pregunta hasta el momento, el uso de interceptores es mejor que usar proxy. Estoy buscando reducir la velocidad del servicio web lo menos posible (esto ciertamente lo ralentizará) y al mismo tiempo obtener una medición precisa del rendimiento.
Creo que el mecanismo anterior es bueno. –
Yo recomendaría los interceptores, también – mtraut