gpt4 book ai didi

java - 当我将无状态 Bean 注入(inject)有状态 Bean 时会发生什么?

转载 作者:行者123 更新时间:2023-12-02 11:16:48 26 4
gpt4 key购买 nike

我正在开发一个大型单体 Java Web 系统,该系统使用 JSF 1.1 和 Seam Framework 构建,在 jBoss 服务器上运行。

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

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

ps:我有很多东西可以用来解决问题,但我需要了解发生了什么。

编辑:问题已解决,我使用 jBoss 5 和 Seam Framework 已有好几年了。我对错误的 jBoss 5 行为感到困惑。在阅读了 Steteless Bean 的定义后,我很好地理解了我的代码的含义:[Java EE 1.4 教程 1

更新到 jBoss 7 后,无状态 bean 池按预期工作,并且系统代码给出了一个错误,因为我的团队的实现很糟糕(无状态 bean 具有如此多的全局变量)。当 jBoss 池开始工作时,这些值开始与其他请求共享。

最佳答案

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

无状态 bean 的成员变量在运行时几乎表现为全局变量。所以 :- 如果您的列表取决于状态,请将其放入有状态 bean 中- 否则保持原样,但具有清除机制- “无状态中有状态”但仅在 Web 服务器中的第三种方法是使用 ThreadLocal 变量

关于java - 当我将无状态 Bean 注入(inject)有状态 Bean 时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50213961/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com