我在 ejb 容器中有一个无状态会话 bean。如果我从 jsf2 表单调用它,它可以正常工作,但如果我再次调用该表单,它会显示我之前插入的相同数据。即使我关闭并重新打开浏览器,它也会发生。我必须等待几分钟,直到表单显示空白字段。不会为每个请求重新创建无状态会话 bean。它的行为就像一个有状态的。怎么了?
应用服务器:Glassfish 3.0.1
我在 ejb 容器中有一个无状态会话 bean。如果我从 jsf2 表单调用它,它可以正常工作,但如果我再次调用该表单,它会显示我之前插入的相同数据。即使我关闭并重新打开浏览器,它也会发生。我必须等待几分钟,直到表单显示空白字段。不会为每个请求重新创建无状态会话 bean。它的行为就像一个有状态的。怎么了?
应用服务器:Glassfish 3.0.1
我原来的问题是:EJB3 + Struts2。Struts 为每个请求创建新的会话 bean,即使它是有状态的。
Struts 自己不做任何事情,它只做你告诉他做的事情。我怀疑你只是在滥用东西。显示一些代码来说明问题可能会有所帮助。
现在我发现 JSF2 为每个请求重用相同的会话 bean,即使它是无状态的。
这通常不是真的,您可以获得无状态会话 bean (SLSB) 的任何实例。即使由于某些原因您在特定情况下获得了相同的实例(可能是因为 bean 池配置),在使用 SLSB 时这根本不应该是一个问题,您不应该关心您得到什么实例,当然不会依赖于实例的状态(因为它们是无状态的)。
回到您的问题,我怀疑您在滥用 SLSB 并期待不正确的事情:
不会为每个请求重新创建无状态会话 bean。
这不是一个正确的术语。无法保证为每个请求创建新的无状态 bean 实例。
出于性能原因,容器将汇集一些无状态 bean 的实例。
池化实例的数量取决于容器配置。