我如何知道何时取消部署Java EE应用程序?

问题描述 投票:2回答:2

取消部署Java EE应用程序时,我需要关闭一些流,以避免每次取消部署server.log中的异常页面。例外说明:“输入流已完成确定或被强制关闭而未明确关闭”。我知道如何关闭(使用close()方法),但是我不知道何时关闭。

finallize()为时已晚,@ PreDestroy不仅在取消部署之前被调用,而且在正常操作模式下也被调用。取消部署时,应用程序如何知道?

编辑:我在创建过程中称其为:

    decisionLogger = KnowledgeRuntimeLoggerFactory.newThreadedFileLogger(
    ksession, 
    config.getString("rules.logfilename"), 
    config.getInt("rules.loginterval"));

decisionLogger的类型为KnowledgeRuntimeLogger,它仅具有close()方法。在引擎盖下工作的线程没有吸气剂。要轻轻关闭它,我需要调用close方法,但是什么时候?

java deployment jakarta-ee stream
2个回答
2
投票

向记录器或导致问题的任何类添加finalize()方法。从中关闭流。除非您退出System.exit(),否则它将运行。如果正在调用System.exit,则可以使用Runtime.addShutdownHook


3
投票

因为Java EE包含许多具有不同生命周期的技术,所以没有一成不变的答案。

但是我要在黑暗中刺中,建议你看看ServletContextListener。这将告诉您何时停止Web应用程序,这可能是您要释放资源的时间-而不是在应用程序卸载时。

© www.soinside.com 2019 - 2024. All rights reserved.