A colocar propriedades em comum na oracle.jdbc.piscina.OracleDataSource
Eu uso o oráculo.jdbc.piscina.OracleDataSource for connection pooling. Gostaria que a piscina verificasse se a ligação não estava devidamente fechada e a pusesse em dia. Tentei o seguinte:
ods = new OracleDataSource();
ods.setConnectionCachingEnabled(true);
ods.setConnectionCacheName(CACHE_NAME);
Properties cacheProps = new Properties();
cacheProps.setProperty("MinLimit", Integer.toString(1));
cacheProps.setProperty("MaxLimit", Integer.toString(6));
cacheProps.setProperty("InitialLimit", "1");
cacheProps.setProperty("AbandonedConnectionTimeout", "2");
ods.setConnectionCacheProperties(cacheProps);
Eu verifico as ligações activas assim:
occm = OracleConnectionCacheManager.getConnectionCacheManagerInstance();
occm.getNumberOfActiveConnections(CACHE_NAME);
Se Eu não fechar a ligação na aplicação a piscina está a encher até 6, por isso
cacheProps.setProperty("AbandonedConnectionTimeout", "2");
não está a funcionar. Por quê?
qualquer dica seria apreciada
3
Author: ROMANIA_engineer, 2010-10-14
1 answers
De acordo com o tutorial do Oráculo há outra propriedade envolvida.
Quando o cache é criado, três propriedades importantes, a PropertyCheckInterval, AbandonedConnectionTimeout e LowerThresholdLimit são definidas. PropertyCheckInterval define o intervalo de tempo em que o Gerenciador de cache inspecciona e executa todas as propriedades de cache especificadas.
Tente também definir
cacheProps.setProperty("PropertyCheckInterval", "1");
O valor por omissão é de 15 minutos...
Dois segundos é provavelmente um pouco diminutivo de uma ligação ser considerada abandonada, no entanto, e uma vez que você tem que definir explicitamente o intervalo de verificação também, eu imagino que isso envolve algumas despesas gerais. Uma vez que você realmente, realmente quer fechar conexões corretamente no código de aplicação e só contar com isso para casos muito raros, você provavelmente deve definir valores mais elevados para ambos. 5
Author: Thilo, 2010-10-14 09:14:49