Сессионные компоненты с состоянием (SFSB) не совсем то, что вы думаете.Вы, кажется, думаете, что они ведут себя как-то как бины JSF, управляемые сессионной областью.Это неправда.Термин «сессия» в EJB-компонентах имеет совершенно другое значение, чем HTTP-сессия, которую вы имели в виду.
«Сеанс» в EJB-компонентах должен интерпретироваться в транзакционном контексте.Транзакция (в основном, сеанс БД) живет в случае SFSB до тех пор, пока живет клиент.Клиент SFSB в вашем конкретном примере не веб-браузер, но сам экземпляр управляемого JSF-компонента, именно тот, в который был введен SFSB.Поскольку вы поместили управляемый компонент JSF в область запроса, SFSB будет воссоздан при каждом HTTP-запросе вместе с управляемым компонентом JSF.
В качестве примера попробуйте поместить управляемый компонент JSF в область представления.,Например, область просмотра полезна для многошаговой формы на той же странице.Каждый раз, когда представление выполняет обратную передачу к себе, один и тот же экземпляр управляемого JSF-компонента будет использоваться повторно, и этот экземпляр дает вам доступ к тому же тому же -м экземпляру SFSB, как и при создании компонента, то есть не поделился в другом месте.Транзакция SFSB живет до тех пор, пока живет клиент (управляемый компонент JSF в области представления).
Сессионный компонент без сохранения состояния (SLSB) может совместно использоваться в другом месте, но это не должно иметь значения, так как предполагается, что его обрабатывают как без гражданства в любом случае.Эта «функция» экономит время и память контейнера для их создания и хранения.Контейнер может просто иметь их пул.Более того, экземпляр SLSB, который был внедрен в управляемый компонент JSF вида, сеанса или области приложения, не обязательно должен ссылаться на один и тот же экземпляр в каждом HTTP-запросе, как это было при создании управляемого компонента JSF.Это может быть даже совершенно другой экземпляр, в зависимости от доступных экземпляров в пуле контейнера.Транзакция живет (по умолчанию) столько, сколько один вызов метода на SLSB.
Тем не менее, SFSB не подходит для вашего конкретного случая «запоминания вошедшего в систему пользователя».То, что это «более безопасно», не имеет никакого смысла.Просто поместите управляемый компонент JSF в область действия сеанса и дайте ему самостоятельно запомнить зарегистрированного пользователя и используйте SLSB для выполнения любых бизнес-действий (например, взаимодействия с БД) и используйте SFSB только тогда, когда вы хотите real сессионный компонент с сохранением состояния (я предполагаю, что вы сейчас понимаете, что именно они :)).
См. также: