恢复会话EJB

时间:2017-06-20 22:30:01

标签: ejb-3.0 java-ee-7 stateful-session-bean

我正在检查EJB有状态bean,使用这个bean的典型示例是在购物车中。

因此,在示例中,如果EJB存在,则检查HttpSession,如果不存在,则调用一个EJB实例,然后使用HttpSessionId作为标识符上载到会话。

那么,当我可以使用简单的POJO做同样的事情时,使用有状态EJB有什么好处呢?

我想典型的答案是,即使HttpSession发生故障,EJB仍然存在于服务器容器中。如果是这样,我如何从EJB池中恢复该EJB?鉴于我不再拥有HttpSessionID。

是否有另一种方法可以恢复生活在容器中的EJB?

1 个答案:

答案 0 :(得分:1)

在http会话中托管的有状态EJB的购物车在我看来是一个不应该做的事情的典型例子,原因很简单:网上商店的目的是增加流量和(付费)用户数量。这种网站不推荐使用相反的有状态bean,它不会扩展。

Stateful Bean应该属于桌面应用程序领域,例如Swing,JavaFX等......它与网上的www商店没什么关系。

当然,在会话中保留内容比使用有状态bean保存数据要轻得多。

一旦你放弃了引用,我无法想到恢复有状态EJB的任何技巧。

另外,你的意思是"如果会话失败" ?如果您的意思是因为服务器崩溃,请记住,如果EJB驻留在同一服务器中,那么EJB(无状态,有状态,单例等)无法在服务器崩溃后继续存在。