Stateful EJB в веб-приложении? - PullRequest
15 голосов
/ 11 мая 2010

Я никогда не использовал stateful EJB. Я понимаю, что EJB с состоянием может быть полезен с Java-клиентом.

Но мне интересно: в каком случае их использовать в веб-приложении? И как? Должны ли мы помещать эти bean-компоненты с состоянием в Session (из-за http без состояния)?

Это хорошая практика? (не обсуждая слишком много о сохранении состояния без сохранения состояния)

1 Ответ

30 голосов
/ 11 мая 2010

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

в этом случае использовать их в сети приложение?

Традиционным примером SFSB и веб-приложения является корзина покупок. Но в то же время вы можете сделать то же самое с HttpSession.

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

А как? Должны ли мы поставить эти состояния бобы в сеансе (из-за отсутствия состояния HTTP)?

Модель EJB является более богатой моделью, чем HttpSession, поскольку EJB являются транзакционными компонентами, и существуют явные обратные вызовы для пассивации и активации SFSB. Это дает повышенную сложность о том, как правильно использовать SFSB, в частности (1) обработку исключений и (2) параллелизм и (2) удаление и тайм-аут SFSB. Смотрите мои ответы здесь для более подробной информации:

Если вы хотите их использовать, вам сначала нужно найти SFSB, чтобы получить ссылку на один свежий удаленный экземпляр. Затем вам нужно будет хранить эту ссылку где-то таким образом, чтобы повторно использовать ее в запросах Это где-то обычно является HttpSession, что означает, что даже если вы используете SFSB, вы не сможете полностью от него избавиться.

В EJB2 удаленная ссылка - называемая handle - может быть сериализована для последующего повторного использования. Тогда было возможно сохранить, например, в базе данных, хотя я никогда не видел это. Я не знаю, возможно ли это с EJB3.

Это хорошая практика?

Как я уже сказал, люди обычно советуют против этого , если вы не знаете точно, почему вы будете их использовать, а не HttpSession, и только если вы хорошо владеете моделью EJB. (SFSB может быть оправдан, например, если бизнес-сервис доступен через веб-интерфейс и настольный клиент). Многие другие платформы не имеют что-то похожее на SFSB, и людям все еще удается создавать великолепные приложения. с ними.

PS: я использовал SFSB в веб-приложении, и он действительно может быть хитрее, чем HttpSession, но в конечном итоге это сработало.

...