Stateless Session Beans和Request Scoped bean之间有什么区别

时间:2015-03-05 12:14:42

标签: jsf java-ee scope ejb cdi

我知道无状态会话Bean 是指EJB bean,而Request Scoped是指CDI bean(或JSF托管bean),所以我首先从Java EE Tutoriel给出它们的两个定义

Stateless Session Beans定义:

  

无状态会话bean不会保持会话状态   客户端。当客户端调用无状态bean的方法时,   bean的实例变量可能包含特定于该客户端的状态   但仅限于调用的持续时间。当方法是   完成后,不应保留特定于客户的状态。

CDI Request Scoped定义:

  

用户在单个HTTP请求中与Web应用程序的交互。

我从这两个定义中理解的是,无状态会话bean的概念与请求范围概念相同,但我不确定,因为命名“session”使我感到困惑。所以,我问自己是否是这种情况(相同的概念)也许他们会有类似的命名(使用请求而不是会话)。

所以,我的问题是:EJB无状态会话bean和CDI / JSF请求范围bean之间是否有任何概念上的区别?

1 个答案:

答案 0 :(得分:9)

有很大的不同。

无状态EJB不会在调用之间维护状态。除了依赖其他bean之外,它通常根本没有状态。它为其他组件提供服务。无状态bean的客户端可以调用它来提供HTTP请求,但是他们也可以在任何HTTP请求之外(批处理,预定作业或其他任何方式)调用它。

请求范围的bean通常具有状态(否则,它可能是应用程序范围的bean或无状态bean)。此状态持续HTTP请求的持续时间。它不能在HTTP请求处理代码之外调用。 请求范围的bean的一个很好的例子是当前用户:

  • 请求来自servlet过滤器
  • servlet过滤器从请求中提取cookie并从数据库中获取与此cookie相关的当前用户信息(例如,通过调用无状态bean)
  • servlet过滤器将用户信息存储到" currentUser"请求范围的bean
  • 同一请求处理中涉及的其他组件可以从此注入的currentUser bean获取当前用户信息。