繁体   English   中英

同一无状态会话Bean在同一应用程序中的工作方式不同

[英]Same stateless session bean working different in same application

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

我想知道,除了连接池之外,还有没有其他方法可以使无状态会话bean的状态完全表现出来。

这里重要的一点(如果有些明显)是:不要将状态存储在无状态会话Bean中。 如果要存储会话状态,请使用有状态Bean ,如果要共享状态,请使用单例Bean 您还可以使用实体bean来保持状态。

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

如果您在bean中设置一个成员变量,然后发现(有时)以后的调用会找到设置为您的值的变量,这表明该容器已将相同的bean实例还给您。 这是非确定性的-它取决于服务器负载,池大小和容器的策略。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM