gpt4 book ai didi

websocket - 使用来自 WebSocket @ServerEndpoint 的 CDI @SessionScoped bean

转载 作者:行者123 更新时间:2023-12-05 07:59:38 25 4
gpt4 key购买 nike

在网络应用程序中,用户使用 servlet HTTP session 。一些数据存储在 CDI @SessionScoped bean 中。稍后在某些页面中,WebSocket 通信在用户浏览器和服务器之间执行。

在 GlassFish 4 中,当使用来自 WebSocket @ServerEndpoint 的注入(inject) @SessionScoped CDI bean 和 GlassFish 4.0 时,我收到一条错误消息:org.jboss.weld.context.ContextNotActiveException: WELD-001303 范围类型 javax.enterprise.context.SessionScoped 没有事件上下文

对于 JSP/servlet 类型的请求,使用 @SessionScoped CDI bean 是可以的,但对于 WebSocket @ServerEndpoint 则不然。

另请注意,使用来自@ServerEndpoint 的@Singleton CDI bean 工作正常,因此这不是通用依赖注入(inject)问题。

也许我做错了什么。

所以我的问题是 @SessionScoped CDI bean 可以从 WebSocket @ServerEndpoint bean 的方法中使用吗?如果是,如何?

感谢您的宝贵时间。

最佳答案

这可能不是完全相同的问题,但问题非常相似,此处的答案也适用。基本上,正如@JoakimErdfelt 指出的那样,websocket 对 CDI 的支持充其量是有问题的。 websocket 规范忽略了哪些范围是事件的。

开箱即用,这是 Tyrus 支持的:https://github.com/tyrus-project/tyrus/tree/master/samples/cdi/src/main/java/org/glassfish/tyrus/sample/cdi

如果需要,您可以扩展它以启动 session 范围(作为引用,Apache DeltaSpike 的 CDI 上下文控制),但由于协议(protocol)差异,它将是一个与已经通过 HTTP 建立的 session 不同的 session 。

关于websocket - 使用来自 WebSocket @ServerEndpoint 的 CDI @SessionScoped bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21049387/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com