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