JBoss EAP 6.3.0 上的@Singleton 中未调用@PreDestroy 方法
@PreDestroy method not called in @Singleton on JBoss EAP 6.3.0
在我的 JavaEE 应用程序中,我有一个 @Singleton
class 包含一些 @Scheduled
方法。此外,还有 @PostConstruct
和 @PreDestroy
的方法来设置和清理数据库。 (为了简单起见,我只登录了示例,因为这会重现问题。)应用程序必须 运行 在 JBoss EAP 6.3.0.GA 服务器上。
虽然 @PostConstruct
方法工作正常,但当我关闭服务器时 @PreDestroy
没有被调用(在 eclipse 中按下 停止服务器 按钮时也没有使用 jboss-cli 中的 shutdown
命令时也不例外)。这是一些重现问题的代码:
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Singleton
@Startup
public class TimerBean {
private static final Logger log = LoggerFactory.getLogger(TimerBean.class);
@PostConstruct
private void postConstruct() {
log.info("PostConstruct called");
}
@PreDestroy
private void preDestroy() {
log.info("PreDestroy called");
}
}
在服务器启动期间,@PostConstruct
消息出现在日志中。但是关闭服务器时,没有出现日志信息。
如何让服务器调用 @PreDestroy
方法?
编辑:由于@PreDestroy
方法不是清理数据库的合适位置,这个问题已经过时了。
这不是您问题的答案,这是您在上一条评论中提出的问题的答案。
实际上我想不出一个合适的地方去做 it.someone 否则可能会帮助你弄明白。
但无论如何 @PostContruct 和 @PreDestory 可能不是事务的一部分,这就是为什么在这些方法中进行数据库操作是不好的,
但为了您的帮助,我附上了我从一本书(掌握 EJB 3.0)中摘录的内容,
在我的 JavaEE 应用程序中,我有一个 @Singleton
class 包含一些 @Scheduled
方法。此外,还有 @PostConstruct
和 @PreDestroy
的方法来设置和清理数据库。 (为了简单起见,我只登录了示例,因为这会重现问题。)应用程序必须 运行 在 JBoss EAP 6.3.0.GA 服务器上。
虽然 @PostConstruct
方法工作正常,但当我关闭服务器时 @PreDestroy
没有被调用(在 eclipse 中按下 停止服务器 按钮时也没有使用 jboss-cli 中的 shutdown
命令时也不例外)。这是一些重现问题的代码:
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Singleton
@Startup
public class TimerBean {
private static final Logger log = LoggerFactory.getLogger(TimerBean.class);
@PostConstruct
private void postConstruct() {
log.info("PostConstruct called");
}
@PreDestroy
private void preDestroy() {
log.info("PreDestroy called");
}
}
在服务器启动期间,@PostConstruct
消息出现在日志中。但是关闭服务器时,没有出现日志信息。
如何让服务器调用 @PreDestroy
方法?
编辑:由于@PreDestroy
方法不是清理数据库的合适位置,这个问题已经过时了。
这不是您问题的答案,这是您在上一条评论中提出的问题的答案。 实际上我想不出一个合适的地方去做 it.someone 否则可能会帮助你弄明白。 但无论如何 @PostContruct 和 @PreDestory 可能不是事务的一部分,这就是为什么在这些方法中进行数据库操作是不好的,
但为了您的帮助,我附上了我从一本书(掌握 EJB 3.0)中摘录的内容,