Как рассчитать время обработки запроса в JAX-WS? - PullRequest
1 голос
/ 13 ноября 2010

Я занимаюсь разработкой веб-службы RESTful и хочу поместить обработку времени запроса в xml-ответ на все запросы.

Я использую Netbeans 6.9.1 и GlassFish версии 3.

Как я могу измерить?

Спасибо.

1 Ответ

1 голос
/ 13 ноября 2010

Это плохая идея по двум причинам:

  1. Эта временная информация является избыточной. Ничто не мешает потребителю самому запускать таймер до вызова вашего веб-сервиса, а затем останавливать таймер, когда он получает ответ.
  2. Если вы попытаетесь автоматизировать тестирование, вам придется игнорировать эту информацию о времени, поскольку вы не можете предсказать это значение. Это затрудняет тестирование вашего веб-сервиса, так как ответ не является детерминированным.

Теперь хорошо, что вы заботитесь о производительности, но вместо того, чтобы возвращать эти метрики пользователю, я бы записал эти закулисные записи в системные журналы, которые вы можете просмотреть в любое время. Есть много способов сделать это, но вот 2 общих шаблона.

  1. Используйте регистратор Apache Commons, а затем выполните long start = System.currentTimeMillis() в точке входа вашего кода, еще раз позвоните System.currentTimeMillis() в точке выхода вашего кода, вычислите разницу и просто log.info() выведите ее.
  2. Более понятный, но сложный в настройке вариант - использовать Aspect, такой как Spring Framework PerformanceMonitorInterceptor .

Вот рабочий пример, который я скопировал из файла контекста приложения Spring.

<bean id="springPerformanceMonitorAspectInterceptor" class="org.springframework.aop.interceptor.PerformanceMonitorInterceptor">
   <property name="loggerName" value="com.myProject.performanceMonitor" />
</bean>
<aop:config>
   <aop:pointcut id="springMonitoringPointcut" expression="execution(* com.myProject..*(..))" />
   <aop:advisor pointcut-ref="springMonitoringPointcut" advice-ref="springPerformanceMonitorAspectInterceptor" />
</aop:config>
...