为什么有状态bean不能作为Web服务公开?

时间:2014-06-03 09:21:40

标签: java java-ee ejb

我一直在阅读有状态和无状态会话bean,并且遇到了一句话:

有状态会话bean无法作为网络服务公开

任何人都可以详细说明原因吗?

2 个答案:

答案 0 :(得分:0)

这是因为通常不需要跨Web服务客户端调用维护状态。而且,基于SOAP的Web服务本质上是无状态的。如果需要跨Web服务调用维护状态,可以使用无状态bean来保持状态(尽管这会降低应用程序性能)

答案 1 :(得分:0)

位于EJB容器中的每个有状态bean实例都具有唯一的对象标识。

  

来自规范:3.4.7.1有状态会话豆

     

有状态会话对象具有唯一标识,该标识在创建对象时由容器分配。

为了使用有状态bean,客户端代码需要从EJB容器中获取有状态引用。 必须使用此引用来进行每个将来的请求。 由于引用对象知道与有状态bean关联的标识,因此可以确保参与“对话”的所有请求都将针对同一实例bean进行解析。这意味着客户在实现有状态行为方面发挥着重要作用。

SOAP协议没有提供允许在Web服务客户端中存储此标识的方法,因此,如果客户端不知道哪个有状态实例具有会话状态,则每个请求将由不同的ejb处理(例如无国籍的情况。)