代码之家  ›  专栏  ›  技术社区  ›  Sebastien Lorber

Web应用程序中的有状态EJB?

  •  15
  • Sebastien Lorber  · 技术社区  · 16 年前

    我从未使用有状态的EJB。 我明白一个有状态的EJB对于Java客户端是有用的。

    但我想知道:在哪种情况下在Web应用程序上使用它们?如何? 我们应该将这些有状态bean放入会话中吗(因为没有状态的HTTP)?

    这是一种好的做法吗? (没有太多关于有状态与无状态的争论)

    1 回复  |  直到 16 年前
        1
  •  30
  •   Community Mohan Dere    9 年前

    有趣的是,这是今天在sfsb和web应用程序上的第二个问题,而这个主题通常并不常见。

    在这种情况下,在网络上使用它们 应用程序?

    SFSB和Web应用程序的传统示例是购物车。但同时,你也可以用 HttpSession .

    理想的, 如果状态与业务逻辑相关 而不是表示逻辑,它应该放在sfsb中。但在实践中,人们通常反对SFSB(因为它引入了复杂性),除非他们提供了一些您不容易使用的东西 会话 . 大多数情况下,您可以调整设计以将信息存储在 会话 或者数据库并传递它,而不需要有sfsb。但它最终是 设计纯度问题 .

    如何?我们应该把这些放在庄严的地方吗 会话中的bean(由于无状态 HTTP)?

    EJB模型比 会话 ,因为EJB是事务性组件,并且有针对SFSB的钝化和激活的显式回调。这个有一个 复杂性增加 关于如何正确使用sfsb,特别是(1)异常处理和(2)并发性,以及(2)sfsb的删除和超时。有关详细信息,请参阅此处的答案:

    如果要使用它们,则需要首先查找sfsb以获取对一个新远程实例的引用。然后您需要将这个引用存储在某个地方,以便在请求之间重用它。这个 在某处 通常是 会话 也就是说,即使使用sfsb,也不能完全摆脱它。

    对于EJB2,远程引用——称为 手柄 --无法序列化以便稍后重用。然后可以将if存储在数据库中,即使我从未见过。我不知道EJB3是否还能实现。

    这是一种好的做法吗?

    正如我已经说过的, 人们通常反对它 除非你知道你为什么要用它们而不是 会话 只有当您对EJB模型有很好的掌握时。(例如,如果可以通过Web前端和桌面客户机访问业务服务,则SFSB是合理的)许多其他框架 不要 有类似于sfsb的东西,人们仍然设法用它们创建伟大的应用程序。

    PS:我在一个web应用程序中使用了sfsb,它确实比 会话 但最终还是成功了。