会话范围的托管 Bean 钝化

发布于 2024-10-17 01:39:43 字数 564 浏览 3 评论 0原文

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

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

sessionscoped 托管 bean 与有状态 ejb

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

这是正确的吗?有这方面的一些指导方针吗?

I'm reading about JSF2 and Managed Beans. I've got a question related to passivation.

I've recently asked for different use cases of @Stateful EJB's, @SessionScoped and @ManagedBean here:

sessionscoped managed bean vs stateful ejb.

Now, stateful EJB's are eligible for passivation and activation which allow them to be temporarily passivated to persistent storage to decrease memory use when they are idle, I haven't seen this feature available to managedbeans. So it got me thinking that maybe I should go for @RequestScoped Managed Beans and prefer @Stateful EJB's for shopping carts etc instead. Using @Sessionscoped Managed Beans only to store minimal user information.

Is this correct? Are there some guidelines for this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

骑趴 2024-10-24 01:39:43

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

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

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

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

A request scoped managed bean wouldn't work here. To access a particular stateful session bean instance, you need its stub.

If you were to use request scoped managed beans, there would be no place to store this stub and you would get a new instance with every request. This completely beats the reason for using stateful session beans in the first place.

You could however use a view scoped JSF managed bean (if the action takes place on a single page) or a conversation scoped CDI bean (if the action takes place on multiple pages). Especially with the latter you can tie the scope of your conversation to the life-time of the stateful session bean.

Do note that all of this requires at least an intermediate understanding of Java EE. If you're not careful with passivation of stateful session beans (e.g. never call an @Remove annotated method) it will gradually eat away the HDD space of your server.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文