会话范围的Managed Bean钝化

时间:2011-02-12 20:46:09

标签: java-ee jsf-2 ejb managed-bean ejb-passivation

我正在阅读有关JSF2和Managed Beans的内容。我有一个与钝化有关的问题。

我最近在这里要求@Stateful EJB,@SessionScoped@ManagedBean的不同用例:

sessionscoped managed bean vs stateful ejb

现在,有状态EJB有资格进行钝化和激活,这使得它们可以暂时钝化到持久存储以减少空闲时的内存使用,我还没有看到这个功能可供管理员使用。所以它让我想到也许我应该选择@RequestScoped Managed Beans而不是@Stateful EJB用于购物车等。仅使用@Sessionscoped Managed Beans存储最少的用户信息。

这是对的吗?是否有一些指导原则?

1 个答案:

答案 0 :(得分:2)

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

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

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

请注意,所有这些都需要至少对Java EE的中间理解。如果你不小心对有状态会话bean进行钝化(例如从不调用@Remove带注释的方法),它将逐渐吞噬服务器的硬盘空间。