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 - 如何在ejb中依次运行两个用@Schedule注解的方法

java - 如何处理 JPA 多对一关系?

java - 创建时突出显示 ListView 的第一项

java - 在 JButtons 上绘制焦点

jakarta-ee - 当容器管理的 tx EJB 提交时,如何捕获和包装 JTA 抛出的异常?

java - 使用 JAX-WS 提取整个 SOAP 消息

java - 在规定的时间后使用managedexecutorservice关闭线程

unit-testing - 单元测试 EJB 3.1

java - 如何修复/避免 java.io.IOException : Socket read failed?

java - 如果上游作业停止,如何杀死下游作业?