@SessionScoped如何与EJB一起工作?CDI仅适用于web层吗?



会话如何在@SessionScoped CDI bean中定义?
该注释是否仅在会话以HttpSession的形式良好定义的Servlet容器中调用时有效?

如果不是,那么具有@Inject @SessionScoped MyBean myBean的EJB如何知道会话真正是什么?我的意思是,这个EJB的方法可以由独立的客户端、RESTful WS或其他视图调用。在这种情况下应该发生什么?如果注释没有意义,它应该为每个请求注入新的MyBean实例,还是应该在所有请求中保留相同的实例?

取自@SessionScoped规范

会话范围是活动的:

在web应用程序中任何servlet的service()方法中,在任何servlet过滤器的doFilter()方法中,当容器调用任何httpessionlistener、AsyncListener或ServletRequestListener .

所以简而言之,是的。它被绑定到HttpSession。还:

会话上下文在发生的所有servlet请求之间共享在同一个HTTP会话中。时销毁会话上下文HTTPSession超时,在所有httpessionlisteners都完成之后调用,并且在invalidate()所在的任何请求的最后在所有过滤器和ServletRequestListeners都被调用之后调用。

最新更新