【问题标题】:@PreDestroy never called on @ViewScoped [duplicate]@PreDestroy 从未调用过@ViewScoped [重复]
【发布时间】:2011-09-16 03:58:12
【问题描述】:

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

有什么可以做错的吗?我必须在任何地方注册任何东西才能使其工作吗?

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

我将 JSF 2 (MyFaces) 与 Tomcat 7.0.12 一起使用。会不会是Tomcat的问题?

更新

@PostConstruct 注释工作正常。

【问题讨论】:

    标签: jsf jsf-2 annotations javabeans


    【解决方案1】:

    这是一个已知问题,不幸的是,如果不让所有导航都通过有问题的视图范围 bean 进行,解决起来并不容易。另见JSF-impl issue 1839。这仅不包括最终用户更改浏览器地址栏中的 URL 或关闭窗口/选项卡的情况。当会话被破坏时,他们的@PreDestroy 也不会被调用。然而,已经发布了对规范的增强请求,以便在会话销毁期间销毁悬空视图:JSF-spec issue 905

    【讨论】:

    • 啊!有什么解决方法吗?简单地覆盖 finalize() 是否合理安全?还是在这种环境下不鼓励这样做?
    • finalize() 不会立即执行。然后就看GC了。它最终可能会积累太多。这是你最好的选择,但我不会依赖它。
    • 有没有办法在会话结束时使 Seam 3 Faces CDI 视图范围的 bean 到期?这种功能的重要方法会是什么样子?我可能应该为此提出另一个问题......
    • @Kawu:我想是的。接缝也超出了我的范围。
    • @Tiny:我澄清了答案。它们将被垃圾回收,但不会调用 @PreDestroy,如果 @PreDestroy 实现正在执行一些资源清理,这可能会导致资源泄漏。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 2013-01-22
    • 2017-03-26
    • 1970-01-01
    • 1970-01-01
    • 2015-05-01
    • 1970-01-01
    相关资源
    最近更新 更多