2010-10-14 1 views
3

Я использую oracle.jdbc.pool.OracleDataSource для объединения пулов. Я хотел бы, чтобы пул проверял, не было ли соединение закрыто должным образом и чтобы его догнать. Я попытался следующие:Настройка пула Свойство на oracle.jdbc.pool.OracleDataSource

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); 

Я ckeck активных соединений, как это:

occm = OracleConnectionCacheManager.getConnectionCacheManagerInstance(); 
occm.getNumberOfActiveConnections(CACHE_NAME); 

Если я не закрывает соединение в приложении пул только заполнение до 6, так

cacheProps.setProperty("AbandonedConnectionTimeout", "2"); 

не работает. Зачем?

Любой намек был бы оценен

ответ

5

По Oracle's tutorial есть еще одно свойство участвует.

При создании кеша установлены три важных свойства: PropertyCheckInterval, AbandonedConnectionTimeout и LowerThresholdLimit. PropertyCheckInterval задает интервал времени, в течение которого менеджер кэша проверяет и применяет все указанные свойства кеша.

Попробуйте также установить

cacheProps.setProperty("PropertyCheckInterval", "1"); 

по умолчанию 15 минут ...

две секунды, вероятно, немного коротким для соединения быть считается прекращенным, хотя, и так как у вас есть чтобы явным образом установить интервал проверки, я бы предположил, что это связано с некоторыми накладными расходами. Поскольку вы действительно действительно хотите правильно закрыть соединения в коде приложения и полагаться только на это в очень редких случаях, вы должны, вероятно, установить более высокие значения для обоих.

+0

Большое спасибо ... –