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

13

我正在学习EJB3,并且很好奇何时使用SFSB(有状态会话Bean)更方便?我找不到任何漂亮的例子,说明SFSB如何轻松解决一些复杂问题。

实际上,我发现SLSB(无状态会话Bean)可以用作Web服务,这很方便。但我不知道什么时候使用SFSB。我只看到它存在问题,因为我们需要学习一些关于它的内容,我们应该写一些注释代码,还要使用繁琐的查找(lookup)...而我们得不到什么好处。

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

我唯一能看到的SFSB好处是事务管理。但我认为只有在我们真正需要事务并且不需要DB时才会出现这种情况。我可以想象,在存储数据在XML文件中并使用SFSB中的事务管理来管理非关系型数据库时,它可能非常有用。

我几乎肯定我完全错了,所以请给我一些真正好的SFSB使用例子。

2个回答

9
我正在学习ejb3,我很好奇什么时候使用SFSB最方便?我找不到任何好的例子来解释SFSB如何轻松地解决一些复杂的问题。
你的意思是像购物车这样的东西吗?那是我能想到的明显答案。
实际上,我发现SLSB可以用作Web服务,这非常方便。您可以将EJB视为部署分布式服务的一种方式,但要小心。术语“Web服务”让大多数人想起“使用HTTP协议的基于SOAP的Web服务”,而这不是SFSB中所拥有的。
但我不知道何时使用SFSB。我只看到它的问题,因为我们应该学习一些关于它的内容,我们应该编写由注释组成的代码,其数量略少于完全,并且我们应该使用烦人的查找。而且我们没有得到任何好处。
这段话很困惑,但我认为你是说你不太喜欢EJB。
例如,我们不能从SLSB中使用SFSB,因为只有在有状态的情况下才能使用有状态对象。
没错,它们是互补的。您使用SFSB来处理需要在调用之间维护状态的用例。
我们无法在servlet中使用DI,而是应使用lookup手动创建SFSB实例,然后将其放入HttpSession对象中。它不能成为Web服务。
这里怎么会有servlet呢?
我唯一能看到的SFSB的利润是事务管理。但我认为只有在我们真正需要事务而不需要DB时才是罕见的情况。我可以假设,当我们将数据存储在xml文件中并使用SFSB中的事务管理来模拟非关系型DB时,它可能非常有用。
我认为你完全错了。会话bean是了解工作单位和管理事务的bean。他们可能需要与实体bean一起工作,以在使用用例完成时保留一些状态,因此事务并不像您似乎认为的那样不常见。
我几乎确定我完全错了,所以给我一些SFSB使用的真正好例子。
你的期望是什么?有人会发布可行的SFSB吗?我不会这样做,主要是因为我不太喜欢EJB。(我使用Spring执行您提到的所有操作以及更多操作。)
但请放心,SFSB有时会很有用。购物车是明显的例子。您需要一个地方来维护购物车中的商品,直到客户决定购买。 SFSB是实现这一目标的一种方式。

0

选择有状态和无状态架构只是设计问题。

大多数情况下,无状态设计更受欢迎,因为它更容易。

虽然在开始时更易理解,但构建无状态应用程序会导致一系列问题(例如:许多无状态Web服务、Spring单例等),从而使应用程序在长期运行中难以管理。

如果可能的话,我更喜欢设计有状态的应用程序。

有状态会话Bean是一种方法。Spring原型或Web范围的Bean是另一种方法。

还可以查看JBoss Seam框架。


1
无状态设计更受欢迎,因为它更容易。这种说法是错误的。这个决定是根据需求做出的,两者在业务方面都有巨大的变化。 - Isabel Jinson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接