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)中摘录的内容,