繁体   English   中英

当我将无状态Bean注入有状态Bean时会发生什么?

[英]What happens when I inject a Stateless Bean into a Stateful Bean?

我在一个大型的整体Java Web系统上工作,该系统由jSF 1.1和Seam Framework构建,并在jBoss服务器上运行。

我有一个JSF Backing Bean(在JSF中默认为有状态),它注入用作服务的无状态Bean(并带有@Stateless注释)。 无状态服务具有一个实例成员变量,该成员变量声明为List并通过方法增加。

问题:将jBoss版本从5.1 EAP更新到7.0后,上述变量(列表)正在从其他请求中获取值。 这会在系统中创建错误。 但是,该变量位于无状态服务内部。 为什么会这样呢? 在这种情况下应该发生什么?

ps:我有很多东西可以用来解决问题,但是我需要了解正在发生的事情。

编辑:Pproblem解决了,我使用jBoss 5和Seam Framework已有几年了。 一个错误的jBoss 5组合使我感到困惑。 在阅读了Steteless Bean的定义之后,我非常了解我的代码在处理什么:[Java EE 1.4教程1

更新到jBoss 7之后,无状态Bean的池将按预期工作,并且系统代码会出现错误,因为我的团队执行不正确(具有很多全局变量的无状态Bean)。 当jBoss池开始工作时,这些值开始与其他请求共享。

这是因为您的无状态实例在多个有状态实例之间共享。

无状态Bean的成员变量在运行时几乎充当全局变量。 因此:-如果您的列表依赖于状态,则将其放入有状态的Bean-否则将其保留,但要使用清除机制-第三种在“无状态”中“有状态”的方式(仅在Web服务器中)是使用ThreadLocal变量

暂无
暂无

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

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