首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Tomcat /Tomcat端点中使用CDI/injection

在Tomcat /Tomcat端点中使用CDI/injection
EN

Stack Overflow用户
提问于 2018-07-04 14:27:36
回答 1查看 651关注 0票数 0

我使用tomcat 9.0.4和Java1.8。在同一个项目中,泽西提供了一个网络服务。我可以从webservice类中使用@Inject,没有任何问题。我试图让注入工作从我的websocket端点显示在下面。

代码语言:javascript
复制
@ApplicationScoped
@ServerEndpoint("/endpoint")
public class ArchApi {

  @Inject RepClass injectedClass;

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

}

这是我的CDI实现:

代码语言:javascript
复制
    <dependency>
        <groupId>org.glassfish.jersey.inject</groupId>
        <artifactId>jersey-hk2</artifactId>
        <version>2.27</version>
    </dependency>

我得到的只有一个java.lang.NullPointerException。

我找到了这个功能请求。因此,我认为在tomcat中还没有实现注入。

我的问题:

  • 我如何正确地将我的输入数据写入我的存储库?
  • 还有其他方法让注射有效吗?

目前,我正在考虑迁移到glassfish,它应该支持从Server端点注入

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-04 14:47:41

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

代码语言:javascript
复制
public class CdiAwareConfigurator extends ServerEndpointConfig.Configurator {

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

然后按以下方式注释端点类:

代码语言:javascript
复制
@ServerEndpoint(value = "/chat", configurator = CdiAwareConfigurator.class)
public class ChatEndpoint {
    ...
}

根据您的CDI配置,您可能需要用@Dependent对端点类进行注释。

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

代码语言:javascript
复制
SomeSortOfBean bean = CDI.current().select(SomeSortOfBean.class).get();
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51175990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档