Java Hibernate如何检测连接是否已在Hibernate之外关闭
Im使用Hibernate 4.3.11和H2 1.4.199 为了防止偶尔的会议被卡住,我设置了Java Hibernate如何检测连接是否已在Hibernate之外关闭,java,hibernate,h2,c3p0,Java,Hibernate,H2,C3p0,Im使用Hibernate 4.3.11和H2 1.4.199 为了防止偶尔的会议被卡住,我设置了 config.setProperty("hibernate.c3p0.debugUnreturnedConnectionStackTraces", "true"); config.setProperty("hibernate.c3p0.unreturnedConnectionTimeout","1500"); 这会导致c3p0在该时间段后释放连接 java.lang.Exc
config.setProperty("hibernate.c3p0.debugUnreturnedConnectionStackTraces", "true");
config.setProperty("hibernate.c3p0.unreturnedConnectionTimeout","1500");
这会导致c3p0在该时间段后释放连接
java.lang.Exception: DEBUG STACK TRACE: Overdue resource check-out stack trace.
at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:555)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutAndMarkConnectionInUse(C3P0PooledConnectionPool.java:755)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:682)
at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:140)
at org.hibernate.c3p0.internal.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:90)
at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:380)
at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:228)
at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:171)
at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:67)
at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactionImpl.java:162)
at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1471)
at com.jthink.songlayer.hibernate.HibernateUtil.beginTransaction(HibernateUtil.java:209)
at com.jthink.songkong.analyse.analyser.MusicBrainzSongGroupMatcher.call(MusicBrainzSongGroupMatcher.java:469)
at com.jthink.songkong.analyse.analyser.MusicBrainzSongGroupMatcher1.call(MusicBrainzSongGroupMatcher1.java:84)
at com.jthink.songkong.analyse.analyser.MusicBrainzSongGroupMatcher1.call(MusicBrainzSongGroupMatcher1.java:37)
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
问题是,当我的代码使用现在无效的连接时,HIbernate似乎不知道它已被取消
org.h2.jdbc.JdbcSQLNonTransientException: The object is already closed [90007-199]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:502)
at org.h2.message.DbException.getJdbcSQLException(DbException.java:427)
at org.h2.message.DbException.get(DbException.java:205)
at org.h2.message.DbException.get(DbException.java:181)
at org.h2.message.DbException.get(DbException.java:170)
at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1568)
at org.h2.jdbc.JdbcConnection.checkClosedForWrite(JdbcConnection.java:1557)
at org.h2.jdbc.JdbcConnection.rollback(JdbcConnection.java:561)
at com.mchange.v2.c3p0.impl.NewProxyConnection.rollback(NewProxyConnection.java:860)
at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doRollback(JdbcTransaction.java:163)
at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.rollback(AbstractTransactionImpl.java:211)
at com.jthink.songkong.util.SessionUtil.rollback(SessionUtil.java:25)
at com.jthink.songkong.analyse.analyser.RecordingOnlyMatcher.matchRecordingsOnlyByAcoustid(RecordingOnlyMatcher.java:452)
at com.jthink.songkong.analyse.analyser.AbstractMusicBrainzGroupMatcher.matchSongs(AbstractMusicBrainzGroupMatcher.java:138)
at com.jthink.songkong.analyse.analyser.MusicBrainzSongGroupMatcher1.doTask(MusicBrainzSongGroupMatcher1.java:418)
at com.jthink.songkong.analyse.analyser.MusicBrainzSongGroupMatcher.call(MusicBrainzSongGroupMatcher.java:470)
at com.jthink.songkong.analyse.analyser.MusicBrainzSongGroupMatcher1.call(MusicBrainzSongGroupMatcher1.java:84)
at com.jthink.songkong.analyse.analyser.MusicBrainzSongGroupMatcher1.call(MusicBrainzSongGroupMatcher1.java:37)
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
即使在我的代码中,我确实检查了我的会话是否打开,txn激活了ectera
public static void rollback(Session session)
{
try
{
if (session!=null && session.isOpen() && session.getTransaction() != null && !session.getTransaction().wasRolledBack())
{
session.getTransaction().rollback();
}
}
catch(HibernateException he)
{
//Hide erorr cause can occur after timeout txn
MainWindow.logger.log(Level.SEVERE, he.getMessage(), he);
}
}
这些似乎并不能阻止回滚()被调用然后失败,我在会话中也有类似的问题。close()尝试在youpr配置中添加这个适当的属性
hibernate.c3p0.min\u size
,hibernate.c3p0.min\u size
,hibernate.c3p0.timeout
,hibernate.c3p0.min_语句
@vincenzopalazzo这有什么关系?