簡體   English   中英

我如何知道何時取消部署 Java EE 應用程序?

[英]How do I know when a Java EE app is undeployed?

我需要在取消部署 Java EE 應用程序時關閉一些流,以避免每次取消部署時 server.log 中出現異常頁面。 異常說:“輸入流已被最終確定或強制關閉而沒有被明確關閉”。 我知道如何關閉(使用 close() 方法),但我不知道何時關閉。

finallize() 來得太晚了,@PreDestroy 不僅在取消部署之前被調用,而且在正常操作模式下也被調用。 應用程序如何知道何時取消部署?

編輯:我在創建過程中稱之為:

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

DecisionLogger 屬於 KnowledgeRuntimeLogger 類型,它只有 close() 方法。 在引擎蓋下工作的線程沒有吸氣劑。 要輕輕關閉它,我需要調用 close 方法,但是什么時候?

沒有一成不變的答案,因為 Java EE 包含許多具有不同生命周期的技術。

但是我將在黑暗中進行嘗試並建議您查看ServletContextListener 這將告訴您 Web 應用程序何時停止,這可能是您想要釋放資源的時間 - 而不是應用程序卸載時。

將 finalize() 方法添加到記錄器或導致問題的任何類。 關閉流。 除非您使用 System.exit() 退出,否則它將運行。 如果 System.exit 被調用,你可以使用 Runtime.addShutdownHook

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM