У меня есть рабочий веб-сервис SOAP, реализованный с CXF в Java. Что было бы хорошим способом вычислить выполнение метода на стороне сервера?
То, что я сделал сейчас, я использовал перехватчики. Я определил 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");
}
Есть ли лучший способ сделать это? Я читал о выполнении метода прокси-сервера, но я не знаю, как это сделать.
Обновление вопроса:
Я немного искал поисковую систему, используя второй прокси-сервер i.e:
@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;
}
}
На основе комментариев к этому вопросу до сих пор использование перехватчиков лучше, чем использование прокси. Я хочу как можно меньше замедлить веб-сервис (это, безусловно, замедлит его), и в то же время получить точное измерение производительности.