#web-services #hibernate #spring #axis2 #axis
#веб-сервисы #спящий режим #spring #axis2 #ось
Вопрос:
Хорошо, я использую Apache Axis2 и Spring Framework. По сути, класс WebServiceHandler — это тот, который предоставляет доступ ко всем операциям веб-службы. Поэтому, когда поступает запрос, вызывается этот класс. Я понимаю, что для каждого запроса Tomcat или Axis2 должны создавать новый поток. Но выполнение «Thread.currentThread().getId()» и «Thread.currentThread ().getName ()» всегда имеют одинаковый идентификатор и имя.
Я считаю, что это вызывает проблемы в моем DAO, поскольку я использую Hibernate для создания 3 SessionFactories и использую текущую модель потоков для выполнения запросов, что делает всю систему очень медленной.
Я мог бы создавать новый поток для каждой операции перед вызовом моего класса DAO, но еще не пробовал этого. Есть ли способ решить эту проблему с помощью конфигурации в Axis2 или Spring? Спасибо.
Часть моего applicationContext.xml ниже:
<!-- Axis2 Web Service, but to Spring, its just another bean that has dependencies -->
<bean id="springContext" class="com.ws.beans.spring.SpringContext"/>
<bean id="springAwareService" class="com.ws.beans.WebServiceHandler" >
<constructor-arg ref="springContext" />
</bean>
Ответ №1:
Это обрабатывается tomcat (или любым веб-контейнером). Он не создает новый поток для каждого запроса, а вместо этого использует пул потоков для выполнения входящего запроса. В вашем случае, поскольку вы выполняете только один запрос за раз, один и тот же поток используется для выполнения последующих запросов. Если вы попытаетесь выполнить много запросов параллельно, вы заметите, что идентификаторы / имена потоков будут разными.
Комментарии:
1. Да, спасибо, я понял это. Моя проблема заключалась в том, что в одной таблице базы данных у меня было почти 2 миллиона строк. Я понятия не имел, что вызывает медленный ответ, поэтому при отладке я подумал, что так Tomcat обрабатывает входящий HTTP-запрос.