我对有状态会话bean(SFSB)与无状态会话bean(SLSB)的使用有点混淆。
我知道SFSB与客户保持联系。这有助于:When to use Stateful session bean over Stateless session bean?
此处以及许多其他地方提供的示例是SFSB的购物车。
我的问题是如果应用程序由数据库支持,为什么需要SFSB? 购物车通常会在每次更改数据库时更新数据库吗?或者状态是否驻留在SFSB中,直到它不需要(然后转储到数据库),就像某种缓存一样?
"如果任务需要一系列方法调用(多个),并且您需要保留以前的结果以在下次调用中使用它们,则可以使用SFSB" - source。这更像是checkout(页面之间的形式??),直到最后一页才会在DB中保存任何内容。 但是对于购物车,我想在用户向购物车添加内容时写入数据库?
或者我错过了SFSB的观点:)
答案 0 :(得分:0)
我过去花了很多时间试图找到除了(明显的)购物车之外的其他一些例子。
在我看来,有状态bean只属于JSE领域,客户端没有像HTTPSession这样的东西。因此,将状态维护到服务器的唯一方法是保持对Stateful Proxy对象的引用。在许多Oracle / Sun文档中,Stateful被引用为客户端到服务器的扩展(或相反)。
在过去,我实际上写了一些由Stateful bean支持的小JSE Main类,以便快速管理:关闭/修改帐户,监控等...
对于你的其余问题:
当我们谈论JEE领域(主要是网络应用程序)时,你实际上很少有选择来保持客户端状态:HTTPSession包含内存中的所有篮子,或者对篮子的引用以及对其ID的引用可能在会话和回合中从会话到数据库的行程,用于存储对象。选择或采用其他方法有利有弊。
有时我发现有状态bean的例子保存在http会话中。我发现这种方法很奇怪。老实说,我还没有在生产版本中发现有状态存储在会话中。
答案 1 :(得分:0)
当数据不确定持久时,您使用SFSB-s。用户只是将一些东西放入购物车但从未购买过。在这种情况下,将此数据存储在DB中并不是一个好主意。存储真正需要的数据而不是数据库中的垃圾。与在预定义的时间段内未被购买/处理的事物相关的数据是暂时的,您应该将它们存储在瞬态(会话范围/过期日期约束)方式中。 当用户签出她/他购物车的内容时,数据具有商业意义,应该在数据库中进行。