【发布时间】:2015-10-28 15:53:57
【问题描述】:
我的一个会话 bean 有问题,这可能是因为我对 EntityManagers 缺乏了解。我正在使用 JBoss EAP 6.2 和 Oracle。
我有一个用@Singleton 和@Startup 注释的对象(称为Maintainer)。实例化时,会向其中注入一个@Stateless 会话 bean(Repository),它本身是通过 EntityManager 注入的。
@Singleton
@Startup @Stateless @PersistenceContext()
Maintainer ----> Repository ----> EntityManager
在维护者的@PostConstruct 方法中,它创建了一个线程,该线程定期运行以使用存储库从数据库中获取对象。该线程在应用程序的生命周期中存在。检索对象的代码使用如下所示的本机查询:
Query query = entityManager.createNativeQuery(SQL_QUERY_ALL);
query.setParameter(DATE_PARAM_NAME, sinceLastUpdateDate);
List<Object[]> resultList = query.getResultList();
我遇到的问题是,当应用程序失去与数据库的连接时,线程开始抛出“java.sql.SQLRecoverableException: Closed Connection”异常。它不会重新连接,即使在数据库恢复后我必须关闭并重新启动我的应用程序。
我确信连接恢复是内置在底层库中的,所以我猜测问题在于我的代码以及我对 EntityManager 如何管理其与数据库的连接的理解(或缺乏理解)。
任何人都可以澄清这一点。我在做什么有什么问题?
谢谢。
【问题讨论】:
标签: jakarta-ee jboss7.x jboss6.x