В последнее время мы столкнулись с некоторыми проблемами согласованности. После отката транзакции откатывается только часть транзакции, оставляя базу данных в несогласованном состоянии. Кроме того, наши журналы содержат ошибки ActiveMQ, такие как
AMQ214004: XA end operation failed : org.apache.activemq.artemis.api.core.ActiveMQInterruptedException: java.lang.InterruptedException
Устранение неполадок: я обнаружил, что наши источники данных не являются источниками данных xa, настроенными для jta="false"
:
<datasources>
<datasource jta="false" jndi-name="java:/sample.ds" pool-name="sample" enabled="true" use-ccm="false">
<connection-url>jdbc:mysql:/host/dbName?autoReconnect=true</connection-url>
<driver>mysql</driver>
<pool>...</pool>
<security>...</security>
<validation>...</validation>
<timeout>...</timeout>
<statement>
<share-prepared-statements>false</share-prepared-statements>
</statement>
</datasource>
<datasource jta="false" jndi-name="java:/readonly.ds" pool-name="ro" enabled="true" use-ccm="false">
<connection-url>jdbc:mysql://host2/db2Name?autoReconnect=true</connection-url>
<driver>mysql</driver>
<security>...</security>
<validation>...</validation>
<statement>
<share-prepared-statements>false</share-prepared-statements>
</statement>
</datasource>
<drivers>
<driver name="mysql" module="com.mysql.jdbc">
<xa-datasource-class>com.mysql.cj.jdbc.MysqlXADataSource</xa-datasource-class>
</driver>
</drivers>
</datasources>
Персистентные единицы конфигурируются с:
<persistence-unit name="sample">
<jta-data-source>java:/a.ds</jta-data-source>
<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
<properties>
<property name="hibernate.cache.use_second_level_cache" value="true"/>
</properties>
</persistence-unit>
<persistence-unit name="readonly">
<jta-data-source>java:/readonly.ds</jta-data-source>
<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
<properties>
<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.connection.readOnly" value="true"/>
</properties>
</persistence-unit>
Как правильно настроить вышеуказанные источники данных? Достаточно ли просто использовать источник данных xa-данных с jta = true для источника данных sample
или есть другие неправильные конфигурации, о которых я еще не знаю?
Мы используем JMS для обмена сообщениями, mysql мастер базы данных для чтения / записи и реплики для не важных, но дорогостоящих запросов.