我知道无状态会话Bean 是指EJB bean,而Request Scoped是指CDI bean(或JSF托管bean),所以我首先从Java EE Tutoriel给出它们的两个定义
无状态会话bean不会保持会话状态 客户端。当客户端调用无状态bean的方法时, bean的实例变量可能包含特定于该客户端的状态 但仅限于调用的持续时间。当方法是 完成后,不应保留特定于客户的状态。
CDI Request Scoped定义:
用户在单个HTTP请求中与Web应用程序的交互。
我从这两个定义中理解的是,无状态会话bean的概念与请求范围概念相同,但我不确定,因为命名“session”使我感到困惑。所以,我问自己是否是这种情况(相同的概念)也许他们会有类似的命名(使用请求而不是会话)。
所以,我的问题是:EJB无状态会话bean和CDI / JSF请求范围bean之间是否有任何概念上的区别?
答案 0 :(得分:9)
有很大的不同。
无状态EJB不会在调用之间维护状态。除了依赖其他bean之外,它通常根本没有状态。它为其他组件提供服务。无状态bean的客户端可以调用它来提供HTTP请求,但是他们也可以在任何HTTP请求之外(批处理,预定作业或其他任何方式)调用它。
请求范围的bean通常具有状态(否则,它可能是应用程序范围的bean或无状态bean)。此状态持续HTTP请求的持续时间。它不能在HTTP请求处理代码之外调用。 请求范围的bean的一个很好的例子是当前用户: