首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为购物车EJB使用@Stateful和@SessionScoped

为购物车EJB使用@Stateful和@SessionScoped
EN

Stack Overflow用户
提问于 2014-04-01 07:37:53
回答 2查看 2.1K关注 0票数 4

我知道在web应用程序中使用有状态和无状态的EJB有很多争论。

购物车是最常见的用例:Oracle的Java示例在官方文档中也经常使用它。

在这里,在堆栈溢出中,我发现了许多有趣的答案,比如这个The Shopping Cart dilemma in JavaEE,它经常说:

好的..。SFSB擅长于企业、复杂的场景,例如,如果您希望与其他应用程序共享它们,并且不仅将它们提供给JSF/web客户端,

但是..。如果您只是在开发您爷爷的电子商务网站,只需坚持使用HttpSession / SessionScoped cdi管理的bean,并使用SLSB编写您的业务方法,因为它们更有效,等等……

然而,由于我还处在学习和发现阶段,我只想让SFSB自己试一试,尝试构建一个简单的购物车。

我看了一篇有趣的教程,建议在HttpSession中存储一个JNDI检索的@Statty购物车ejb接口实例,这是web客户端第一次需要它,然后在web会话期间像往常一样使用它。在我的JSF表示层中,我想我应该有一个@SessionScoped @命名bean (让我们称它为ShopController),,并在初始化时将有状态ejb的一个实例存储在一个实例变量中。

我想知道是否可以通过使用@SessionScoped注释将@Stateful直接绑定到http会话。

它会像上面所描述的那样起作用吗?CDI会为每个网络会话创建一个SFSB吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-01 10:12:56

@SessionScoped用于@Named bean,@Stateful用于@EJB bean。如果我没有错,您不能用两者来注释一个bean。如果您想使用@Stateful,只需用@EJB@Local注释ShoppingCart bean,然后在ShopController中引用它。就像这样:

代码语言:javascript
复制
@Named
@SessionScoped
public class ShopController {
    ...
    @EJB
    private ShoppingCart cart;
    ...

    // Getters and Setters
}

@Local
@Stateful
public class ShoppingCart {
    ...
}
票数 6
EN

Stack Overflow用户

发布于 2014-04-01 18:33:18

不要浪费时间学习如何在web应用程序中使用SFSB。您很快就会遇到可伸缩性问题。为什么要学习如何制作使用不必要的服务器资源的应用程序?

即使您的托管bean也不应该是SessionScoped。最多只能创建一个非常薄的SessionScoped MB,并使用小用户数据来跟踪它,所有其他的都应该是请求、视图作用域。

对您的问题的回答是肯定的,您可以使用CDI将SessionScoped MB绑定到SFSB。但对于web应用程序来说,这不是一个很好的架构。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22779577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档