Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

c3p0 trava em getConnection quando há uma falha de rede


Eu encontrei o mesmo problema. No meu caso, foi causado pelo driver JDBC não estar sendo configurado para expirar em falhas de soquete. Fiz as seguintes adições ao meu C3P0 ComboPooledDataSource configuração:
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);
//--------------------------------------------------------------------------------------

...

As propriedades do driver Oracle são aplicadas quando o C3P0 cria a Connection objeto. Essas duas propriedades em particular farão com que uma exceção seja lançada se a conexão do soquete estiver inativa por mais de 30 segundos.

Se você não estiver se conectando a um banco de dados Oracle, existem propriedades semelhantes para outros drivers JDBC de outros fornecedores de banco de dados. Alguns deles são mostrados na parte inferior de esta página .