jsf - 在JSF中何处关闭打开的客户端或使用Java垃圾收集?

标签 jsf elasticsearch liferay portlet

我将JSF Portlet与Liferay一起使用。在bean的构造器中,我创建了一些对象以及一些客户端来访问某些服务器。我不知道在刷新页面或重定向任何其他页面时应在哪里解构那些对象或使用垃圾收集器并关闭那些客户端。

感谢您的帮助。

最佳答案

不要使用构造函数。当然,如果您使用的是CDI,则不会。同样可以肯定的是,清理昂贵的资源时不要依赖GC。只需在所需方法上使用 @PostConstruct @PreDestroy 批注。当bean作用域开始和结束时,bean管理框架都将单独显式调用它们。

public class Bean {

    @PostConstruct
    public void init() {
        // ...
    }

    @PreDestroy
    public void destroy() {
        // ...
    }

}

这对JSF和CDI托管Bean均适用。仅在JSF 2.0-2.1中使用@ViewScoped时,并不能保证在所有情况下均会调用@PreDestroy。如果您在Servlet(即非Portlet)环境上使用CDI,则OmniFaces @ViewScoped 解决了JSF 2.0-2.1 @ViewScoped @PreDestroy失败的问题。

关于jsf - 在JSF中何处关闭打开的客户端或使用Java垃圾收集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25543595/

相关文章:

jsf - 创建 session 范围托管 bean 时可序列化接口(interface)的重要性

jsf2 f :selectItem itemLabel complex i18n render

c# - 如何更新Elasticsearch文档中的嵌套对象?

Elasticsearch 水印设置

java - 如何在 Liferay 中获取范围值

java - Liferay : How to get user profilePicURL without ThemeDisplay in serviceImpl classes?

jsf - 如何获取正在调用托管 bean 的 getter 方法的 UIComponent?

jsf - 什么是托管 bean,每页应该使用多少个?

elasticsearch - 在 Elasticsearch 中,如何优先考虑短语中的某些单词

liferay - Liferay 中的 Portlet 导航