Apache Axis2 и Spring Thread

#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-запрос.