在JBoss EAP 6.3.0上@Singleton中没有调用@PreDestroy方法

时间:2017-03-24 08:01:53

标签: java jboss java-ee-6

在我的JavaEE应用程序中,我有一个@Singleton类,其中包含一些@Scheduled方法。此外,还有@PostConstruct@PreDestroy的方法来设置和清理数据库。 (为了简单起见,我只记录了示例,因为它重现了问题。)应用程序必须在JBoss EAP 6.3.0.GA服务器上运行。

虽然@PostConstruct方法工作正常,但是当我关闭服务器时没有调用@PreDestroy(在eclipse中按停止服务器按钮时也没有使用{来自jboss-cli的{1}}命令。这是一些代码,它可以重现问题:

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方法不是清理数据库的适当位置,因此该问题已过时。

1 个答案:

答案 0 :(得分:3)

这不是您问题的答案,这是您在上一条评论中提出的问题的答案。 实际上我无法想到一个合适的地方去做。其他人可能会帮助你解决这个问题。 但无论如何@PostContruct和@PreDestory可能不是交易的一部分,这就是为什么在这些方法中进行数据库操作并不好,

但是为了你的帮助,我附上了我从书中获取的内容(掌握EJB 3.0),

enter image description here