java - 相同的无状态 session bean 在同一应用程序中工作不同

标签 java ejb ejb-3.1

我创建了一个无状态 session bean(SLSB) 并从同一个 JVM 进行本地调用。我在 SLSB 中有一个 BO 局部变量,初始化时我设置了这个值,在下一次调用中我正在执行一些业务功能,但在下一次调用中我无法获取我在上一个调用中设置的值。称呼。 这似乎是根据 SLSB 功能,但我们应用程序的另一部分也有类似的功能。我已经确认两者都是 SLSB,并且 ejb-jar.xml 和 weblogic-ejb-jar.xml 中没有完成连接池(两者也相同),我也调试了这两个类,但不知道它在另一个类中如何工作类。

我想知道除了连接池之外,是否还有其他方法可以实现无状态 session bean 的状态完整行为。

最佳答案

这里重要的(如果稍微明显的)教训是:不要将状态存储在无状态 session bean 中。如果您想存储对话状态,请使用 stateful bean ,如果您想要共享状态,请使用 singleton bean 。您还可以使用 entity bean保持状态。

这在其他地方起作用的原因很可能与 bean 池有关。 EJB 容器主要使用 Bean 池来存储其无状态 Bean,因为这提供了最佳的性能和可伸缩性。当请求到来时,容器从池中选择一个 bean 来为其提供服务,将其从池中取出,该 bean 处理请求,然后放回池中。选择哪个 bean 取决于容器,因为理论上它们都是可以互换的。

如果您在 bean 中设置成员变量,然后(有时)稍后调用会查找设置为您的值的变量,这表明容器已返回相同的 bean 实例。这是非确定性的 - 它取决于服务器负载、池大小和容器的策略。

关于java - 相同的无状态 session bean 在同一应用程序中工作不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32493765/

相关文章:

java - session bean 返回错误值

security - @RunAs 和角色传播

java-ee-6 - 在无状态 ejb 中使用静态方法有意义吗?

java - Open MQ 异常现象 : unexpectedly messages start to get stuck in the JMS Queue for a while before delivering them to the MDB

java - 从 Android 中的时间戳获取日期名称

java - 检测类类型并重定向到正确的方法

java - Future<V> 和异常

java - 如何创建一个随机的 16 位数字,具有特定的第一位数字?

java - 项目部署正确,但服务器返回404未找到

java - 第二次从不同应用程序中的 jsf 调用远程 EJB3 bean - 未设置委托(delegate)