9

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

HHH000106: Forcing container resource cleanup on transaction completion

一切似乎都运行良好,没有错误,但我没有找到任何关于这条消息的含义的解释,或者我是否应该对此做任何事情。

我将 Hibernate/JPA 与 JTA 全局事务一起使用。

有任何想法吗?

4

3 回答 3

7

(完成xwoker的回答。)

我们谈论的资源是:

  • 结果集
  • 陈述

出现此消息是因为您让其中一些资源处于打开状态,即您没有调用它们的close()方法。由于当前的 ConnectionReleaseMode:这些资源变得无用,Hibernate 会通知您它正在为您调用 close() 方法。

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

于 2013-09-20T12:50:25.437 回答
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();
    }
}

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

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

于 2013-09-19T06:41:51.650 回答
1

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

于 2013-10-17T07:12:56.810 回答