Web服务中每个用户的全局变量

时间:2011-05-04 09:54:29

标签: java web-services spring static global-variables

我有一个无状态的SOAP Web服务(Java,Spring,Tomcat)。

我想在每个会话中保留一些全局变量,以便于访问并避免使用静态变量,因为它们将具有容器范围。

我该怎么做?如果只有这样的方法是使用spring bean范围,那么哪个范围是更好的原型或单例范围,为什么?

感谢

2 个答案:

答案 0 :(得分:3)

可以使用Spring bean范围。

会话范围

示例:

<bean id="customerService" class="com.customer.services.CustomerService" 
     scope="session"/>

答案 1 :(得分:2)

(这不是原始问题的答案,但试图回答评论区域的其他一些问题)

会话bean 可能是无状态有状态。如果它是无状态,它会接受请求,发送响应(可能)并在之后被销毁。 有状态会话存储一些可以重用于其他方法调用的参数( state ) - 就像一个bean,它只是在内部计算它被调用的频率。

同步Web服务可以使用无状态会话bean 实现。它需要一个请求,做一些计算,返回一个响应并完成(bean可以被销毁)。在这种情况下,客户端等待答案,就像调用简单的Java方法一样。

异步Web服务的不同之处:服务收到请求并且

  • 收到回调网址
  • 以会话ID回复

在任何情况下 - 客户端都不会等待响应,而是继续,直到收到响应,因为

  • 服务已将响应发送到客户端回调方法
  • 客户端使用会话ID多次轮询并最终轮询服务响应。

异步服务就像启动一个Java线程:你启动它,继续你的工作,在某些时候你得到结果(或通知,结果已经准备好)

异步服务需要某种持久性存储来存储会话ID或回调URL ,而服务会话处于活动状态。 服务会话是有状态的,服务所需的会话bean 可以是无状态