我知道有很多关于在 Web 应用程序中使用有状态和无状态 EJB 的争论。
购物车是最常见的用例:Oracle 的 Java EE 示例也在官方文档中大量使用它。
在 stackoverflow 上,我发现了很多有趣的答案,比如JavaEE 中的购物车困境,通常会这样说:
好的... SFSB 适用于企业、复杂的场景,例如,如果您想与其他应用程序共享它们并使它们不仅可用于 JSF/Web 客户端
但是...如果您只是在开发您爷爷的电子商务网站,请坚持使用HttpSession / SessionScoped cdi-managed bean,并在SLSB中编写您的业务方法,因为它们更高效,等等...
但是,因为我还处于学习和发现阶段,所以我只是想尝试一下 SFSB,一个人尝试构建一个简单的购物车。
我看到一个有趣的教程建议在 HttpSession 中存储一个 JNDI 检索到的 @Stateful 购物车 ejb 接口实例,当 Web 客户端第一次需要它时,然后在 Web 会话期间照常使用它。在我的 JSF 表示层中,我想我会有一个 @SessionScoped @Named bean(我们称之为ShopController),并且在它的初始化中,将有状态 ejb 的一个实例存储在一个实例变量中。
我想知道是否可以通过使用@SessionScoped CDI 注释将@Stateful bean 直接绑定到http 会话。
它会像上面描述的那样工作吗?CDI 是否会为每个网络会话创建一个 SFSB?