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



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

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

我该怎么做呢?如果唯一的方法是使用spring bean作用域,那么原型作用域和单例作用域哪个更好,为什么?

谢谢

Spring bean作用域可用于此。

会话范围

的例子:

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

(这不是对原始问题的回答,而是试图回答来自评论区的一些附加问题)

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

一个同步web服务可以用一个无状态会话bean实现。它接受一个请求,进行一些计算,返回一个响应,然后结束(bean可以被销毁)。在这种情况下,客户端等待答案,就像调用一个简单的Java方法。

这对于异步web服务是不同的:服务接收一个请求,并且

  • 接收回调URL
  • 响应一个会话ID

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

  • 服务已将响应发送给客户端回调方法
  • 客户端使用会话ID轮询了几次,最终轮询了服务响应。

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

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

相关内容

  • 没有找到相关文章

最新更新