We're using hibernate in our web app, connect to IBM Informix DB. From time to time, when DB is down, it took about 30 mins for beginTransction() to throw the exception back. Our code is like this:
Code:
logger.trace("before beginTransaction()");
transaction=session.beginTransaction();
logger.trace("after beginTransaction()");
Object result = command(session);
transaction.commit();
logger.trace( "after commit()");
session.close();
return result;
} catch (Exception e) {
if (e instanceof HibernateException) {
logger.log("DB Runtime Exception thrown from Hibernate Layer", e);
We're using Hibernate 3.2.4, and c3p0 connection pool.
The log stack trace is the following:
Code:
0000000310: 172.27.184.200: Sep 29 2010 10:47:24.889 -0700: %ConfigImplCommand:execute(): {Thrd=pool-8-thread-1} before beginTransaction()
0000000741: 172.27.184.200: Sep 29 2010 11:15:04.773 -0700: %[exception=org.hibernate.exception.GenericJDBCException: Cannot open connection
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:29)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:426)
at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:144)
at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:119)
at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:57)
at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1326)
at com.....ConfigImplCommand.execute(ConfigImplCommand.java:64)
Caused by: java.sql.SQLException: Connections could not be acquired from the underlying database!
at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:106)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:529)
at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128)
at org.hibernate.connection.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:56)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:423)
... 16 more
Caused by: com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source.
at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1319)
at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:557)
at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:477)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:525)
Your kind help will be highly appreciated!