2011-06-01 122 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