У мене є проблема з Oracleоб'єднання з'єднань через OracleConnectionCacheImpl. Коли я підключаюсь до пулу підключень на моєму сервері баз даних (Oracle 10g) через тонкий драйвер, все працює нормально, поки через не визначений час з'єднання db перестане (можливо, через непрацюючі з'єднання?), І я отримаю повідомлення про помилку:
Закрите з'єднання.
Оновлення сторінки та повторна спробаз'єднання знову підключає базу даних, тому, здається, це не проблема з мережею або базою даних. Чи спосіб пулу з'єднань Oracle підтвердити своє з'єднання та знову підключитися, якщо з'єднання в пулі з будь-якої причини мертве?
Я використовую Apache Tomcat 6.0.18, оновлення Java EE6 11.
(Здається, у тонкому драйвері Oracle є функція ping. Чи допомагає це і де я можу її знайти?)
Відповіді:
0 для відповіді № 1Тут допоможе Apache DBCP (пул з'єднання DB). Ви можете налаштувати за допомогою параметра "validationQuery", який є SQL-запитом для запуску підключення, видаленого з пулу, ПЕРЕД того, як він вам його надасть. Якщо запит не вдається, з'єднання відміняється, а новий робиться та надається вам.
Дивіться тут http://commons.apache.org/proper/commons-dbcp/configuration.html для більш детальної інформації.
Зверніть увагу, що валідаціяQuery буде викликана щоразу, коли ви отримуєте з'єднання з пулу, тому воно повинно проходити якомога швидше. наприклад:
SELECT id FROM users LIMIT 1;
0 для відповіді № 2
Ви можете додати деякі параметри конфігурації вконтекст.xml, щоб пул з'єднань tomcat піклувався про мертві з'єднання. Ось один приклад контексту.xml, будь ласка, використовуйте користувач / пароль / URL / порти тощо відповідно до ваших налаштувань.
<?xml version="1.0" encoding="utf-8"?>
<Context path="">
<!-- Specify a JDBC data source -->
<Resource name="jdbc/db" auth="Container"
type="javax.sql.DataSource"
username="user"
password="password"
driverClassName="driver.class.fullpath"
url="jdbc:oracle://localhost:3306/
maxActive="50"
maxIdle="10"
testOnBorrow="true"
testWhileIdle="true"
validationQuery="/* ping */"
removeAbandoned="true"
logAbandoned="true"/>
</Context>
-1 для відповіді № 3
Використовуйте іншу бібліотеку пулу підключень, наприклад C3P0, і використовуйте цю функцію для автоматичного знову підключитися.