@SessionScoped and @Observes
suikast42 Mar 21, 2014 9:52 AMHi guys,
I have a Websocket. I fire a CDI-Event if I reive message on this socket:
@ServerEndpoint(value = "/socketcontroller/{socketname}",
decoders = {DataDecoder.class},
encoders = {DataEncoder.class})
@ApplicationScoped
public class SocketController implements Serializable {
private static final Set<Session> sessions = Collections.synchronizedSet(new HashSet<Session>());
@Inject
private transient Logger logger;
@Inject
private Event<Data> event;
@OnClose
public void onClose(Session session, CloseReason closeReason) {
sessions.remove(session);
logger.info(getSocketname(session) + " closed");
}
@OnError
public void onError(Session session, Throwable thr) {
logger.error(getSocketname(session) + " error "+thr.getMessage());
}
@OnOpen
public void onOpen(Session session, EndpointConfig config) {
sessions.add(session);
}
@OnMessage
public void onMessage(Data message, Session session) {
logger.info(session.getOpenSessions().size() + " " + message.toString());
logger.warn("Fire CDI event started");
event.fire(message); // Sending not works for @Sessionscoped beans
logger.warn("Fire CDI event Finished");
}
public void plcSocketEvenChannel(@Observes WMSManagementController.WMSSocketServiceRequest data) { // Receive works here
for(Session session:sessions){
session.getAsyncRemote().sendObject(new PLCSocketData());
}
}
private String getSocketname(Session session) {
return session.getPathParameters().get("socketname");
}
}
So far so good. And my observer side is a Sessionscoped CDI bean. But CDI does't trugger my observer method. When I change the scope of the bean to @Dependant then everything works well but I need a sessionscoped bean for my usecase. Is there a limitation for receive CDI events and sessionscoped beans?
I'm using Wildfly 8
Nachricht geändert durch Sueleyman Vurucu