EJB3 + JSF2; Безгражданство как государство - PullRequest
1 голос
/ 28 августа 2010

У меня есть сессионный компонент без сохранения состояния в контейнере ejb. Если я вызываю его из формы jsf2, он работает нормально, но если я снова вызываю форму, она показывает те же данные, которые я вставил ранее. Это происходит, даже если я закрою и снова открою браузер. Я должен подождать несколько минут, пока в форме не появятся пустые поля. Сессионный компонент без сохранения состояния не воссоздается для каждого запроса. Он ведет себя как государство. Что не так?

Сервер приложений: Glassfish 3.0.1

Ответы [ 2 ]

2 голосов
/ 29 августа 2010

Моя первоначальная проблема была: EJB3 + Struts2. Struts создает новый сессионный компонент для каждого запроса, даже если он имеет состояние.

Struts ничего не делает сам по себе, он делает только то, что вы ему скажете. И я подозреваю, что вы просто неправильно используете вещи. Может помочь показ кода для иллюстрации проблемы.

Теперь я обнаружил, что JSF2 повторно использует один и тот же сессионный компонент для каждого запроса, даже если он не имеет состояния.

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

Возвращаясь к вашему вопросу, я подозреваю, что вы неправильно используете SLSB и ожидаете, что это неправда:

  • Не ожидайте получения недавно инициализированных экземпляров между вызовами, это не то, что означает отсутствие состояния.
    • На самом деле, не ожидайте ничего об экземпляре, который вы получите.
  • Не полагайтесь на состояние экземпляра SLSB (они не имеют состояния, вы не должны полагаться на состояние).
    • Не полагайтесь на переменную экземпляра между удаленными вызовами.
    • На самом деле, избегайте использования переменных экземпляра, вероятно, в них нет необходимости.

Похожие вопросы

0 голосов
/ 28 августа 2010

Сессионный компонент без сохранения состояния не является воссоздается для каждого запроса.

это неверный термин. для каждого запроса нет гарантии создания нового экземпляра bean-компонента без сохранения состояния.

контейнер будет объединять некоторые экземпляры bean-компонента без сохранения состояния по соображениям производительности.

количество объединенных экземпляров зависит от конфигурации контейнера.

...