Java EE 6 TomEE 1.7.2: как связать веб-сокет с сеансом пользователя?

@ServerEndpoint("/websocket/blah")
public class LeadChangeWebsocketEndpoint {
    @Inject
    private SessionScopedBean bean;

    @OnOpen
    public void onOpen(Session session) {
        bean.takeWebsocketAndDoSomething(session);
    }
    //....
}

Этот код приводит к исключению. Как связать веб-сокет с сеансом пользователя? Я не могу найти какую-либо документацию, явно указывающую, что такое область CDI для @ServerEndpoint bean-компонента, даже несмотря на то, что он способен получать инъекции CDI.


person Jonathan S. Fisher    schedule 27.07.2015    source источник
comment
До вызова onOpen HTTP-запрос все еще активен со всеми его файлами cookie, токенами и т. д. Это время, чтобы аутентифицировать пользователя или отказаться от соединения... тем более, что (на некоторых серверах) обратный вызов onMessage может быть вызван, пока onOpen все еще обрабатывается... Я не очень разбираюсь в Java, поэтому я не знаю, как вы примените это (я могу показать вам на Ruby, но это мало поможет).   -  person Myst    schedule 27.07.2015
comment
Похоже, он не так хорошо поддерживается. stackoverflow .com/questions/21049387/ Пытались ли вы аннотировать свой класс с помощью @Stateless. Может быть, этот мог бы работать.   -  person user3584190    schedule 27.07.2015
comment
Да... Я посмотрю, смогу ли я заставить группу экспертов по Java EE взглянуть на это и внести ясность. Я не пробовал это как EJB, хотя это кажется страшным, ха-ха. Я опубликую результаты для TomEE   -  person Jonathan S. Fisher    schedule 27.07.2015
comment
@exabrial ты забыл результат   -  person Ced    schedule 08.05.2016
comment
Вам это не понравится, это некрасиво... см. здесь: stackoverflow.com/questions/21888425/   -  person Jonathan S. Fisher    schedule 09.05.2016