我从未使用过有状态的 EJB。
我知道有状态的 EJB 对 java 客户端很有用。
但我想知道:在哪种情况下在 Web 应用程序上使用它们?如何?
我们是否应该将这些有状态的 bean 放在 Session 中(因为无状态的 http)?
这是一个好习惯吗?
(无需过多讨论有状态与无状态)
最佳答案
有趣的是,这是当天关于 SFSB 和网络应用程序的第二个问题,而这个话题通常并不常见。
in which case to use them on a web application?
SFSB 和 Web 应用程序的传统示例是购物车。但同时,您可以对
HttpSession
执行相同操作。 .理想情况下,如果状态与业务逻辑有关而不是表示逻辑,它应该放在 SFSB 中。但在实践中,人们通常反对 SFSB(因为它引入了复杂性),除非他们提供了您无法通过
HttpSession
轻松完成的功能。 .大多数时候,您可以调整设计以将信息存储在 HttpSession
中。或数据库并传递它,而无需 SFSB。但它最终是 设计纯度问题 .And how? Should we put these stateful beans in Session (because of stateless http)?
EJB 模型比
HttpSession
更丰富。 ,因为 EJB 是事务性组件,对于 SFSB 的钝化和激活有显式回调。这带有 增加复杂性关于如何正确使用 SFSB,特别是(1)异常处理和(2)并发和(2)SFSB 的删除和超时。有关更多详细信息,请参阅我的答案:如果您想使用它们,您首先需要查找 SFSB 以获取对一个新远程实例的引用。然后,您需要将此引用存储在某处,以便跨请求重用它。这通常是
HttpSession
,这意味着即使使用 SFSB,也无法完全摆脱它。使用 EJB2,远程引用(称为句柄)可以被序列化以供以后重用。然后可以将 if 存储在数据库中,即使我从未见过。我不知道 EJB3 是否仍然可行。
Is it a good practice?
正如我已经说过的,人们通常反对它除非您确切知道为什么要使用它们而不是
HttpSession
并且仅当您对 EJB 模型有很好的掌握时。 (例如,如果可以通过 Web 前端和桌面客户端访问业务服务,SFSB 可能是合理的)许多其他框架没有类似于 SFSB 的东西,人们仍然设法使用它们创建出色的应用程序。PS:我在一个网络应用程序中使用过 SFSB,它确实比
HttpSession
更难使用。 ,但它最终奏效了。
关于web-applications - Web 应用程序中的有状态 EJB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2811312/