在执行了几个查询之后,我从Hibernate得到了以下消息:
HHH000106: Forcing container resource cleanup on transaction completion一切似乎都很正常,没有任何错误,但我还没有找到任何关于这条消息的含义的解释,或者我是否应该对此做些什么。
我在JTA全局事务中使用Hibernate/JPA。
有什么想法吗?
发布于 2013-09-20 20:50:25
(完成xwoker的回答。)
我们所说的资源是:
出现此消息是因为您保留了其中的一些资源,即您没有调用它们的close()方法。由于当前的ConnectionReleaseMode:这些资源变得无用了,Hibernate会通知您它正在为您调用close()方法。
要避免此日志:只需在事务结束之前调用close()方法(对ResultSet和语句)即可。
发布于 2013-09-19 14:41:52
此消息是在信息中生成的(至少是我发现它被使用的唯一位置),并被声明为 org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl :
public void afterTransaction() {
transactionTimeOutInstant = -1;
if ( connectionReleaseMode() == ConnectionReleaseMode.AFTER_STATEMENT ||
connectionReleaseMode() == ConnectionReleaseMode.AFTER_TRANSACTION ) {
if ( hasRegisteredResources() ) {
LOG.forcingContainerResourceCleanup();
releaseResources();
}
getLogicalConnection().aggressiveRelease();
}
}如果使用了某些ConnectionReleaseModes,并且存在已注册的资源,Hibernate会通知您,它会释放这些资源。
如果这是你想要的行为,那就什么都不要做。
发布于 2013-10-17 15:12:57
如果Hibernate会话在不同的线程(从而不同的事务)之间意外共享,则此日志消息HHH000106: Forcing container resource cleanup on transaction completion也可能由线程安全问题触发。如果是这样的话,它可能会紧跟着一个异常,比如Trying to return an unknown connection2!,并从连接池中泄漏一个JDBC连接。
https://stackoverflow.com/questions/15201547
复制相似问题