undertow を使用して、インジェクションの CDI 使用が websocket で機能しない理由がわかりません。
以下は、単純な 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());
}
}
もちろん問題は、注入されたプロパティが null であることです。もちろん、この展開と以下に説明するステートレス Bean の注入のために残りの部分を使用しても問題はありません。これを回避する方法はありますか? Bean である必要なプロパティを初期化するだけで、どのような問題が発生する可能性がありますか? それは間違いなく機能するからです。
RetrieveAccessor retrieveAccessor = new.... {コード}