我正在阅读有关Java EE 6的书,并且遇到了以下部分:
“无状态: session Bean不包含方法之间的 session 状态,以及任何
实例可用于任何客户端。”
“有状态: session Bean包含 session 状态,必须保留该状态
针对单个用户的各种方法。”
“对话状态”是什么意思?有没有现实世界的例子来解释它?
提前致谢。
II。 为什么这种 bean 分类很重要?对于初学者(乍一看),它并不能告诉您正确的解释
因此,感谢您,我得到了逻辑上的区别,但是为什么这种行为如此重要?
最佳答案
在最基本的情况下,“ session 状态”是指实例字段的值。
对于无状态 session Bean,容器不保证后续方法调用将使用相同的EJB实例(来自池),因此,您不能假定调用Bean方法时放置的值在调用Bean方法时仍将存在再次使用方法(或bean的另一种方法)。
对于有状态 session Bean,容器保证后续调用将使用相同的EJB实例,因此您可以保留实例字段值。
为了举例说明,假设您有一个具有增量()和检索()方法的bean。增量会增加存储的值,而检索会获取当前的存储值。
对于无状态 session Bean,如果您调用5次递增()方法,则不能保证在执行检索()时得到5。这取决于将容器分配给哪个EJB。你的来电。因此,如果为您分配了一个新的EJB实例,那么您将得到一个零。容器还可能没有清理您的EJB实例,因此可能有可能获得5-但不能保证。
对于有状态 session Bean,如果您调用5次递增方法,则在检索值时将得到5。该容器保证了您第一次调用的EJB将用于所有后续调用。
关于jakarta-ee - session Bean的 session 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5153012/