Сессионные компоненты EJB с сохранением состояния и без состояния при использовании БД

Меня немного смущает использование сеансовых компонентов с отслеживанием состояния (SFSB) по сравнению с сеансовыми компонентами без сохранения состояния (SLSB).

Я понимаю, что SFSB поддерживает состояние клиента. Это помогло: Когда использовать компонент сеанса с сохранением состояния вместо сеанса без состояния фасоль?

Пример, приведенный здесь и во многих других местах, - это корзина для покупок для SFSB.

У меня вопрос: зачем нужен SFSB, если приложение поддерживается базой данных? Будет ли корзина для покупок обычно обновлять базу данных каждый раз, когда в нее вносятся изменения? или состояние находится в SFSB до тех пор, пока оно не понадобится (а затем сбрасывается в БД), как какой-то кеш ??

«Если для задачи требуется серия вызовов методов (более одного), и вам нужно сохранить предыдущие результаты, чтобы использовать их в следующем вызове, то можно использовать SFSB» - source. Это было бы больше похоже на проверку (формы между страницами ??), где ничего не будет сохраняться в БД до последней страницы. Но для корзины покупок я мог бы представить запись в БД всякий раз, когда пользователь что-то добавляет в свою корзину?

Или мне не хватает смысла SFSB :)


person ovg    schedule 04.04.2017    source источник
comment
Если вы получили необходимую информацию, примите ответ. Спасибо   -  person The Bitman    schedule 09.05.2017


Ответы (2)


В прошлом я потратил много часов, безуспешно пытаясь найти какой-либо другой пример, кроме (очевидной) корзины покупок.

На мой взгляд, bean-компонент с отслеживанием состояния относится только к области JSE, где у клиента нет ничего подобного HTTPSession. Таким образом, единственный способ сохранить свое состояние на сервере - это сохранить ссылку на объект Stateful Proxy. Во многих документах Oracle / Sun Stateful упоминается как расширение клиента по отношению к серверу (или наоборот).

В прошлом я фактически написал небольшой класс JSE Main, поддерживаемый компонентом Stateful для быстрого администрирования: закрытие / изменение учетной записи, мониторинг и т. Д.

По остальному вопросу:

Когда мы говорим о сфере JEE (в основном веб-приложение), у вас есть несколько вариантов сохранения состояния клиента: HTTPSession со всей корзиной в памяти или ссылка на корзину и ссылка на ее идентификатор, возможно, в сеансе и туда и обратно из сеанса. в БД для хранения объектов. У выбора того или другого подхода есть свои плюсы и минусы.

Иногда я находил пример того, что компонент с отслеживанием состояния хранится в сеансе http. Мне этот подход показался довольно странным. Честно говоря, я еще не обнаружил, что Stateful хранится в сеансе в производственном выпуске.

person Leonardo    schedule 04.04.2017

Вы используете SFSB, когда данные не обязательно сохраняются. Пользователь просто кладет какие-то вещи в корзину, но никогда не покупает их. В этом случае хранить эти данные в БД - не лучшая идея. Храните действительно необходимые данные, а не мусор в БД. Данные, относящиеся к вещам, которые не покупаются / не обрабатываются в течение заранее определенного периода времени, являются временными, вы должны хранить их временным образом (ограниченная область действия сеанса / ограниченная дата истечения срока действия). Когда пользователь проверяет содержимое своей корзины для покупок, данные приобретают деловой смысл и должны размещаться в БД.

person The Bitman    schedule 12.04.2017