Stateful EJBs в веб-приложении?

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

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

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

1 ответ

Решение

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам