在请求作用域会话Bean内注入有状态Bean

4
注入状态化EJB Bean到请求作用域会话Bean的区别与注入无状态EJB Bean到请求作用域会话Bean的区别是什么?请求作用域Bean每次被调用时,是否会为状态化Bean创建一个新实例?

我理解你所说的。我更关心如何在使用有状态bean的EJB应用程序中存储会话。您能详细说明吗?如何从JSF托管bean调用有状态会话bean执行业务逻辑? - Prateek Sharma
感谢您的回复。实际上,我可以使用JSF/CDI会话作用域bean存储会话,并针对大多数业务逻辑使用无状态bean,但这让我真正思考有状态bean的用途是什么。我认为,有状态bean用于存储会话,并且它替代了HTTP会话对象。 - Prateek Sharma
我明白了,谢谢你的时间和帮助。 - Prateek Sharma
1个回答

2
在部署有状态会话bean之前,它处于“不存在”状态。成功部署后,EJB容器会对bean进行任何必需的依赖注入,然后它进入“准备就绪”状态。此时,bean已经准备好由客户端应用程序调用其方法。
当有状态会话bean处于准备就绪状态时,EJB容器可能决定将其“钝化”,即将其从主存储器移动到辅助存储器中。这种情况发生时,bean进入“被动”状态。
如果一个有状态会话bean实例在一段时间内没有被访问,EJB容器将把该bean设置为“不存在”状态。
无状态会话bean生命周期仅包含“不存在”和“准备就绪”状态,无状态会话bean永远不会被“钝化”。
RequestScoped Bean的生命周期与HTTP请求-响应的生命周期相同。
因此,位于请求范围支持bean中的无状态bean将在HTTP请求-响应后被销毁,而有状态bean将进入被动状态。

谢谢您的回答。您能详细说明如何通过从JSF管理的bean调用/注入有状态bean来存储会话吗? - Prateek Sharma
我可以将状态存储在JSF会话范围的bean中,并使用无状态的bean处理业务逻辑,但我想尝试使用有状态的bean来存储会话,因为有状态的bean是HTTP会话对象的替代品。 - Prateek Sharma
不用谢,我不确定你想做什么以及为什么在请求范围的后备 bean 中使用有状态 bean,但是你可以使用 FacesContext.getExternalContext().getSession/getSessionMap() 来检索或存储会话对象。祝你好运。 - void

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接