Ho un servizio Web SOAP funzionante implementato con CXF in Java. Quale sarebbe un buon modo per calcolare l'esecuzione del metodo da un lato server?Calcolo dell'ora di richiesta del servizio Web
Quello che ho fatto per ora è che ho usato gli intercettatori. Ho definito public static long start
nel mio InInterceptor (Phase.RECEIVE). E nella mia OutInterceptor (Phase.SEND) a calcolare il tempo di risposta in questo modo:
@Override
public void handleMessage(Message arg0) {
long stop = System.currentTimeMillis();
long executionTime = stop - RequestStartInterceptor.start;
System.out.println("execution time was ~" + executionTime + " ms");
}
Esiste un modo migliore per fare questo? Stavo leggendo sull'esecuzione del metodo tramite proxy, ma non ho idea di come farlo.
aggiornamento Domanda:
Googled un po 'più di una trovare la mia strada arround il secondo modo utilizzando la delega vale a dire:
@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;
}
}
Sulla base di commenti a questa domanda finora, utilizzando intercettori è meglio di usare il proxy. Sto cercando di rallentare il meno possibile il webservice (questo certamente lo rallenterà) e allo stesso tempo ottenere una misurazione precisa delle prestazioni.
Penso che il meccanismo di cui sopra sia buono. –
Consiglierei gli interceptor, anche – mtraut