@PreDestroy never called on @ViewScoped

geeehhdaa picture geeehhdaa · Jun 16, 2011 · Viewed 8.9k times · Source

I have a @ViewScoped bean that has a method with an @PreDestroy annotation that should make sure some remote connections are closed. However, the method is not called when the user navigates away.

Is there anything one can do wrong? Do I have to register anything anywhere in order to make it work?

It's a simple public method (void) that throws no exception.

I'm using JSF 2 (MyFaces) with Tomcat 7.0.12. Could it be a problem with Tomcat?

UPDATE

The @PostConstruct annotation works fine.

Answer

BalusC picture BalusC · Jun 16, 2011

This is a known issue and unfortunately not trivial to solve without letting all the navigation take place through the view scoped bean in question. See also JSF-impl issue 1839. This does only not cover cases where the enduser changes the URL in browser address bar or closes the window/tab. Their @PreDestroy will also not be called when the session get destroyed. An enhancement request for the specification has however been posted to get the dangling views to destroy during session destroy anyway: JSF-spec issue 905.