Ich verstehe nicht, warum CDI Verwendung der Injektion nicht funktioniert mit WebSockets, mit Sog.Undertow Websocket Bean Injection CDI Problem
Unten ist der Code, den ich für einen einfachen Websocket Endpunkt habe.
@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());
}
}
Natürlich ist das Problem, dass die injected-Eigenschaft null ist. Ich habe natürlich keine Probleme damit, den Rest der Dinge für diesen Einsatz und die Injektion der unten beschriebenen zustandslosen Bohne zu verwenden. Gibt es eine Arbeit dafür, was sind die Probleme, denen ich begegnen könnte, wenn ich nur Eigenschaften, die ich brauche, die Bohnen sind? Weil das definitiv funktioniert.
RetrieveAccessor retrieveAccessor = new .... {code}
Der letzte Teil Ihrer Frage ist verwirrend. Implementieren Sie Ihren 'RetrieveAccessor'? Sie erwähnen auch Sog. Verwenden Sie Weld Servlet? Wildfliege? –
Ich benutze nur undingow, und der letzte Teil meiner Frage erklärt nur, dass eine normale Klasseninitialisierung dieses Bean-Objekts funktioniert, was Konsequenzen daraus haben würde. – thekevshow