首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate -在事务完成时强制容器资源清理

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

Stack Overflow用户
提问于 2013-03-04 20:24:10
回答 3查看 4.5K关注 0票数 9

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

代码语言:javascript
复制
HHH000106: Forcing container resource cleanup on transaction completion

一切似乎都很正常,没有任何错误,但我还没有找到任何关于这条消息的含义的解释,或者我是否应该对此做些什么。

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

有什么想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-20 20:50:25

(完成xwoker的回答。)

我们所说的资源是:

  • ResultSet
  • Statement

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

要避免此日志:只需在事务结束之前调用close()方法(对ResultSet和语句)即可。

票数 7
EN

Stack Overflow用户

发布于 2013-09-19 14:41:52

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

代码语言:javascript
复制
public void afterTransaction() {
    transactionTimeOutInstant = -1;
    if ( connectionReleaseMode() == ConnectionReleaseMode.AFTER_STATEMENT ||
            connectionReleaseMode() == ConnectionReleaseMode.AFTER_TRANSACTION ) {
        if ( hasRegisteredResources() ) {
            LOG.forcingContainerResourceCleanup();
            releaseResources();
        }
        getLogicalConnection().aggressiveRelease();
    }
}

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

如果这是你想要的行为,那就什么都不要做。

票数 6
EN

Stack Overflow用户

发布于 2013-10-17 15:12:57

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15201547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档