有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我在一个大型单片Java web系统上工作,该系统使用JSF 1.1和Seam框架构建,运行在jBoss服务器上

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

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

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

编辑:问题解决了,几年前我一直在使用JBoss5和Seam框架。我被一个错误的JBoss5组件弄糊涂了。在阅读了无柄豆子的定义后,我非常了解何为和平与我的代码: [JavaEE1.4教程1

在更新到JBoss7之后,无状态bean池按预期工作,系统代码给出了一个bug,因为我的团队的一个糟糕的实现(有这么多全局变量的无状态bean)。当jBoss池开始工作时,值开始与其他请求共享


共 (1) 个答案

  1. # 1 楼答案

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

    无状态bean的成员变量在运行时几乎表现为全局变量。因此: -如果列表依赖于一个状态,则将其放入一个有状态bean中 -否则,保持原样,但使用净化机制 -第三种方法是“无状态下有状态”,但仅在web服务器中使用ThreadLocal变量