我不明白为什么 CDI 使用注入不适用于 websockets,使用 undertow。
下面是我为一个简单的 websocket 端点提供的代码。
@ServerEndpoint("/")
public class TestWebSocketEndpoint {
@Inject
private RetrieveAccessor retrieveAccessor;
private final Logger logger = Logger.getLogger(this.getClass().getName());
@OnOpen
public void onConnectionOpen(Session session) {
logger.info("Connection opened ... " + session.getId());
}
@OnMessage
public String onMessage(String message) {
if (!message.isEmpty()) {
return message;
}
System.out.println("RETRIEVE BEAN -> " + retrieveAccessor);
if (retrieveAccessor != null) {
return "BEAN NOT NULL";
}
return ":(";
}
@OnClose
public void onConnectionClose(Session session) {
logger.info("Connection close .... " + session.getId());
}
}
当然问题是注入的属性为空。对于下面描述的无状态 bean 的部署和注入,我当然没有问题。有没有办法解决这个问题,如果我只是初始化我需要的 bean 属性,我可能会遇到什么问题?因为这绝对有效。
RetrieveAccessor retrieveAccessor = new.... {code}