@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