微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Spring Boot / Atomikos / SQL Server 错误

如何解决Spring Boot / Atomikos / SQL Server 错误

我将 Spring Boot 应用打包为部署到 Wildfly 的 war 文件。有 XA 和非 XA 数据源和 JMS(Wildfly 内部 ActiveMQ)。它在 sql Server 或 Oracle 中部署和运行良好(在 Wildfly 独立 xml 中配置并通过 JNDI 获取)。

现在我们正在尝试抽象应用服务器依赖项(事务、数据源和 jms)。我有一个外部 ActiveMQ 服务器正在运行。我使用 Atomikos(5.0.7) 配置了 jms、数据源和事务管理。当我将此配置部署到 Wildfly(仅用于测试)时,它可以与 oracle 一起使用文件。但是,将 sql Server 作为后端时出现错误

    2021-02-03 09:37:09,235 DEBUG [com.atomikos.icatch.imp.CompositeTransactionManagerImp] (default task-1) suspend() for transaction TM1
2021-02-03 09:37:09,236 TRACE [com.atomikos.icatch.imp.CoordinatorImp] (default task-1) Coordinator TM1 entering state: ABORTING
2021-02-03 09:37:09,236 DEBUG [com.atomikos.datasource.xa.XAResourceTransaction] (default task-1) XAResource.end ( XID: 636F72657375697465544D313631323336323839363134323031373931:636F72657375697465544D3731,XAResource.TMSUCCESS ) on resource springbatch.repositoryDataSource represented by XAResource instance  XAResourceID:1
2021-02-03 09:37:09,237 DEBUG [com.atomikos.datasource.xa.XAResourceTransaction] (default task-1) XAResource.rollback ( XID: 636F72657375697465544D313631323336323839363134323031373931:636F72657375697465544D3731 ) on resource dataSourceOne represented by XAResource instance  XAResourceID:1
2021-02-03 09:37:09,241 WARN  [com.atomikos.datasource.xa.XAResourceTransaction] (default task-1) XA resource 'springbatch.repositoryDataSource': rollback for XID 'XID: 636F72657375697465544D313631323336323839363134323031373931:636F72657375697465544D3731' raised -4: the supplied XID is invalid for this XA resource: javax.transaction.xa.XAException: The function ROLLBACK: Failed. The status is: -4. Error: "*** sql_XA DTC_ERROR Context: xa_rollback_entry,StatusCode=-4 (0xFFFFFFFC)"
    at deployment.coresuite-war-CSWC-SNAPSHOT.war//com.microsoft.sqlserver.jdbc.sqlServerXAResource.DTC_XA_Interface(sqlServerXAResource.java:653)
    at deployment.coresuite-war-CSWC-SNAPSHOT.war//com.microsoft.sqlserver.jdbc.sqlServerXAResource.rollback(sqlServerXAResource.java:803)
    at deployment.coresuite-war-CSWC-SNAPSHOT.war//com.atomikos.datasource.xa.XAResourceTransaction.rollback(XAResourceTransaction.java:382)

我的数据源配置是

public DataSource dataSourceOne() throws NamingException {
    AtomikosDataSourceBean atomikosDataSourceBean = new AtomikosDataSourceBean();
    atomikosDataSourceBean.setXaDataSourceClassName(env.getrequiredProperty("db.driver.xa"));
    atomikosDataSourceBean.setUniqueResourceName("dataSourceOne");
    atomikosDataSourceBean.setMinPoolSize(10);
    atomikosDataSourceBean.setMaxPoolSize(100);
    atomikosDataSourceBean.setDefaultIsolationLevel(TransactionDeFinition.ISOLATION_READ_COMMITTED);
    Properties properties = new Properties();
    properties.put("user",env.getrequiredProperty("db.username"));
    properties.put("password",env.getrequiredProperty("db.password"));
    String url = env.getrequiredProperty("db.url");
    properties.put("URL",env.getrequiredProperty("db.url"));
    atomikosDataSourceBean.setXaProperties(properties);
    return atomikosDataSourceBean;
}

public DataSource localDataSource() throws NamingException {
    AtomikosNonXADataSourceBean atomikosNonXADataSourceBean = new AtomikosNonXADataSourceBean();
    atomikosNonXADataSourceBean.setUniqueResourceName("dataSourceTwo");
    atomikosNonXADataSourceBean.setDriverClassName(env.getrequiredProperty("db.driver"));
    atomikosNonXADataSourceBean.setUser(env.getrequiredProperty("db.username"));
    atomikosNonXADataSourceBean.setPassword(env.getrequiredProperty("db.password"));
    atomikosNonXADataSourceBean.setUrl(env.getrequiredProperty("db.url"));
    atomikosNonXADataSourceBean.setMinPoolSize(10);
    atomikosNonXADataSourceBean.setMaxPoolSize(100);
    atomikosNonXADataSourceBean.setDefaultIsolationLevel(Isolation.READ_COMMITTED.value());
    return atomikosNonXADataSourceBean;
}

问题似乎只针对 Atomikos 和 sql Server 的组合。因为它与两个数据库的 Wildfly 资源一起运行良好,所以问题不在于 sql Server 的配置。这需要特殊的参数或配置吗?

额外的堆栈跟踪:

Caused by: com.microsoft.sqlserver.jdbc.sqlServerException: The Microsoft distributed Transaction Coordinator (MS DTC) has cancelled the distributed transaction.
    at deployment.coresuite-war-CSWC-SNAPSHOT.war//com.microsoft.sqlserver.jdbc.sqlServerException.makeFromDatabaseError(sqlServerException.java:262)
    at deployment.coresuite-war-CSWC-SNAPSHOT.war//com.microsoft.sqlserver.jdbc.sqlServerResultSet$FetchBuffer.nextRow(sqlServerResultSet.java:5448)
    at deployment.coresuite-war-CSWC-SNAPSHOT.war//com.microsoft.sqlserver.jdbc.sqlServerResultSet.fetchBufferNext(sqlServerResultSet.java:1771)
    at deployment.coresuite-war-CSWC-SNAPSHOT.war//com.microsoft.sqlserver.jdbc.sqlServerResultSet.next(sqlServerResultSet.java:1029)
    at deployment.coresuite-war-CSWC-SNAPSHOT.war//org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:93)

2021-02-03 16:26:24,297 WARN  [com.atomikos.datasource.xa.XAResourceTransaction] (default task-1) XA resource 'springbatch.repositoryDataSource': rollback for XID 'XID: 636F72657375697465544D313631323338373435313631383039323734:636F72657375697465544D3930' raised -4: the supplied XID is invalid for this XA resource: javax.transaction.xa.XAException: The function ROLLBACK: Failed. The status is: -4. Error: "*** sql_XA DTC_ERROR Context: xa_rollback_entry,StatusCode=-4 (0xFFFFFFFC)"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?