jakarta-ee - session Bean的 session 状态

标签 jakarta-ee ejb-3.0 java-ee-6

我正在阅读有关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/

相关文章:

jakarta-ee - 将 JMS 应用程序移植到 MQ

java - oracle中如何给触发器发送参数

java - 访问 actionPerformed 中的变量

java - 在无状态 EJB 计时器中正确使用实例变量

jakarta-ee - 注入(inject)返回字符串 CDI 的生产者方法

java - 如何告诉 CDI 容器 "activate"一个 bean?

jakarta-ee - 如何从另一个 EAR 调用远程 EJB?

java - 我的网络应用程序 (JSF 2.0) 的简单登录和注销功能

java - 在 JBoss Weld 中的持久性单元服务之前启动服务

jpa - Eclipselink JPA 在使用生成的主键插入 Derby 表时出错