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

Я никогда не использовал EJB с сохранением состояния. Я понимаю, что полноценный EJB может быть полезен с java-клиентом.

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

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

Ответы

Ответ 1

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

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

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

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

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

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

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

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

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

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

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