Ответ 1
Забавно, это второй вопрос о SFSB и веб-приложении для дня, в то время как эта тема обычно не так уж и распространена.
и в этом случае использовать их в Интернете приложение?
Традиционным примером SFSB и веб-приложения является корзина для покупок. Но в то же время вы можете сделать то же самое с HttpSession
.
В идеале , если состояние относится к бизнес-логике, а не логике представления, оно должно идти в SFSB. Но на практике люди обычно выступают против SFSB (из-за сложности, которую он вводит), если они не предоставляют что-то, что вы легко можете сделать с помощью HttpSession
. В большинстве случаев вы можете настроить дизайн для хранения информации в HttpSession
или базе данных и передать ее без необходимости использования SFSB. Но это в конечном счете вопрос чистоты дизайна.
И как? Должны ли мы поставить эти состояния beans в сеансе (из-за отсутствия HTTP)?
Модель EJB является более богатой моделью, чем HttpSession
, поскольку EJB - это транзакционные компоненты, и есть явные обратные вызовы для пассивации и активации SFSB. Это связано с повышенной сложностью о том, как правильно использовать SFSB, особенно (1) обработку исключений и (2) concurrency и (2) удаление и тайм-аут SFSB. См. Мои ответы здесь для более подробной информации:
- Java: отслеживание сеанса входа пользователя - сеанс EJBs против HTTPSession
- Правильное использование Stateful beans с сервлетами
Если вы хотите их использовать, вам нужно сначала найти SFSB, чтобы получить ссылку на один новый удаленный экземпляр. Затем вам нужно будет сохранить эту ссылку где-нибудь, чтобы повторно использовать ее в запросах. Обычно это где-то HttpSession
, что означает, что даже если вы используете SFSB, вы не можете полностью избавиться от него.
С EJB2 удаленная ссылка, называемая дескриптором, может быть сериализована для повторного использования позже. Тогда было возможно сохранить, например, в базе данных, хотя я никогда этого не видел. Я не знаю, возможно ли это с помощью EJB3.
Это хорошая практика?
Как я уже сказал, люди обычно советуют против него, если вы точно не знаете, зачем использовать их, а не HttpSession
, и только если у вас хорошая команда модели EJB. (SFSB можно было бы оправдать, например, если бизнес-сервис доступен через веб-интерфейс и настольный клиент). Многие другие фреймворки не имеют ничего похожего на SFSB, и люди все еще могут создавать с ними отличные приложения.
PS: Я использовал SFSB в веб-приложении, и это действительно может быть более сложным в использовании, чем HttpSession
, но в конечном итоге это сработало.