2016-08-05 2 views
1

Что касается использования сессионных EJB, то то, что я видел до сих пор в «приложениях реального мира» (если я правильно помню), является сессией без учета состояния EJB, используемой в качестве «фасадов» для транзакций (через CMT) методы бизнес-логики. Тем не менее, я не видел сессионных EJB. Действительно, кажется, что их использование как «корзины покупок», например, найденное в Java EE, означает, что их состояние должно каким-то образом храниться в постоянном хранилище. Но это, по-видимому, предполагает, что и другие части домена приложения, моделируемые в базе данных, должны быть сопоставлены с EJB-состояниями, которые кажутся чрезмерно сложными.Случаи использования в реальном времени для сеанса с состоянием EJB

Итак, не могли бы вы привести конкретные примеры, основанные на вашем опыте/опыте, о том, как используются EJB с использованием состояния в современных приложениях (в отличие от 2003 г.)?

ответ

2

Stateful EJB может сохранять свое состояние в базе данных, но Stateful EJB не обязательно должен сохранять свое состояние в базе данных. Stateful EJB обязан хранить и запоминать в памяти диалоговое состояние с клиентом только на время «разговора».

Ниже приведены некоторые примеры реальных ситуаций, которые были определены в некоторых случаях, пригодных для использования в режиме Stateful EJB в соответствии с Java EE 7 Tutorial: Готовность сессионных бобров является подходящей, если выполнено одно из следующих условий.

  • Состояние боба представляет собой взаимодействие между компонентом и конкретным клиентом. Реальный мир Пример: Усиленная реализация EJB онлайн-транзакции с логином, действием, выходом из системы.

  • Бобу необходимо хранить информацию о клиенте по вызовам метода. Реальный мир Пример: Stateful EJB можно использовать для реализации карты покупок. Данные могут быть сохранены или нет, например, для eshop, для которой не требуется логин, карта покупок может быть отброшена, если пользователь окончательно не проверит собранные предметы.

  • Боб посредничает между клиентом и другими компонентами приложения, представляя упрощенное представление клиенту. Stateful EJB может использоваться для реализации абстракции настойчивости.

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

Приведенные выше примеры демонстрируют применимость концепции в некоторых примерах. Фактически использование Stateful EJB в реальной среде в настоящее время приведет к более четкому дизайну, но не будет оптимальным, если учитывать эффективность и сложность. См. Также Stateful EJBs in web application?.

+1

Я попытался продемонстрировать применимость EYB Stateful в наборе подходящих случаев для Stateful EJB. Я использовал учебник EE в качестве справочника для подходящих случаев и предоставил упрощенные примеры, основанные на личном опыте. Ваше разъяснение показывает, что вам больше интересно узнать, действительно ли концепция действительно полезна в реальной практике. Я бы сказал, что на самом деле EJB с государственным статусом, как правило, избегают, и ESI-бланки без гражданства предпочтительнее для лучшей производительности и простоты. Другие думают так. http://stackoverflow.com/questions/2811312/stateful-ejbs-in-web-application?rq=1 –

1

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

Этот EJB используется для предоставления больших объемов данных клиентам путем деления этих данных на куски и отправки этих кусков по требованию.Все это работает следующим образом:

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

Была ли фанатичная фаза необходимостью в решении такой проблемы? Не за что.

Описанная функциональность может быть достигнута с помощью компонента без статусов. Но в этом случае у нас есть только два способа его реализации. Либо мы вынуждены составлять результирующие наборы для запросов каждый раз, когда клиенту нужен следующий фрагмент данных (поскольку у нас нет какого-либо состояния), либо мы используем статическое хранилище, а также заботимся о безопасности и одновременном доступе самостоятельно. /Под защитой здесь я имею в виду предотвращение ситуаций, когда один клиент может получить доступ к результирующему набору другого, используя свой дескриптор/

Первый способ - это просто медленнее и менее эффективно по сравнению с реализацией на компонентах Stateful beans. Второй способ более сложный и менее стабильный под нагрузкой из-за синхронизации.

С помощью компонента stateful bean мы просто получаем то, что нам нужно, эффективно и без особых усилий.

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