@PreDestroy никогда не вызывал @ViewScoped - PullRequest
15 голосов
/ 16 июня 2011

У меня есть компонент @ViewScoped, у которого есть метод с аннотацией @PreDestroy, который должен гарантировать, что некоторые удаленные соединения закрыты. Однако метод не вызывается, когда пользователь уходит.

Что-то можно сделать неправильно? Нужно ли что-нибудь регистрировать, чтобы это работало?

Это простой публичный метод (void), который не вызывает исключений.

Я использую JSF 2 (MyFaces) с Tomcat 7.0.12. Может ли это быть проблемой с Tomcat?

UPDATE

Аннотация @PostConstruct работает нормально.

1 Ответ

13 голосов
/ 16 июня 2011

Это известная проблема, которая, к сожалению, не тривиальна для решения, не позволяя всей навигации проходить через рассматриваемый компонент вида.См. Также JSF-impl выпуск 1839 .Это не распространяется только на случаи, когда пользователь изменяет URL-адрес в адресной строке браузера или закрывает окно / вкладку.Их @PreDestroy также не будут вызываться, когда сеанс будет уничтожен.Однако был опубликован запрос на усовершенствование спецификации, чтобы заставить висячие представления уничтожать во время уничтожения сессии:

...