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

Pio*_*cki 9 session servlets cdi java-ee-6 ejb-3.1

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

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

Gon*_*gui 3

取自@SessionScoped 规范

会话范围处于活动状态:

在 Web 应用程序中任何 servlet 的 service() 方法期间、任何 servlet 过滤器的 doFilter() 方法期间以及当容器调用任何 HttpSessionListener、AsyncListener 或 ServletRequestListener 时。

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

会话上下文在同一 HTTP 会话中发生的所有 servlet 请求之间共享。当 HTTPSession 超时、调用所有 HttpSessionListener 后、以及在调用所有过滤器和 ServletRequestListener 后、调用 invalidate() 的任何请求最后时,会话上下文将被销毁。