我一直在阅读有状态和无状态会话bean,并且遇到了一句话:
有状态会话bean无法作为网络服务公开 。
任何人都可以详细说明原因吗?
答案 0 :(得分:0)
这是因为通常不需要跨Web服务客户端调用维护状态。而且,基于SOAP的Web服务本质上是无状态的。如果需要跨Web服务调用维护状态,可以使用无状态bean来保持状态(尽管这会降低应用程序性能)
答案 1 :(得分:0)
位于EJB容器中的每个有状态bean实例都具有唯一的对象标识。
来自规范:3.4.7.1有状态会话豆
有状态会话对象具有唯一标识,该标识在创建对象时由容器分配。
为了使用有状态bean,客户端代码需要从EJB容器中获取有状态引用。 必须使用此引用来进行每个将来的请求。 由于引用对象知道与有状态bean关联的标识,因此可以确保参与“对话”的所有请求都将针对同一实例bean进行解析。这意味着客户在实现有状态行为方面发挥着重要作用。
SOAP协议没有提供允许在Web服务客户端中存储此标识的方法,因此,如果客户端不知道哪个有状态实例具有会话状态,则每个请求将由不同的ejb处理(例如无国籍的情况。)