2009-10-15 2 views
3

У меня есть веб-приложение Java, подключающееся к базе данных Oracle, работающей на другой машине (не уверен, что это актуально или нет). Я использую DBCP для объединения пулов. Веб-приложение работает в JBoss 4.2.2, и мы определяем наш источник данных как компонент весной.Превышение максимального времени ожидания в веб-приложении Java с помощью Oracle DB

Мы используем Hibernate для ORM.

Иногда мы получаем ошибки: «ORA-02396: превышено максимальное время простоя, пожалуйста, подключитесь снова».

Я попытался добавить свойства к нашему базовому источнику данных DBCP с именем «removeAbandoned» (true) и «removeAbandondedTimeout» (120) безрезультатно.

Любая помощь будет оценена по достоинству. Если мне нужно предоставить дополнительную информацию, сообщите мне об этом - я не так хорошо осведомлен о внутренней работе пула соединений и т. Д.

ответ

7

Попробуйте установить свойство testWhileIdle на true при настройке вашего источника данных. Вам также понадобится тестовый запрос - для Oracle достаточно чего-то вроде select 1 from dual.

Это приведет к тому, что dbcp будет подталкивать любые простаивающие соединения, чтобы они были свежими.

Вы также можете рассмотреть вопрос о выводе соединений, которые простаивают, если вы не возражаете воссоздать их, как только они понадобятся позже. Посмотрите на documentation, где описаны параметры конфигурации для minEvictableIdleTimeMillis, timeBetweenEvictionRunsMillis и maxIdle/minIdle объектов.

0

Посмотрите эту тему на spring forums.

Пользователям либо в конечном итоге переход на C3P0 или добавления testWhileIdle свойство конфигурации пружинной:

<prop key="hibernate.dbcp.testWhileIdle">true</prop> 

<prop key="hibernate.dbcp.validationQuery"> 
select 1 from dual 
</prop> 
+1

Может быть стоит отметить, на плакатах весной форуме - это потенциально небезопасными запрос проверки. Вы не хотите запускать это, если в abc есть много строк. – serg10

0

Я хотел бы перейти в библиотеку пула соединений Oracle Universal. Он оптимизирован для Oracle JDBC Connections, но также будет работать с любым драйвером JDBC, если вы когда-нибудь переключитесь. Он также совместим с JDBC 4.0 и на самом деле работает. C3P0, Proxool, DBCP все застыли. Он будет проверять ваше соединение, выполняя пинг для Oracle, а не запрос, который намного быстрее.

Oracle UCP

+0

Доступна ли UCP для 10g? – Rintoul

+0

Yup it работает для любой базы данных, которая имеет действительную реализацию драйвера JDBC. Просто некоторые специальные трюки, которые он использует, если вы используете драйвер Oracle. – Gandalf