Как @SessionScoped работает с EJB?CDI только для веб-уровня? - PullRequest
9 голосов
/ 23 ноября 2011

Как сеанс определен в @SessionScoped компоненте CDI?
Является ли эта аннотация действительной только при вызове из контейнера сервлета, где сеанс четко определен в форме HttpSession?

Если нет, то как EJB с @Inject @SessionScoped MyBean myBean может узнать , что такое сессия на самом деле ? Я имею в виду, что методы этого EJB могли быть вызваны автономным клиентом, RESTful WS или каким-либо другим представлением.
Что должно произойти в таком случае? Если аннотация не имеет смысла, должна ли она вставлять свежий экземпляр MyBean для каждого запроса или, возможно, она должна сохранять один и тот же экземпляр для всех запросов?

1 Ответ

3 голосов
/ 23 ноября 2011

Взято из спецификации @ SessionScoped

Область действия сеанса активна:

во время метода service () любого сервлета в веб-приложении,во время метода doFilter () любого фильтра сервлета и когда контейнер вызывает любой HttpSessionListener, AsyncListener или ServletRequestListener.

Короче говоря, да.Это связано с HttpSession.Также:

Контекст сеанса является общим для всех запросов сервлета, которые происходят в одном сеансе HTTP.Контекст сеанса уничтожается по истечении времени ожидания HTTPSession после вызова всех HttpSessionListeners и в самом конце любого запроса, в котором был вызван invalidate (), после вызова всех фильтров и ServletRequestListeners.

...