0

我正在阅读有关 JSF2 和 Managed Beans 的信息。我有一个关于钝化的问题。

我最近询问了@StatefulEJB 的不同用例,@SessionScoped@ManagedBean这里:

sessionscoped 托管 bean 与有状态 ejb

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

它是否正确?对此有一些指导方针吗?

4

1 回答 1

2

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

如果您要使用请求范围的托管 bean,则没有地方存储此存根,并且您将获得每个请求的新实例。这完全超越了首先使用有状态会话 bean 的原因。

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

请注意,所有这些都至少需要对 Java EE 有中等程度的了解。如果您对有状态会话 bean 的钝化不小心(例如,从不调用 @Remove 注释方法),它将逐渐占用您服务器的 HDD 空间。

于 2011-02-13T16:12:10.917 回答