Jakarta ee 会话范围的托管Bean钝化
我正在阅读关于JSF2和托管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来存储最
@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,而是将它们结合起来。