首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CDI、状态会话bean、无状态会话bean、pojo与不同范围的关系

问CDI、状态会话bean、无状态会话bean、pojo与不同范围的关系
EN

Stack Overflow用户
提问于 2014-10-30 16:07:31
回答 1查看 1.1K关注 0票数 1

我正在学习j2ee,如果问题显得很基本,请原谅。

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

当有状态会话bean与web客户端交互时,浏览器向Java应用程序发出初始请求时,它将得到一个JSESSIONID,服务器可以将其与一个特定的自愿HTTPSession实例相关联。通过保留此JSESSIONID,浏览器可以为其提供每个后续请求,这将激活相同的http会话服务器端。参考文献:Using a Stateful Session Bean to track an user's session

现在使用sfb上的CDI @SessionScoped,这是否意味着仅返回JSESSIONID,因为SFB 或 EJB容器(?)将在服务器端存储sfb的另一个副本?(session.setAttribute(SFB-另一参考)) 现在当我使用sfb上的CDI @RequestScoped时,它是否没有用,因为SFB一直存在直到会话? 现在当我在slb上使用CDI @SessionScoped时,使用@SessionScoped是否毫无用处,因为slb只用于方法调用? 现在在pojo上使用CDI @SessionScoped是否意味着容器(?)在会话中存储pojo。(session.setAttribute(POJO))

可以区分SFB、SLB和POJO ?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-04 00:05:53

现在,当我在sfb上使用CDI @SessionScoped时,这是否意味着仅返回那个SFB或EJB容器的JSESSIONID (?)会在服务器端存储另一份sfb吗?

JSESSIONID与http会话相关,而不是与任何EJB (无状态或状态)相关。当您使用@SessionScoped时,您的sfb将由CDI与您的http会话相关联。

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

不,由于其他原因,它是无用的,因为将在每个请求上创建新的有状态bean,这实际上破坏了有状态bean的整个思想,它应该在请求之间存储状态。

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

或多或少是的。一些CDI框架(例如OWB)甚至不允许这样做,并且只允许@依赖范围。SLB实际上寿命更长,但由于它不存储任何状态,它的实例可以由许多客户端池和使用。

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

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

CDI能区分SFB、SLB和POJO吗?

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26657908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档