JBossEAP 6.2 EntityManager和连接恢复

时间:2015-10-28 15:53:57

标签: java-ee jboss7.x jboss6.x

我的一个会话bean出了问题,可能是因为我对EntityManagers缺乏了解。我正在使用JBoss EAP 6.2和Oracle。

我有一个对象(称之为Maintainer),注释为@Singleton和@Startup。实例化时,会向其中注入一个@Stateless会话bean(Repository),它本身会注入一个EntityManager。

@Singleton
@Startup         @Stateless       @PersistenceContext()
Maintainer ----> Repository ----> EntityManager

在Maintainer的@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如何管理其与数据库的连接的理解(或缺乏)。

任何人都可以清楚这一点。我正在做什么出了什么问题?

感谢。

1 个答案:

答案 0 :(得分:0)

也许为时已晚,但为了记录,您可以在数据源上添加匹配验证,如下所示:

  <validation>
     <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker"/>
     <validate-on-match>true</validate-on-match>
  </validation>