当前位置: 首页 > 知识库问答 >
问题:

CDI、有状态会话bean、无状态会话bean、pojo和不同作用域之间的关系

陈瀚玥
2023-03-14

我正在学习j2ee,如果问题看起来很基本请原谅。

在httpsession中,会话ID存储在客户端,与之相关的数据存储在服务器端。

现在,当我在POJO上使用CDI@SessionScoped时,这是否意味着EJB容器(?)在会话中存储pojo。(Session.SetAttribute(POJO))

CDI可以区分SFB、SLB和POJO吗?

共有1个答案

勾俊
2023-03-14

现在,当我在sfb上使用CDI@sessionscoped时,这是否意味着只会为那个sfb或EJB容器返回JSESSIONID(?)是否会在服务器端存储另一个sfb副本?

JSessionIDhtml" target="_blank">http会话相关,而不是与任何EJB(无状态或有状态)相关。当您使用@sessionscoped时,您的sfb将通过CDI与您的http会话相关联。

现在,当我在sfb上使用CDI@RequestScoped时,它是否没有用,因为sfb一直持续到会话?

现在,当我在slb上使用CDI@SessionScoped时,使用@SessionScoped是否没有用,因为slb只用于方法调用?

或多或少是的。一些CDI框架(例如OWB)甚至不允许这样做,只允许@dependent作用域。SLB实际上寿命更长,但由于它不存储任何状态,因此它的实例可以被许多客户机池使用。

现在,当我在POJO上使用CDI@SessionScoped时,这是否意味着EJB容器(?)在会话中存储pojo。(Session.SetAttribute(POJO))

POJO由CDI框架与http会话相关联,不直接作为属性存储在会话中。

CDI可以区分SFB、SLB和POJO吗?

是的,CDI容器可以区分这些,并以不同的方式处理它们,例如类型可见性、允许的作用域。例如,规范的片断:

无状态会话bean必须属于@dependent伪作用域。单例bean必须属于@applicationscoped作用域或@dependent伪作用域。如果会话bean指定了非法范围,容器将自动检测问题并将其视为定义错误。有状态会话bean可以有任何作用域。

 类似资料:
  • 问题内容: 有状态会话bean和HTTP会话之间有什么关系吗?我们将需要有状态会话Bean的用例是什么,而HTTP会话需要哪些用例。我可以将有状态会话Bean公开为静态Web服务吗? 问题答案: HTTP是一种无状态协议, 这意味着 它是服务器和客户端之间的实际传输协议- 是“无状态的, 因为它在调用之间不记得任何东西。 现在,首先阅读一下什么是HTTPSession和什么是Session Bea

  • 问题内容: 有状态会话Bean定义如下: 有状态会话Bean对象的状态由其实例变量的值组成。在有状态会话Bean中,实例变量代表唯一的客户端Bean会话的状态。因为客户端与其bean进行交互(“交谈”),所以这种状态通常称为对话状态。 无状态会话Bean定义如下: 无状态会话Bean无状态会话Bean不会与客户端保持对话状态。当客户端调用无状态Bean的方法时,该Bean的实例变量可能包含特定于该

  • 对于有状态会话bean(SFSB)和无状态会话bean(SLSB)的用法,我有点困惑。 我知道SFSB与客户保持状态。这很有帮助:什么时候使用有状态会话bean而不是无状态会话bean? 这里和许多其他地方提供的示例是SFSB的购物车。 “如果一个任务需要一系列方法调用(不止一次),并且您需要保留以前的结果以在下一次调用中使用它们,那么就可以使用SFSB”--Source。这将更像是签出(页面之间

  • 有状态会话bean定义如下: 无状态会话bean无状态会话bean不维护与客户端的会话状态。当客户机调用无状态bean的方法时,该bean的实例变量可能包含特定于该客户机的状态,但仅限于调用期间。当方法完成时,客户端特定状态不应保留。然而,客户端可能会更改池化无状态bean中实例变量的状态,并且此状态将保留到下一次调用池化无状态bean时。除了在方法调用期间,无状态bean的所有实例都是等效的,允

  • 问题内容: 我有一个有状态会话Bean(SFSB),它用作身份验证模块。在SFSB中,我存储了登录的当前用户。此外,我还有一些外观(用于处理我的实体的JPA / SQL内容)(无状态会话Bean(SLSB))。为了检查当前用户的访问权限,我尝试从SLSB中调用SFSB。但是,从SLSB调用时,当前用户字段始终为“空”。直接调用SFSB时,当前用户字段设置正确…对于调用,我使用@EJB批注。 任何想

  • 我是EJB的新手,最近开始研究EJB(3.0)。我已经使用Java6年了,但以前从未使用过EJB。至少可以说,整个EJB业务的复杂性让我不知所措。我不明白我可以在哪里实际应用一些概念。 在理解无状态会话bean后,我想到的一个问题是,你能不能不要总是用一个没有本地成员的类的共享实例来替换无状态会话bean(实际上使其无状态)?我了解到正在为无状态会话bean进行实例池。如果没有状态,就不能简单地使