elasticsearch,liferay,portlet,Jsf,elasticsearch,Liferay,Portlet" /> elasticsearch,liferay,portlet,Jsf,elasticsearch,Liferay,Portlet" />

在JSF中,在哪里关闭打开的客户端或使用java垃圾收集?

在JSF中,在哪里关闭打开的客户端或使用java垃圾收集?,jsf,elasticsearch,liferay,portlet,Jsf,elasticsearch,Liferay,Portlet,我将JSF portlet与Liferay一起使用。在bean的构造函数中,我创建了一些对象和一些客户端来访问一些服务器。我不知道在刷新页面或重定向任何其他页面时,应该在何处解构这些对象或使用垃圾收集器并关闭这些客户端 谢谢你的帮助。不要使用构造函数。如果您使用的是CDI,则肯定不会。当然,在清理昂贵的资源时,不要依赖GC。只需在所需的方法上使用注释和注释。当bean范围开始和结束时,bean管理框架将自己显式地调用它们 public class Bean { @PostConstru

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


谢谢你的帮助。

不要使用构造函数。如果您使用的是CDI,则肯定不会。当然,在清理昂贵的资源时,不要依赖GC。只需在所需的方法上使用注释和注释。当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,则解决了JSF 2.0-2.1
@ViewScoped
@PreDestroy
失败的问题。

谢谢您的建议。