Java で CXF を使用して実装された動作中の 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");
}
これを行うより良い方法はありますか?メソッドを介したプロキシの実行について読んでいましたが、その方法がわかりません。
質問の更新:
プロキシを使用して2番目の方法で自分の道を見つけるために、もう少しグーグルで検索しました:
@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 サービスの速度を可能な限り低下させ (これにより確実に速度が低下します)、同時に正確なパフォーマンス測定値を取得することを検討しています。