Jakarta ee 会话范围的托管Bean钝化

Jakarta ee 会话范围的托管Bean钝化,jakarta-ee,jsf-2,ejb,managed-bean,ejb-passivation,Jakarta Ee,Jsf 2,Ejb,Managed Bean,Ejb Passivation,我正在阅读关于JSF2和托管bean的文章。我有一个关于钝化的问题 我最近在这里询问了@StatefulEJB、@SessionScoped和@ManagedBean的不同用例: 现在,有状态EJB有资格进行钝化和激活,这允许它们临时钝化为持久存储,以减少空闲时的内存使用,我还没有看到managedbeans可以使用此功能。因此,它让我想到,也许我应该选择@RequestScoped托管bean,而选择@StatefulEJB作为购物车等。仅使用@Sessionscoped托管bean来存储最

我正在阅读关于JSF2和托管bean的文章。我有一个关于钝化的问题

我最近在这里询问了
@Stateful
EJB、
@SessionScoped
@ManagedBean
的不同用例:

现在,有状态EJB有资格进行钝化和激活,这允许它们临时钝化为持久存储,以减少空闲时的内存使用,我还没有看到managedbeans可以使用此功能。因此,它让我想到,也许我应该选择
@RequestScoped
托管bean,而选择
@Stateful
EJB作为购物车等。仅使用
@Sessionscoped
托管bean来存储最少的用户信息


这是正确的吗?有一些指导原则吗?

请求范围的托管bean在这里不起作用。要访问特定的有状态会话bean实例,需要它的存根

如果您要使用请求范围的托管bean,那么就没有地方存储此存根,并且每个请求都会得到一个新实例。这完全超出了首先使用有状态会话bean的理由

但是,您可以使用视图范围的JSF托管bean(如果操作发生在单个页面上)或会话范围的CDIBean(如果操作发生在多个页面上)。特别是使用后者,您可以将会话的范围与有状态会话bean的生命周期联系起来


请注意,所有这些都至少需要对JavaEE有一个中级理解。如果您不小心钝化有状态会话bean(例如,从不调用@Remove注释的方法),它将逐渐消耗服务器的硬盘空间。

所以您建议我使用会话范围的bean,而不是会话bean,对吗?。我想到了。但是,即使现在我对有状态EJB有了更好的理解,它们似乎每次都越来越无用。除了扩展持久性上下文之外,我想不出它们在web应用程序中的用途。当您需要在实体上维护(乐观的)JPA锁时,扩展持久性上下文是关键,例如,当一个项目被放置在购物车中时,最后一个不是同时卖给另一个客户的。顺便说一句,我不建议使用会话范围的bean而不是有状态会话bean,而是将它们结合起来。