【发布时间】:2014-01-29 17:24:42
【问题描述】:
在 Web 应用程序中,用户使用 servlet HTTP 会话。一些数据存储在 CDI @SessionScoped bean 中。稍后在某些页面中,用户浏览器和服务器之间会执行 WebSocket 通信。
对于 GlassFish 4,当使用来自带有 GlassFish 4.0 的 WebSocket @ServerEndpoint 注入的 @SessionScoped CDI bean 时,我收到一条错误消息: org.jboss.weld.context.ContextNotActiveException: WELD-001303 范围类型 javax.enterprise.context.SessionScoped 没有活动上下文
来自 JSP/servlet 类型的请求,使用 @SessionScoped CDI bean 很好,但不能来自 WebSocket @ServerEndpoint。
另请注意,使用来自@ServerEndpoint 的@Singleton CDI bean 可以正常工作,因此这不是通用依赖注入问题。
也许我做错了什么。
所以我的问题是 @SessionScoped CDI bean 可以从 WebSocket @ServerEndpoint bean 的方法中使用吗?如果是,怎么做?
感谢您的宝贵时间。
【问题讨论】:
-
向stackoverflow.com/questions/20872300/… 提出重复问题(简短回答,
javax.websocket中对 CDI 的支持没有得到很好的支持、定义和规范) -
我认为这不是同一个问题。我更新了我的帖子,提到@Singleton CDI bean 的注入工作正常。这确实是一个范围问题。