为什么要使用有状态会话bean?

时间:2009-11-06 10:35:41

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

我正在学习EJB3,我很好奇什么时候使用SFSB很方便?当SFSB很容易解决一些复杂的问题时,我找不到任何好的例子。

实际上我看到SLSB可以用作网络服务,这很方便。但我不知道何时使用SFSB。我只看到它的问题,因为我们应该学习一些关于它的东西,我们应该编写一个由注释组成的代码,然后完全使用,我们应该使用烦人的查找...而且我们没有得到任何好的回报。

例如,我们不能使用SLSB中的SFSB,因为有状态对象只能用于有状态上下文。我们不能在servlet中使用DI,而是应该使用JNDI查找手动创建SFSB实例,然后将其放入HttpSession对象中。它不能是网络服务。

我在SFSB中看到的唯一好处是交易管理。但我认为,当我们真的需要一个交易并且我们不需要DB时,这种情况很少见。我可以想象,当我们将数据存储在XML文件中并使用SFSB中的事务管理来管理非关系数据库时,它确实非常有用。

我几乎可以肯定我完全错了,所以请给我一些非常好的SFSB使用示例。

2 个答案:

答案 0 :(得分:8)

  

我正在学习ejb3而且我很好奇它何时使用SFSB很方便?当SFSB很容易解决一些复杂的问题时,我找不到任何好的例子。

你的意思是购物车?这是我能想到的明显答案。

  

实际上我看到SLSB可以用作网络服务,这很方便。

您可以将EJB视为部署分布式服务的一种方式,但要小心。术语“Web服务”使大多数人想到“使用HTTP协议的基于SOAP的Web服务”,而这不是您在SFSB中所拥有的。

  

但我不知道何时使用SFSB。我只看到它的问题,因为我们应该学习它的一些东西,我们应该编写一个由注释组成的代码,然后我们应该使用恼人的查找。我们不会得到任何好的回报。

这一段令人困惑,但我认为你说你不太喜欢EJB。

  

例如,我们不能使用SLSB中的SFSB,因为有状态对象只能用于有状态上下文。

是的,它们是互补的。您将SFSB用于需要的用例 - 等待它 - 在调用之间保持状态。

  

我们不能在servlet中使用DI,而不是我们应该使用lookup手动创建SFSB实例,然后将其放到HttpSession对象中。它不能是网络服务。

servlet来自哪里?

  

我在SFSB中可以看到的唯一利润是交易管理。但我认为,当我们真的需要一个交易并且我们不需要DB时,这种情况很少见。我可以假设,当我们将数据存储在xml文件中并在SFSB中使用事务管理来模拟非关系数据库时,它可能非常有用。

我认为你完全不在这里。会话bean是了解工作单元和管理事务的人。当用例完成时,他们可能必须使用实体bean来保持某些状态,因此事务并不像您想象的那样罕见。

  

我几乎可以肯定我完全错了,所以请给我一些很好的SFSB使用示例。

您的期望是什么?有人会发布工作SFSB?我不打算这样做,主要是因为我不是一个很大的EJB粉丝。 (我做的就是你提到的所有内容以及Spring的更多内容。)

但请放心,SFSB有时很有用。购物车就是一个明显的例子。在客户决定购买之前,您需要一个位置来维护购物车中的商品。 SFSB是实现这一目标的一种方式。

答案 1 :(得分:0)

在有状态和无状态架构之间进行选择只是设计问题。

大多数情况下,无状态设计是首选,因为它更容易。

虽然在开始时更容易理解,但构建无状态应用程序会导致一系列问题(大量无状态Web服务,弹簧单例等等),从长远来看使应用程序的可管理性降低。

我更喜欢在可能的情况下设计有状态的应用程序。

有状态会话bean是一种方法。 春天原型或web-scoped bean另一个。

检查jboss seam框架。