Jsf @PreDestroy从未调用@ViewScope

Jsf @PreDestroy从未调用@ViewScope,jsf,jsf-2,annotations,javabeans,Jsf,Jsf 2,Annotations,Javabeans,我有一个@ViewScopedbean,它有一个带有@PreDestroy注释的方法,可以确保关闭一些远程连接。但是,当用户导航离开时,不会调用该方法 有什么可以做错事吗?我需要在任何地方注册任何东西才能让它工作吗 它是一个简单的公共方法(void),不会引发异常 我将JSF2(MyFaces)与Tomcat7.0.12一起使用。这可能是Tomcat的问题吗 更新 @PostConstruct注释工作正常。这是一个已知的问题,不幸的是,如果不让所有导航都通过所讨论的视图范围bean进行,就很难解

我有一个
@ViewScoped
bean,它有一个带有
@PreDestroy
注释的方法,可以确保关闭一些远程连接。但是,当用户导航离开时,不会调用该方法

有什么可以做错事吗?我需要在任何地方注册任何东西才能让它工作吗

它是一个简单的公共方法(
void
),不会引发异常

我将JSF2(MyFaces)与Tomcat7.0.12一起使用。这可能是Tomcat的问题吗

更新


@PostConstruct
注释工作正常。

这是一个已知的问题,不幸的是,如果不让所有导航都通过所讨论的视图范围bean进行,就很难解决。另见。这不包括最终用户更改浏览器地址栏中的URL或关闭窗口/选项卡的情况。当会话被销毁时,也不会调用它们的
@PreDestroy
。不过,已经发布了规范的增强请求,以便在会话销毁期间销毁悬空视图:。

Ah!有什么解决办法吗?简单地重写finalize()是否合理安全?或者在这种环境中不鼓励这样做?finalize()不会立即执行。那就看总指挥了。它最终可能会积累太多。这是您的最佳选择,但我不会依赖它。是否有办法在会话结束时终止Seam 3 Faces CDI view作用域bean?对于这样的功能,一个非平凡的方法会是什么样子?我可能应该为此提出另一个问题…@卡武:我想是的。Seam也超出了我的理解范围。@Tiny:我澄清了答案。它们将被垃圾收集,但不会调用
@PreDestroy
,如果
@PreDestroy
实现正在进行一些资源清理,这可能会导致资源泄漏。