@PreDestroy никогда не вызывал @ViewScoped
У меня есть @ViewScoped
bean, который имеет метод с аннотацией @PreDestroy
, который должен убедиться, что некоторые удаленные соединения закрыты. Однако этот метод не вызывается, когда пользователь перемещается.
Есть ли что-то, что можно сделать неправильно? Должен ли я регистрировать что угодно, чтобы заставить его работать?
Это простой общедоступный метод (void
), который не вызывает исключения.
Я использую JSF 2 (MyFaces) с Tomcat 7.0.12. Это может быть проблема с Tomcat?
UPDATE
Аннотация @PostConstruct
отлично работает.
Ответы
Ответ 1
Это известная проблема и, к сожалению, не тривиально решить, не допуская, чтобы вся навигация проходила через рассматриваемый вид bean. См. Также JSF-impl issue 1839. Это не распространяется только на случаи, когда конечный пользователь меняет URL-адрес в адресной строке браузера или закрывает окно/вкладку. Их @PreDestroy
также не будет вызываться, когда сеанс будет уничтожен. Тем не менее, запрос на усовершенствование спецификации был отправлен для того, чтобы все зависающие виды уничтожать во время сеанса: JSF-спецификация вопроса 905.