【问题标题】:JBossEAP 6.2 EntityManager and connection recoveryJBoss EAP 6.2 EntityManager 和连接恢复
【发布时间】: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


【解决方案1】:

也许为时已晚,但为了记录,您可以像这样在数据源上添加匹配验证:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多