2011-06-01 111 views
2

我使用java,spring-ws並且有一個web服務。春天或servlet請求範圍問題

每次我運行一個新的請求到我的web服務我希望一切都重置,所有的變量都是新鮮的和空的。所以我在我的web服務的application-context.xml中添加了「範圍=請求」,但我仍然保留了以前請求中保存的變量值(即使不是靜態變量)。

我的web服務(作爲jar文件)被用作另一個主要web項目的插件。我從這個主Web項目的web.xml文件中引用了我的web服務;

<servlet> 
    <servlet-name>mws</servlet-name> 
    <servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
      <param-value>classpath:/resources/webservice/applicationContext-WebService.xml</param-value> 
    </init-param> 
    <load-on-startup>2</load-on-startup> 
</servlet> 
在這個web.xml中,我定義爲主營項目的另一個調度的servlet

而且,是可能的,它創造2個spring容器和他們發生衝突?

這是我在Web服務的appcontext.xml文件定義範圍:

<bean id="infService" class="com.ws.im.InfService" scope="request"> 
    <property name="webServiceConfiguration" ref="wsConfiguration" /> 

    <property name="properties"> 
     <bean class="com.ws.PropertyResource"> 
      <property name="resource" value="/WEB-INF/clientspecific/Inf.properties" /> 
     </bean> 
    </property> 

</bean> 

所以我想每次我跑我的主要web項目在它開始我的web服務的應用程序context.xml文件加載一次並且無論我改變它的範圍它不起作用導致主項目定義範圍?我可以定義上面的servlet的範圍嗎?或者這個想法是完全錯誤的,我在我的web服務配置xml中做錯了什麼?

感謝

+0

能否請你展示,你加入'的applicationContext-WebService.xml''範圍= request'? – artbristol 2011-06-01 12:25:09

+0

我添加了代碼 – Spring 2011-06-01 13:14:39

回答

3

我想你可能出現了問題別的地方,因爲你的配置看起來不錯。

你可以添加一些代碼到的com.ws.im.InfService構造:

java.util.logging.Logger.getAnonymousLogger().info(
    "Instantiated, identity [" + System.identityHashCode(this) +"]"); 

這應該打印不同的標識字符串爲每個請求,如果請求作用域工作正常。

編輯:

需要添加<aop:scoped-proxy/>到bean定義

+1

tnx,我試着說你說什麼,它每次打印相同的字符串,所以範圍不起作用。我能做什麼? – Spring 2011-06-01 14:12:54

+0

對不起,我應該寫'System.identityHashCode(this)'...你能試試嗎? – artbristol 2011-06-01 15:14:10

+0

是的我試過了,範圍不起作用..我注意到我有控制檯中的錯誤「找不到線程綁定的請求」我添加了請求監聽器到我的web.xml但沒有解決問題 – Spring 2011-06-01 15:15:12