Подтвердить что ты не робот

Когда использовать сеанс состояния bean через сеанс бездействия bean?

Сессия состояния bean определяется следующим образом:

Сессия состояния Beans Состояние объекта состоит из значений его переменных экземпляра. В сеансе с состоянием bean экземпляр переменные представляют состояние уникального сеанса client-bean. Потому как клиент взаимодействует ( "переговоры" ) со своим bean, это состояние часто называемое диалоговым состоянием.

Безстоящий сеанс bean определяется следующим образом:

Безстоящий сеанс Beans Сеанс без состояния bean не поддерживает диалоговое состояние с клиентом. Когда клиент вызывает методы безстоящих bean, переменные экземпляра bean могут содержать состояние, специфичное для этого клиента, но только на время призывание. Когда метод завершен, состояние, специфичное для клиента не следует сохранять. Однако клиенты могут изменять состояние переменные экземпляра в объединенном состоянии без состояния beans, и это состояние сохраняется до следующего вызова объединенного апатрида bean. Кроме во время вызова метода все экземпляры безстоящего bean являются эквивалент, позволяя контейнеру EJB назначать экземпляр любому клиент. То есть, состояние сеанса без состояния bean должно применяться через всех клиентов.

Также упоминается преимущество сеанса без состояния bean следующим образом:

Поскольку сеанс без состояния Beans может поддерживать несколько клиентов, они могут предлагают лучшую масштабируемость для приложений, требующих больших чисел клиентов. Как правило, для приложения требуется меньше сеанса без сохранения состояния Beans, чем сеанс с состоянием Beans для поддержки того же числа клиентов.

Итак, возникает вопрос, когда нужно использовать сеанс с состоянием beans? К моему наивному пониманию этого вопроса, нужно придерживаться безстоящего сеанса bean, как он может.

Какими будут кандидаты, в которых следует использовать сеанс с состоянием bean? Какие-нибудь хорошие примеры?

Сессия Bean

4b9b3361

Ответ 1

Сначала вы должны понять, как создаются и обрабатываются beans на сервере.

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

С другой стороны, сеанс с состоянием bean тесно связан с клиентом. Каждый экземпляр создается и привязывается к одному клиенту и обслуживает только запросы от этого конкретного клиента. Так получилось, что если вы выполняете два последующих запроса на stateful bean, ваш запрос будет обслуживаться всегда из того же экземпляра bean. Это означает, что вы можете поддерживать диалоговое состояние между запросами. В конце жизненного цикла клиент вызывает метод remove, а bean уничтожается/готов к сбору мусора.

Когда использовать апатрид или состояние?

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

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

Ответ 2

Я думаю, что самый лучший пример использования сеанса Stateful bean для Корзина, где вы храните все продукты, которые пользователь хочет купить.