Значение памяти OmniFaces ViewScoped bean?
Из того, что я понимаю, ViewScoped beans уничтожается только при выполнении одного из следующих действий:
1) JSF отправляет запрос POST на другую страницу с чем-то вроде <h:commandLink...>
2) Количество открытых beans превышает максимальную настройку порога (по умолчанию 15)
3) Пользовательский сеанс истекает
Вот моя путаница:
Значит ли №1, что если пользователь переходит от страницы с запросом GET, bean останется открытым, даже если, в конце концов, POST JSF происходит на той же вкладке браузера на другой странице? Или все активные экземпляры @ViewScoped для этой вкладки браузера будут уничтожены после отправки отправления JSF независимо от того, на какой странице он находится?
Значит ли # 2, что пользователь может иметь 15 bean экземпляров, активных для каждого класса @ViewScoped? Или это 15 bean экземпляров, независимо от класса, то есть я мог бы иметь 5 экземпляров Class1, 5 экземпляров Class2 и 5 экземпляров Class3, а новый bean уничтожит самый старый активный bean?
Для # 3, если для STATE_SAVING_METHOD установлено значение "клиент", будут ли какие-либо последствия уничтожены в ViewScoped beans? Из того, что я помню, должен быть способ ручного управления истечением сеанса, если для STATE_SAVING_METHOD установлен клиент.
Наконец, существует ли способ управлять активным ViewScoped beans, чтобы они могли быть уничтожены, когда пользователь нажимает "logout", например?
Ответы
Ответ 1
Я понял ответы на них, добавив метод @PreDestroy для каждого @ViewScoped bean и выполнив регистрацию, когда он будет уничтожен. Для других, которым может быть интересно:
Для # 1, bean не будет уничтожен, если вы перейдете от страницы с запросом GET, но затем отправьте запрос на отправку позднее. То, что bean будет оставаться в памяти до тех пор, пока не будет достигнута установка "максимальные активные области обзора", и она не будет уничтожена, либо сеанс недействителен.
Для # 2 класс не имеет значения. Вы можете иметь 5 экземпляров Class1, 5 экземпляров Class2 и 5 экземпляров Class3, а новый экземпляр ViewScoped bean уничтожит самый старый bean, если ваш порог равен 15.
Для # 3, похоже, что beans уничтожаются после того, как сеанс был аннулирован, даже если для STATE_SAVING_METHOD установлен клиент.