【问题标题】:@ServerEndpoint can be an EJB but can not be plain CDI bean?@ServerEndpoint 可以是 EJB 但不能是普通的 CDI bean?
【发布时间】:2013-12-14 20:57:50
【问题描述】:

我刚刚遇到以下问题,无法找到答案:

@ServerEndpoint("/websocket/server")
public class ServerUpdateEndpoint implements Serializable {
    ...@OnOpen, OnMessage OnClose annoted methods, works fine...

    @PostConstruct
    public void start() {
        logger.log(Level.INFO, "ServerUpdateEndpoint start");
    }

    @PreDestroy
    public void stop() {
        logger.log(Level.INFO, "ServerUpdateEndpoint stop");
    }

}

当我用@Named 生命周期回调@PostConstruct 注释这个类时,@PreDestroy 永远不会被执行。

当我使用 @Singleton 对此进行注释时,它可以正常工作。

谁能解释一下,这里的纯 CDI 注释有什么问题?

【问题讨论】:

    标签: java jakarta-ee ejb cdi ejb-3.1


    【解决方案1】:

    它肯定只能有 CDI 注释。您需要对其进行注释 @ApplicationScoped 并确保客户端连接到端点。你添加@Named时是否给了它一个范围?

    【讨论】:

    • 在 tomEE 上,使用 @ApplicationScoped 注释时不起作用,但使用 EJB 注释时可以正常工作
    • @TomaszGawel 这听起来像是 TomEE 特定的问题。这就是为什么这被否决了吗?
    • 你是对的,但在你修改分析器之前我不能取消选中它。所以也许添加一个关于 TomEE 的通知,我会撤回投票?好吗?
    • TomEE 一年前发布此答案时不支持 WebSockets。
    猜你喜欢
    • 2014-11-29
    • 1970-01-01
    • 2014-01-29
    • 2015-02-12
    • 1970-01-01
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多