【发布时间】:2010-07-23 07:55:29
【问题描述】:
我需要在取消部署我的 Java EE 应用程序时关闭一些流,以避免每次取消部署时 server.log 中出现异常页面。异常说:“输入流已被最终确定或强制关闭而没有明确关闭”。我知道如何关闭(使用 close() 方法),但我不知道何时关闭。
finallize() 来得太晚了,@PreDestroy 不仅在取消部署之前被调用,而且在正常操作模式下也被调用。应用程序如何知道何时取消部署?
编辑: 我在创建过程中调用它:
decisionLogger = KnowledgeRuntimeLoggerFactory.newThreadedFileLogger(
ksession,
config.getString("rules.logfilename"),
config.getInt("rules.loginterval"));
decisionLogger 是 KnowledgeRuntimeLogger 类型,它只有 close() 方法。在引擎盖下工作的线程没有吸气剂。轻轻关机,需要调用close方法,但是什么时候呢?
【问题讨论】:
-
您能以某种方式连接到您正在使用的应用服务器的取消部署功能吗?我不确定应用程序是否可以知道它是否已取消部署。您还可以尝试在代码中使用流的地方吞下流所引发的异常。
-
我使用 Glassfish 2.1。你怎么能挂接到那里的取消部署功能?吞下异常不是一种选择,因为我无法访问抛出它们的线程。它隐藏在 Drools 实现中。
标签: java deployment jakarta-ee stream