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

时间:2010-05-11 14:01:50

标签: web-applications java-ee ejb-3.0 stateful

我从未使用过有状态的EJB。 我知道有状态EJB对java客户端很有用。

但我想知道:在哪种情况下在Web应用程序中使用它们?如何? 我们应该把这些有状态的bean放在Session中吗(因为无状态的http)?

这是一个好习惯吗? (没有过多讨论有状态与无国籍的人)

1 个答案:

答案 0 :(得分:30)

有趣的是,这是当天SFSB和网络应用程序的第二个问题,而这个话题通常不常见。

  

在这种情况下在网络上使用它们   应用

SFSB和Web应用程序的传统示例是购物车。但与此同时,你可以对HttpSession做同样的事情。

理想情况下,如果状态与业务逻辑相关而不是表示逻辑,则它应该进入SFSB。但实际上,人们通常主张反对SFSB(因为它引入了复杂性),除非它们提供了一些你无法用HttpSession轻易做到的东西。大多数情况下,您可以调整设计以将信息存储在HttpSession或数据库中并传递它,而无需使用SFSB。但它最终是一个设计纯度的问题

  

怎么样?我们应该把这些有状态   会话中的bean(因为无状态   HTTP)?

EJB模型是比HttpSession更丰富的模型,因为EJB是事务组件,并且存在用于SFSB的钝化和激活的显式回调。这带来了关于如何正确使用SFSB的增加的复杂性,特别是(1)异常处理和(2)并发性和(2)SFSB的删除和超时。有关详细信息,请参阅我的答案:

如果要使用它们,首先需要查找SFSB以获取对一个新的远程实例的引用。然后,您需要以某种方式存储此引用,以便跨请求重用它。这个某处通常是HttpSession,这意味着即使您使用SFSB,也无法完全摆脱它。

使用EJB2,远程引用(称为句柄)可以序列化,以便以后重用。然后可以存储,例如在数据库中,即使我从未见过它。我不知道EJB3是否还可以。

  

这是一个好习惯吗?

正如我已经说过的那样,人们通常会反对它,除非你确切知道为什么要使用它们而不是HttpSession,并且只有你对EJB模型有良好的掌握。 (例如,如果可以通过Web前端和桌面客户端访问业务服务,则可以证明SFSB是合理的)许多其他框架没有与SFSB类似,人们仍然设法创建伟大的与他们的应用程序。

PS:我在网络应用中使用了SFSB,使用它确实比HttpSession更难处理,但它最终有效。