Jboss - Странное исключение после автоматического переподключения к источнику данных XA - PullRequest
4 голосов
/ 13 октября 2011

Я использую источник данных XA на Jboss 6, используя <check-valid-connection-sql> и <background-validation-millis> для автоматического переподключения, когда одно из соединений не работает.Это работает, но проблема в том, что после «переподключения» каждые две минуты или около того я получаю это странное исключение, даже если мои операции с базой данных работают.(Я использую тип 4 от Microsoft)

Вот моя конфигурация источника данных:

<xa-datasource>
    <jndi-name>jdbc/MyDataSourceDS</jndi-name>
    <isSameRM-override-value>false</isSameRM-override-value>
    <xa-datasource-class>com.microsoft.sqlserver.jdbc.SQLServerXADataSource</xa-datasource-class>
    <xa-datasource-property name="ServerName">hostname</xa-datasource-property>
    <xa-datasource-property name="DatabaseName">database</xa-datasource-property>
    <xa-datasource-property name="SelectMethod">cursor</xa-datasource-property>
    <xa-datasource-property name="User">user</xa-datasource-property>
    <xa-datasource-property name="Password">password</xa-datasource-property>

    <!--pooling parameters-->
    <min-pool-size>5</min-pool-size>
    <max-pool-size>100</max-pool-size>
    <prefill>true</prefill>
    <blocking-timeout-millis>5000</blocking-timeout-millis>
    <idle-timeout-minutes>15</idle-timeout-minutes>
    <new-connection-sql>select 1</new-connection-sql>
    <check-valid-connection-sql>SELECT 1</check-valid-connection-sql>
    <background-validation>true</background-validation>
    <background-validation-millis>10000</background-validation-millis> 
      <!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
      <metadata>
         <type-mapping>MS SQLSERVER2000</type-mapping>
      </metadata>
  </xa-datasource>

Кроме того, я не вижу запроса «SELECT 1», выполняющегося перед каждым запросом вжурналы?Хотя я вижу, что мои запросы выполняются.

Любая помощь будет оценена!

1 Ответ

1 голос
/ 11 июня 2014

Чтобы понять правильно - вы используете JBoss AS 6 или JBoss EAP 6?Но я говорил о JBoss EAP 6, который в настоящее время доступен для скачивания на jboss.org.

У меня была похожая проблема с повторным подключением процесса восстановления после выключения базы данных, и я не уверен, является ли это проблемойили какая-то недостающая конфигурация.Я думаю, что это не проблема драйвера JDBC.Но я могу ошибаться.Если у меня будет немного времени, мне будет интересно исследовать это.В случае, если я сообщу вам.

Тем не менее, мой обходной путь - очистить пул соединений для конкретного источника данных.Команда в jboss cli будет выглядеть следующим образом: / subsystem = datasources / xa-data-source = [имя источника данных]: flush-all-connection-in-pool ()

Что за этим стоит?Менеджер транзакций (Нараяна) запускает процесс восстановления каждые 2 минуты.Восстановление проверяет журнал транзакций на стороне диспетчера транзакций на сервере приложений и на стороне базы данных.Он ищет сомнительные транзакции, которые необходимо исправить.Процесс восстановления должен подключаться к базе данных, чтобы можно было проверить наличие сомнительных транзакций.Но когда база данных закрыта, пул соединений * вероятно * остается со старыми соединениями.Обходной путь заставляет пул очищаться и снова заполняться обновленными соединениями.

...