Процедура повторного подключения пула соединений с базой данных JBoss AS 5 для MS SQL Server - PullRequest
1 голос
/ 23 февраля 2011

Я хотел бы предложить лучший подход для повторного подключения к MS SQL Server, когда соединение с JBoss AS 5 на БД временно потеряно.

Для Oracle я нашел такой вопрос SO: «Есть ли какой-нибудь способ повторно подключить пул соединений JBoss к Oracle, когда соединения разрываются?» , который говорит, что использует специфическую для Oracle подпрограмму ping и использует valid-connection-checker-class-name свойство описано в JBoss 'Настройка источников данных Wiki .

Чего я хотел бы избежать, так это запускать каждый раз SQL каждый раз, когда соединение извлекается из пула, что в основном делает другое свойство check-valid-connection-sql .

Итак, сейчас я склоняюсь к подходу, который использует имя-исключения-класса-класса , но я не уверен, является ли это лучшим подходом в случае MS SQL Server.

Надеюсь услышать ваши предложения по теме. Спасибо!

Ответы [ 3 ]

1 голос
/ 24 февраля 2011

Я не уверен, что он будет работать так, как вы его описали (прозрачно).

Допустимая проверка соединения (это может быть либо инструкция sql в файле * ds.xml, либо класс, который выполняетподъем) предназначен для вызова, когда соединение берется из пула, так как база данных могла закрыть его, пока оно находится в пуле.Если соединение больше не является действительным, оно закрывается и запрашивается новое из БД - это полностью прозрачно для приложения и происходит (как вы говорите) только тогда, когда соединение вынимается избассейн.Затем вы можете использовать это в своем приложении в течение длительного времени.

Сортировщик исключений предназначен для того, чтобы сообщать приложению, если, например, ORA-0815 является безвредным или плохим return кодом для SQLзаявление.Если он безвреден, он в основном проглатывается, а для плохого он сообщается приложению как исключение.

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

Я думаю, что время от времени запускать дешевый SQL-оператор в БД, чтобы проверить, все еще ли соединение из пула все еще действует, намного меньшедороже, чем выполнять всю эту проверку «вручную».

Кстати: хотя есть универсальная программа проверки соединения sql, которая работает со всеми базами данных, некоторые базы данных предоставляют другой способ проверки работоспособности соединения;В Oracle есть специальная команда ping для этого, которая используется в специальном классе OracleConnectionChecker, на который вы ссылаетесь.Поэтому может случиться так, что для MS-SQL есть нечто похожее, что дешевле, чем простая инструкция SQL.

0 голосов
/ 18 января 2013

С JBoss 5.1 (я не знаю, с другими версиями), вы можете использовать

<valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.MSSQLValidConnectionChecker</valid-connection-checker-class-name>
0 голосов
/ 23 марта 2012

Я успешно использовал свойства проверки фона: background-validation-millis из https://community.jboss.org/wiki/ConfigDataSources

...