繁体   English   中英

sessionscoped托管bean与有状态ejb

[英]sessionscoped managed bean vs stateful ejb

如果我的@ManagedBean@SessionScoped ,为什么我会使用@Stateful EJB? 我之前用过购物车并保持会话状态,但由于托管bean将在用户会话期间保存,我可以在那里存储状态,然后调用SLSB以获取业务逻辑。 那是对的吗? 如果是,那么有状态的ejbs将留给更具体的应用程序,例如何时需要交易等?

通常,无状态会话bean可用于许多业务问题。

有状态并不一定意味着只有远程服务器保持状态,尽管这肯定是其中一个选项。 远程Swing客户端可以首先将一堆数据发送到有状态会话bean,保留存根,然后发送一些操作此数据的命令。 这使客户端不必每次都发送相同(大量)的数据。

在远程用例中,当使用Web客户端(浏览器)时,它确实在某种程度上反映了HTTP会话的使用。 主要区别在于会话是每个bean,而在HTTP会话中,会话是许多bean共享的范围。 由于HTTP会话基于cookie,并且cookie对于整个浏览器的域是全局的,因此HTTP会话不能直接支持来自同一客户端的多个会话(例如,每个选项卡或每个窗口)。 这对于有状态会话bean来说是微不足道的。

然而...

与远程EJB通信的远程Swing客户端并不常见。

在您在问题中描述的上下文中,您通常会使用本地EJB,并且您将在HTTP会话中存储大多数状态(小心共享!)以及这些日期在视图范围或会话范围中。

那么,最后,何时在这种情况下使用有状态会话bean?

一个重要的用例是JPAextended persistence context 通常使用事务范围的实体管理器,当实体跨越EJB方法调用的事务边界时,它将被分离。 如果您希望(乐观地)在用户交互之间锁定实体,这是不可取的。 你将失去锁定。

使用扩展的持久性上下文,当您从调用有状态会话bean返回时,实体保持连接并且锁有效。 这对预览功能非常有用,以确保在预览后没有其他人对实体进行任何更改。 或者对于购物车而言,您确实要确保该物品在购物车中不能出售给其他任何人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM