2014-01-10 3 views
1

В веб-приложении пользователи используют сеанс HTTP сервлета. Некоторые данные хранятся в CDI @SessionScoped beans. Позже на некоторых страницах связь WebSocket выполняется между браузером пользователя и сервером.Использование CDI @SessionScoped bean из WebSocket @ServerEndpoint

С GlassFish 4, при использовании впрыскивается @SessionScoped CDI боб из WebSocket @ServerEndpoint с GlassFish 4.0 я получаю сообщение об ошибке: org.jboss.weld.context.ContextNotActiveException: WELD-001303 Нет активных контекстов для типа области видимости javax.enterprise.context.SessionScoped

Из запросов типа JSP/сервлета, используя @SessionScoped CDI bean, прекрасно, но не из WebSocket @ServerEndpoint.

Также обратите внимание, что использование бинов CDI @Singleton из @ServerEndpoint отлично работает, поэтому это не проблема инъекции зависимостей общего назначения.

Возможно, я сделал что-то неправильно.

Так что мои вопросы можно использовать beansScoped CDI beans из методов WebSocket @ServerEndpoint beans? Если да, то как?

Спасибо за ваше время.

+0

Повторяющийся вопрос http://stackoverflow.com/questions/20872300/java-ee-7-how-to-inject-an-ejb-into-a-websocket-serverendpoint (короткий ответ, поддержка CDI в 'javax.websocket' не поддерживается, определяется и spec'd) –

+0

Я думаю, что это не тот же вопрос. Я обновляю свой пост, чтобы упомянуть, что инъекция CDI-компонентов @Singleton отлично работает. Это действительно проблема с областью. –

ответ

0

Возможно, это не тот самый вопрос, но проблема такая же, что и ответы здесь. В принципе, поскольку @JoakimErdfelt отмечает, что поддержка websocket для CDI в лучшем случае проблематична. Спецификация websocket не учитывала, какие области действия активны.

Из коробки, это то, что поддерживает Тир: https://github.com/tyrus-project/tyrus/tree/master/samples/cdi/src/main/java/org/glassfish/tyrus/sample/cdi

Если вы хотите, вы можете продлить его, чтобы начать сферу сеанса (для справки, Apache DeltaSpike-х КДИ Context Control), но из-за разницы протокола это будет другой сеанс, чем тот, который уже установлен через HTTP.

+0

Хорошо, спасибо, слишком плохо, что это не поддерживалось спецификацией. –

+0

Да, я думаю, что все немного расстроены из-за разрыва. Надеюсь, мы сможем исправить это в MR (это влияет на спецификацию EE spec + WebSocket). –

+0

Все еще не подано, кажется – Ced

Смежные вопросы