@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.