2015-05-10 4 views
0

Я довольно новичок в Java EE. Я проходил через CDI и EJB материал и наткнулся на @SessionScoped и @Stateful аннотацию.@SessionScoped/@Stateful - как они управляют сеансом/состоянием

Глядя на определение: @SessionScope: поддерживается взаимодействие пользователя с веб-приложением по нескольким HTTP-запросам.

@Statfeful: похоже, она имеет такую ​​же функциональность как @SessionScope

Так вот мои сомнения:

1) Есть ли оба они служат той же цели? 2) У меня есть немного опыта работы с Node и Python. В этих языках для поддержания состояния клиента я всегда использовал cookie, который привязан к объекту HTTPSession, который дополнительно привязан к кешу в памяти (redis/memcache) для распространения по всем серверам.

Так что я могу использовать ту же технику здесь ... правильно? Тогда почему я должен использовать эти обозначения? Кроме того, если я планирую использовать их, то как их распределить по всем серверам? Я имею в виду, запрос от клиента может прийти на server1, а затем следующий запрос может перейти на server2 .. в этом случае, если этот объект SesssionScoped не распределен, то как все будет работать правильно?

Какова цель этих аннотаций?

ответ

0

Нет, они не то же самое, но они могут использоваться вместе.

@SessionScoped связывает объект с сеансом HTTP. @Stateful Session Beans просто означает, что их состояние может поддерживаться за счет вызовов от одного вызывающего абонента. Готовность сессионных благ поступает из тяжелых клиентских приложений, в которых программа Java SE может искать EJB на удаленном сервере для выполнения работы. Эти типы клиент/серверных приложений могут использовать Stateful EJB для поддержания некоторого количества состояний сеанса на сервере, не требуя HTTP (они использовали такие протоколы, как RMI-IIOP, CORBA на серверах приложений).

В настоящее время вы можете продолжать использовать Stateful Session Beans с сеансом HTTP.

+0

@sessionScope привязывает объект к сеансу HTTP ... можете ли вы объяснить это? Если мой объект sessionScoped не распространяется, как это будет работать? И как это обязательство сделано? Раньше я использовал файлы cookie для привязки моего http-запроса к объекту http session (в node.js) – JackSparrow

+0

Я имею в виду, что любой объект, который намерен содержать состояние клиента, должен быть распределен по всем приложениям, не так ли? – JackSparrow

+0

Что значит не распространять? Я думаю, вы запутываете кластеризацию и сеансы http. –

0

После слова со своим товарищем по команде, я думаю, что у меня есть возможный ответ на мой вопрос.

Использование sessionScope или stateful может быть использовано в случае липких сеансов. Sticky and NON-Sticky sessions

В этом случае сеанс пользователя применяется только к одному полю и не распространяется по всем полям. Но если мы не используем липкие сессии, эти аннотации практически бесполезны

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