Encontré el mismo problema. En mi caso, fue causado por el controlador JDBC que no estaba configurado para el tiempo de espera en fallas de socket. Hice las siguientes adiciones a mi C3P0 ComboPooledDataSource
configuración:
cpds = new ComboPooledDataSource();
...
//--------------------------------------------------------------------------------------
// NOTE: Once you decide to use cpds.setProperties() to set some connection properties,
// all properties must be set, including user/password, otherwise an exception
// will be thrown
Properties prop = new Properties();
prop.setProperty("oracle.net.CONNECT_TIMEOUT",
Integer.toString(JDBC_CONNECTION_TIMEOUT_IN_MILLISECONDS));
prop.setProperty("oracle.jdbc.ReadTimeout",
Integer.toString(JDBC_SOCKET_TIMEOUT_IN_MILLISECONDS));
prop.setProperty("user", username);
prop.setProperty("password", password);
cpds.setProperties(prop);
//--------------------------------------------------------------------------------------
...
Las propiedades del controlador de Oracle se aplican cuando C3P0 crea la Connection
objeto. Estas dos propiedades en particular harán que se genere una excepción si la conexión del socket está inactiva durante más de 30 segundos.
Si no se está conectando a una base de datos Oracle, existen propiedades similares para otros controladores JDBC para otros proveedores de bases de datos. Algunos de ellos se muestran cerca de la parte inferior de esta página .