Hibernate - 在事务完成时强制清理容器资源

时间:2013-03-04 12:24:10

标签: java hibernate

在执行了几个查询后,我从Hibernate收到以下消息:

HHH000106: Forcing container resource cleanup on transaction completion

一切似乎都运转良好,没有错误,但我没有找到任何有关此消息含义的解释,或者我是否应对此采取任何措施。

我正在使用Hibernate / JPA和JTA全局事务。

有什么想法吗?

3 个答案:

答案 0 :(得分:7)

(完成xwoker的回答。)

我们谈论的资源是:

  • 结果集
  • 声明

出现此消息是因为您将某些资源打开,即您没有调用他们的close()方法。由于当前的ConnectionReleaseMode:这些资源变得无用,Hibernate通知你它正在为你调用close()方法。

要避免此日志:在事务结束之前自己调用close()方法(在ResultSet和Statement(s)上)。

答案 1 :(得分:6)

此消息是在 org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl 中生成的(至少是我发现它使用的唯一地方)并被声明为 INFO

public void afterTransaction() {
    transactionTimeOutInstant = -1;
    if ( connectionReleaseMode() == ConnectionReleaseMode.AFTER_STATEMENT ||
            connectionReleaseMode() == ConnectionReleaseMode.AFTER_TRANSACTION ) {
        if ( hasRegisteredResources() ) {
            LOG.forcingContainerResourceCleanup();
            releaseResources();
        }
        getLogicalConnection().aggressiveRelease();
    }
}

如果使用了某些ConnectionReleaseMode并且有注册资源,Hibernate会通知您,它会释放这些资源。

如果这是所需的行为,请不要对此做任何事情。

答案 2 :(得分:1)

如果Hibernate会话在不同线程(以及不同的事务)之间意外共享,则此日志消息HHH000106: Forcing container resource cleanup on transaction completion也可能由线程安全问题触发。如果是这样,可能会出现Trying to return an unknown connection2!之类的异常,并从连接池中泄漏JDBC连接。

相关问题