gpt4 book ai didi

tomcat - 在 Tomcat Websocket/Serverendpoint 中使用 CDI/注入(inject)

转载 作者:行者123 更新时间:2023-11-28 22:39:28 25 4
gpt4 key购买 nike

我正在使用 tomcat 9.0.4 和 Java 1.8。在同一个项目中,jersey 提供了一个网络服务。我可以毫无问题地使用 Web 服务类中的 @Inject。我正在尝试从下面显示的我的 websocket 端点进行注入(inject)。

@ApplicationScoped
@ServerEndpoint("/endpoint")
public class ArchApi {

@Inject RepClass injectedClass;

@OnMessage()
public String onMessage(byte[] data) {
injectedClass.doThings("test");
}

}

这是我的 CDI 实现:

    <dependency>
<groupId>org.glassfish.jersey.inject</groupId>
<artifactId>jersey-hk2</artifactId>
<version>2.27</version>
</dependency>

我得到的只是一个java.lang.NullPointerException

我找到了这个 feature要求。所以我认为注入(inject)仍然没有在tomcat中实现。

我的问题:

  • 我如何正确地将传入数据写入我的存储库?
  • 还有其他方法可以使注入(inject)工作吗?

目前我正在考虑迁移到 glassfish,它应该支持从服务器端点注入(inject)

最佳答案

您可以使用以下配置器让 CDI 管理端点类:

public class CdiAwareConfigurator extends ServerEndpointConfig.Configurator {

public <T> T getEndpointInstance(Class<T> endpointClass) throws InstantiationException {
return CDI.current().select(endpointClass).get();
}
}

然后按如下方式注释您的端点类:

@ServerEndpoint(value = "/chat", configurator = CdiAwareConfigurator.class)
public class ChatEndpoint {
...
}

根据您的 CDI 配置,您可能需要使用 @Dependent 注释端点类.


或者,您可以使用以下方法以编程方式查找 bean 实例:

SomeSortOfBean bean = CDI.current().select(SomeSortOfBean.class).get();

关于tomcat - 在 Tomcat Websocket/Serverendpoint 中使用 CDI/注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51175990/

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