диалоговое состояние сессионных компонентов - PullRequest
8 голосов
/ 01 марта 2011

Я читаю книгу по Java EE 6, и я познакомился со следующими частями:

"Без сохранения состояния: сессионный компонент не содержит диалогового состояния между методами, и любой экземпляр может использоваться длялюбой клиент. "

" С состоянием: сессионный компонент содержит диалоговое состояние, которое должно сохраняться в разных методах для одного пользователя. "

Что делает"разговорное состояние "значит?Кто-нибудь может привести пример из реальной жизни?

Заранее спасибо.

II. Почему эта классификация бобов так важна?Это ничего не говорит с правильным объяснением ни для новичка, ни для начинающего (на первый взгляд). Так что благодаря вам я получил логическое отличие, но почему такое доброе поведение так важно?

Ответы [ 3 ]

11 голосов
/ 01 марта 2011

в самом простом «диалоговом состоянии» относится к значению полей экземпляра.

Для сессионных компонентов без сохранения состояния контейнер не гарантирует, что последующие вызовы метода будут использовать один и тот же экземпляр EJB (из пула), поэтому вы не можете предполагать, что значения, которые вы поместили при вызове метода bean, все еще будут там, когда Вы вызываете метод снова (или другой метод компонента).

Для сессионных компонентов с сохранением состояния контейнер гарантирует, что последующие вызовы будут использовать тот же экземпляр EJB, следовательно, вы можете сохранить значения полей экземпляра.

В качестве примера, скажем, у вас есть боб, имеющий метод increment () и метод retrieve (). Приращение увеличивает сохраненное значение, а извлечение получает текущее сохраненное значение.

Для сессионного компонента без сохранения состояния, если вы вызываете метод increment () 5 раз, не гарантируется, что при выполнении retrieve () вы получите 5. Это зависит от контейнера, который его EJB ' Я назначу на ваш звонок. Поэтому, если вам назначен новый экземпляр EJB, вы получите ноль. Также возможно, что контейнер не очистил ваш экземпляр EJB, поэтому возможно получить 5 - но это не гарантировано.

Для сессионного компонента с сохранением состояния, если вы вызываете метод приращения 5 раз, при получении значения вы получите 5. Контейнер гарантирует, что EJB, который использовался при первом вызове, будет использоваться для всех последующих вызовов.

4 голосов
/ 01 марта 2011

Реальным примером диалогового состояния может быть Корзина. Пользователь может добавить несколько товаров в корзину по очереди, а затем вызвать заказ. Все добавленные времена будут там

Предположим, что корзина с состоянием, то есть она сохранит диалоговое состояние.

cart.add(item1);  // suppose cart keep tracks of item by adding it to ArrayList
cart.add(item2);

cart.checkOut();    // at this stage both item1 and item2 would be there in ArrayList.

Если в корзине нет состояния, каждый звонок будет независим от предыдущих и при оформлении заказа у него может не быть ничего.

За ваше второе очко Различие необходимо из-за различий в поведении обоих бобов. Поддержание состояния требует ресурсов, поэтому бины с состоянием не так масштабируемы, как бины без состояния.

0 голосов
/ 05 августа 2013

Что касается второй части вопроса, из учебника по Java EE 6 вы можете прочитать следующее:

Когда использовать сессионные компоненты

Сессионные компоненты с сохранением состояния подходят, если выполняется любое из следующих условий.

  • Состояние компонента представляет собой взаимодействие между компонентом и конкретным клиентом.
  • Бобу необходимо хранить информацию о клиенте во всех вызовах методов.
  • Бин является посредником между клиентом и другими компонентами приложения, предоставляя клиенту упрощенное представление.
  • За кулисами компонент управляет рабочим процессом нескольких корпоративных компонентов.

Чтобы повысить производительность, вы можете выбрать сессионный компонент без сохранения состояния, если он имеет какую-либо из этих характеристик.

  • Состояние бина не содержит данных для конкретного клиента.
  • В одном вызове метода компонент выполняет общую задачу для всех клиентов. Например, вы можете использовать сессионный компонент без сохранения состояния для отправки электронного письма, подтверждающего онлайн-заказ.
  • Бин реализует веб-сервис.

Учебник по Java EE 6

...