Может ли JBoss-соединение JBoss быть признано недействительным, чтобы оно не попало в пул соединений? - PullRequest
3 голосов
/ 28 мая 2009

У меня есть обстоятельство, когда соединение JDBC переводит сеанс Oracle, к которому оно подключено, в определенное состояние (т. Е. Режим с включенным DBMS_FLASHBACK). Выход из этого режима может быть неудачным (по крайней мере, теоретически), что означает, что сеанс ошибочно оставлен в состоянии. В этом случае соединение может быть возвращено в пул и получено другим потоком с сеансом Oracle, все еще находящимся в режиме DBMS_FLASHBACK.

Я доказал, что это действительно произойдет. (JBoss 4.2.1)

Что было бы идеально, так это перехватить SQLException в случае сбоя выхода из режима и пометить соединение как «плохое», чтобы после его возврата в пул JBoss уничтожил соединение и создал новое.

Но я не могу найти способ пометить соединение для немедленного уничтожения. Кто-нибудь знает способ?

Ответы [ 2 ]

3 голосов
/ 29 мая 2009

Ваша конфигурация соединения с базой данных Oracle должна содержать сортировщик исключений:

<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>

Эта попытка определить, когда возникает исключение, может ли соединение повторно использоваться или должно быть отключено. Это основано на лучших усилиях и не работает в каждом случае. Я предпочитаю установку продукта пометить все исключения как фатальные . Для этого просто установите сортировщик исключений на org.jboss.resource.adapter.jdbc.GenericExceptionSorter.

1 голос
/ 28 мая 2009

Хороший вопрос, и я не знаю полного ответа, но некоторые пути, которые следует изучить, - это начать с механизма отработки отказа JBoss, где он проверяет правильность соединения. Документация для этого здесь . Затем в SQL, который проверяет достоверность, если что-то может быть вставлено в него, произойдет сбой, если соединение находится в режиме с включенным DBMS_FLASHBACK, это должно заставить JBoss отказаться от соединения. Вероятно, он проверяет следующий запрос на подключение, а не когда он возвращается в пул, хотя это должно быть приемлемым.

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