В WebSphere JDBCProvider, созданный в файле resources.xml, по умолчанию имеет значение xa=true?

Это особая проблема:

Наш администратор Websphere допустил ошибку скрипта при создании источника данных, в результате чего наш источник данных был создан без атрибута xa=”true” в файле resources.xml. Источник данных создается не с помощью пользовательского интерфейса WAS, а с помощью сценария jython.

Вот фрагмент xml из resources.xml

<resources.jdbc:JDBCProvider xmi:id="JDBCProvider_34335495940" name="Oracle JDBC Driver (XA)" description="Oracle JDBC Driver (XA)" providerType="Oracle JDBC Driver (XA)" isolatedClassLoader="false" implementationClassName="oracle.jdbc.xa.client.OracleXADataSource" >
<classpath>${ORACLE_JDBC_DRIVER_PATH}/ojdbc7.jar</classpath>

В идеале файл resources.xml должен был быть таким (с атрибутом xa в конце)

<resources.jdbc:JDBCProvider xmi:id="JDBCProvider_1518484995940" name="Oracle JDBC Driver (XA)" description="Oracle JDBC Driver (XA)" providerType="Oracle JDBC Driver (XA)" isolatedClassLoader="false" implementationClassName="oracle.jdbc.xa.client.OracleXADataSource" **xa="true"**>
        <classpath>${ORACLE_JDBC_DRIVER_PATH}/ojdbc7.jar</classpath>

Приложение отлично работает в продакшене без каких-либо проблем.

Вопрос в том, что если мы не предоставим атрибут «xa» в провайдере JDBC, как он будет понимать соединение?

Класс реализации драйвера: oracle.jdbc.xa.client.OracleXADataSource Оба метода подключения: XA getXAConnection() getXAConnection(java.lang.String userName, java.lang.String passwd)

поэтому, когда WebSphere получает соединение во время выполнения, оно должно по умолчанию быть соединением XA?

Я также проверил и подтвердил администратору баз данных, что база данных включена для XA.

Требуется ли атрибут xa="true"? Если не указано, значение по умолчанию становится «ложным»?

Благодарим за вашу помощь!


person SPL    schedule 26.09.2018    source источник
comment
Помимо ответа njr, почему бы просто не добавить его и не двигаться дальше :-)?   -  person Nic3500    schedule 28.09.2018


Ответы (1)


Мое понимание xa=true/false заключается в том, что это помогает уточнить, какой тип интерфейса источника данных требуется (javax.sql.XADataSource, который поддерживает xa, по сравнению с javax.sql.ConnectionPoolDataSource, который не поддерживает xa) в случаях, когда поставщик JDBC предоставляет класс источника данных, который одновременно реализует оба интерфейса. В тех случаях, когда поставщик JDBC реализует только один из интерфейсов, что, как мы предполагаем, относится к используемому вами oracle.jdbc.xa.client.OracleXADataSource, сервер приложений может определить, что вам действительно нужен javax.sql. XADataSource, поскольку это единственный интерфейс, реализованный этим классом. Учитывая, что javax.sql.XADataSource создает только java.sql.XAConnection, в вашем случае вы всегда будете использовать XAConnection, который поддерживает двухфазную фиксацию.

Что касается того, требуется ли атрибут xa, я бы ответил, что вы всегда должны включать его как для ясности, так и для согласованности с пользовательским интерфейсом WAS, а также для защиты от несколько маловероятной возможности того, что поставщик JDBC в будущей версии их драйвер может обновить реализацию своего источника данных для реализации обоих интерфейсов, и в этом случае для различения потребуется атрибут xa=true.

person njr    schedule 26.09.2018
comment
Спасибо за ответ, я нашел это на сайте IBM, но там не указано значение атрибута по умолчанию, ibm.com/support/knowledgecenter/en/SSAW57_8.5.5/ xa: Возможные значения true и false. Если установлено значение true, источники данных для поставщика создают соединения, которые приложения используют в двухфазной фиксации, глобальных транзакциях. Если установлено значение false, источники данных создают соединения, которые приложения используют в однофазной фиксации, локальных транзакциях. - person SPL; 26.09.2018
comment
@ этот сайт: ibm.com/support/knowledgecenter/en/SSMKHH_9.0.0/ jdbcProviderXASupport. Необязательное свойство, которое определяет, подключается ли брокер к серверу базы данных с использованием протокола XA. По умолчанию для этого свойства установлено значение true. Если для сервера базы данных не включена поддержка XA или скоординированные транзакции не требуются, установите значение false. В этом случае используется драйвер типа 4, указанный с помощью свойства type4DriverClassName, вместо источника данных типа 4, указанного в свойстве type4DatasourceClassName. - person SPL; 26.09.2018
comment
Обратите внимание, что ссылка, которую вы указали выше, относится к другому продукту IBM, предположительно созданному на основе WebSphere Application Server, но атрибут jdbcProviderXASupport, который он предоставляет, является атрибутом этого продукта. Его значение может быть использовано для определения того, как они устанавливают атрибут xa=true/false в JDBCProvider, но значение по умолчанию, которое они документируют, является их значением по умолчанию для jdbcProviderXASupport, которое не обязательно должно совпадать со значением по умолчанию WebSphere Application Server для ха атрибут. Я по-прежнему рекомендую перестраховаться и явно указать требуемое значение. - person njr; 27.09.2018