Spring MVC - аннотация @Controller и обработка параллельных запросов - PullRequest
1 голос
/ 10 мая 2010

Я использую части фреймворка Spring MVC; в частности, я использую аннотации @Controller, @RequestMapping и @ResponseBody в сочетании с webstatsHttpMessageConverter, подключенным к бину маршаллера OXM jaxb2. Мои методы контроллера используют аннотации @RequestParam для анализа некоторых параметров GET, запроса сервиса, который использует JPA EntityManager за кулисами, и возвращает объект JAXB, который преобразуется в его представление XML с помощью HttpMessageConverter.

Я сократил этот сценарий до очень простого контрольного примера, чтобы попытаться определить местоположение задержки выполнения, которую я заметил; Пример метода контроллера:

    @RequestMapping("/my_service__method_endpoint")
    @ResponseBody
 public Jaxb2CompiledClass getSomeData(@RequestParam String param1,
                         @RequestParam Date start, @RequestParam Date end) {
            log.debug("Entering getSomeData");
            Thread.sleep(5000);
            log.debug("Finished waiting, leaving getSomeData);

  return new Jaxb2CompiledClass();
 }

Этот сценарий работает нормально и возвращает соответствующие данные в соответствующем формате. Однако во время нагрузочного тестирования этой конфигурации я столкнулся с проблемой - каждый из моих методов контроллера, аннотированных @RequestMapping, не будет работать одновременно; если я создаю несколько HTTP-запросов к конечной точке службы, каждый вызов метода завершается до обработки следующего HTTP-запроса. В моем реальном коде я использую сервисные объекты для извлечения результатов через JPA и преобразования этих результатов в объект соответствующего класса Jaxb2. Насколько я понимаю, этот контроллер должен иметь возможность запускать эти методы одновременно, по одному для каждого HTTP-запроса, вызывающего / my_service__method_endpoint. Есть ли какая-то фундаментальная концепция, которую я здесь упускаю? Вывод журнала из приведенного выше кода показывает, что каждый вызов getSomeData ожидает завершения предыдущего вызова, прежде чем начинать работу. Это очевидно крайне нежелательно в среде с большим объемом.

1 Ответ

3 голосов
/ 10 мая 2010

Ответ Скаффмана верен - все работает одновременно, но из-за того, что мне было лень использовать настоящий инструмент для нагрузочного тестирования, мой браузер ограничивал запросы до их отправки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...