Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将无状态Bean注入有状态Bean时会发生什么?_Java_Jsf_Javabeans_Seam - Fatal编程技术网

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

Java 将无状态Bean注入有状态Bean时会发生什么?,java,jsf,javabeans,seam,Java,Jsf,Javabeans,Seam,我在一个大型单片Java web系统上工作,该系统使用JSF 1.1和Seam框架构建,运行在jBoss服务器上 我有一个JSF支持Bean(在JSF中默认是有状态的),它注入一个用作服务的无状态Bean(并用@Stateless注释)。无状态服务有一个实例成员变量声明为列表,并通过方法增加 问题: 将jBoss版本从5.1 EAP更新到7.0后,提到的变量(列表)从其他请求中获取值。这会在系统中产生一个bug。但是,该变量位于无状态服务中。为什么会这样?在这种情况下应该发生什么 ps:我有很多

我在一个大型单片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教程


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

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

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

我不太理解你的问题。我猜
@无状态
应该是每个用户会话的实例?你说的“其他请求”是什么意思?这些值可以从其他请求中访问。我切换一个断点来查看列表值,她拥有的值是p记住:stateles服务bean是seam2.2在一个JSF有状态支持bean中注入的。这个JSF支持bean调用@stateles服务中的一个方法,该方法将值放入一个全局列表中。在第二瞬间,用户尝试执行相同的操作。有状态类调用一个方法(在无状态服务中)再一次,但是全局列表中已经充满了以前操作的注册表。我想这是无状态的假定行为。与其在标题中添加已解决的问题,不如接受帮助您解决问题的答案,或者创建您自己的答案并接受。我个人认为请求@JulienAubin在其answ中添加注释呃(这样改进)是一个@Stateless类中的实例变量列表,注入到有状态类中。在jboss迁移之前,无状态bean是正常的。在jboss从5.xx迁移到7.xx之后,无状态bean从其他操作中获取值,就好像服务器与有状态bea的所有请求共享一个Stateles实例一样n、 实际上,您依赖于JBoss 5.x的一个bug。无状态实例是共享的,因为它们的方法不应该对实例本身产生副作用。您是说无状态Bean将与注入它的所有其他类共享其实例变量的值吗?而这并不是因为JBoss 5 pro而更早发生的问题?如果这是真的,那么这个非常大的应用程序的很多代码都是基于这个错误编写的,需要进行重构。我试图找到这个jBoss 5.xx错误的文档,但是我什么也没有找到。你知道我在哪里找到了关于这个错误的任何信息吗?如果它不是一个错误,它是一个糟糕的实现细节。现在看来@SessionScoped可能是你的f朋友,但是在无状态bean中保持对话状态是一种气味。