Мои 2 cts ...
1 - Существуют ли какие-либо конфигурации DBCP, которые могут исправить блокировку?
Хотя я не могу увидеть это в документе, я думаютакже должен быть атрибут настройки с именем «WhenExaustedAction» в узле ресурса, который может принимать значение «GROW» (значение 2), а не «BLOCK» (значение 1) или «FAIL» (значение 0).Это происходит прямо из бассейнов общего.И Hibernate, и Cayenne используют эту настройку DBCP.Однако не знаю, что такое OpenEJB.
Нет необходимости говорить, что это сработает, если, конечно, все соединения должным образом закрыты (что иногда трудно гарантировать).Тогда вы, вероятно, могли бы видеть через JMX, сколько соединений вам нужно в пиковое время активности, и затем вы могли бы установить для maxActive более высокое значение, полученное в результате этих мер.
2 - Заменяется ли реализация пула соединений DBCP вOpenEJB?Насколько легко (сложно) заменить его другой библиотекой?
Извините, не знаю.Вообразил бы да.Или, возможно, DBCP разрешает другой диспетчер пула соединений.
ОБНОВЛЕНИЕ: только что посмотрел код, и кажется, что DBCP - единственный вариант для пула соединений.
Между прочим, я видел, что whenExhaustedActionнастройки.openejb.xml не поддерживается.
Однако остается один вариант, поскольку вы используете базу данных Oracle.
Можно попробовать использовать кэширование неявных соединений Oracle (предполагается, что версия 10g) иоставьте DBCP с произвольным «достаточным» количеством соединений.Для этого вам потребуется настроить в блоке ресурсов openejb.xml свойства ConnectionProperties
и использовать свойства соединения Oracle JDBC.Это connectionCachingEnabled=true
и, по крайней мере, connectionCacheName
и connectionCacheProperties
.Таким образом, я бы убедил DBCP поверить в то, что он выполняет реальную работу и фактически использует механизм пула Oracle.Это также означало бы принятие минимального риска с использованием DBCP и, следовательно, более либеральную настройку параметра maxActive.