2011-10-13 79 views
0

好的我正在使用Apache Axis2和Spring Framework。基本上WebServiceHandler類是暴露所有Web服務操作的類。所以當請求進入時,這是被調用的類。 我的理解是,對於每個請求,Tomcat或Axis2都應該創建一個新的線程。但是做一個「Thread.currentThread()。getId()」和「Thread.currentThread()。getName()」總是有相同的id和名字。Apache Axis2和Spring線程

這我相信會導致我的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> 

回答

0

這是通過Tomcat的(或任何Web容器)處理。它不會爲每個請求產生一個新的線程 - 而是使用一個線程池來執行傳入的請求。在你的情況下,因爲你一次只執行一個請求 - 同一個線程正被用來執行後續請求。如果您嘗試並行執行多個請求 - 那麼您會注意到線程ID /名稱將會不同。

+0

是的,謝謝,我想到了。我的問題是我在一個數據庫表中有近200萬行。我不知道是什麼導致了緩慢的反應,所以調試我認爲這是Tomcat處理傳入HTTP請求的方式。 – Marquinio