mysql - 带有 MySQL JTA 的 Atomikos 无法正常工作

标签 mysql spring hibernate atomikos

我目前正在 Tomcat 下使用 Spring、Hibernate 等开发 Java 应用程序。 我尝试使用 Atomikos 配置 JTA,但看起来我在刷新完成时遇到了问题 :(

有很多配置,所以我将把主要部分放在:

<bean id="dataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init" destroy-method="close">

<property name="xaDataSourceClassName">
<value>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</value>
</property>
</bean>

<bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" />
<bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.J2eeUserTransaction" />

<bean id="jtaTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager" depends-on="userTransactionService,atomikosTransactionManager,atomikosUserTransaction">
        <property name="transactionManager" ref="atomikosTransactionManager" />
        <property name="userTransaction" ref="atomikosUserTransaction" />
        <property name="allowCustomIsolationLevels" value="true"></property>
</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
   <property name="dataSource" ref="dataSource" />
    <property name="jtaTransactionManager" ref="jtaTransactionManager"></property>
    <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.use_sql_comments">false</prop>
                <prop key="hibernate.current_session_context_class">jta</prop>              
            </props>
        </property>
</bean>

在使用@Transactional 启动事务时,我能够运行查询,但是在通过 Hibernate getCurrentSession() 保存时,我收到以下异常:(提交完成时)

org.springframework.transaction.UnexpectedRollbackException: JTA transaction unexpectedly rolled back (maybe due to a timeout); nested exception is javax.transaction.RollbackException: The transaction was set to rollback only
    at org.springframework.transaction.jta.JtaTransactionManager.doCommit(JtaTransactionManager.java:1024)
..

Caused by: com.atomikos.datasource.ResourceException: XA resource 'XADBMS': resume for XID '31302E38382E36382E32342E746D30303030313030303137:31302E38382E36382E32342E746D31' raised -5: invalid arguments

..

[11:36:30:534 (http-bio-8080-exec-3) org.hibernate.engine.transaction.synchronization.internal.SynchronizationCallbackCoordinatorNonTrackingImpl$2.mapManagedFlushFailure(SynchronizationCallbackCoordinatorNonTrackingImpl.java:179)]
 ERROR: HHH000346: Error during managed flush [XA resource 'XADBMS': resume for XID '31302E38382E36382E32342E746D30303030313030303139:31302E38382E36382E32342E746D31' raised -5: invalid arguments were given for the XA operation]

最佳答案

我想我找到了问题所在!它与与 MySQL 相关的 Atomikos 错误有关。

将 pinGlobalTxToPhysicalConnection=true 参数添加到连接 URL 或作为 com.atomikos.jdbc.AtomikosDataSourceBean Spring 定义中的参数后,它解决了我的问题。

<bean id="dataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean"
        init-method="init" destroy-method="close">
...
<property name="xaProperties">
   <props>
      <prop key="pinGlobalTxToPhysicalConnection">true</prop>  
   </props>     
</property>
</bean>

关于mysql - 带有 MySQL JTA 的 Atomikos 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27729496/

相关文章:

php - 哪个更快更轻-mysqli & PDO

hibernate - 如何配置 hbm2java maven2 插件为所有映射文件生成 POJO

Hibernate+SQLite+Netbeans

java - 在 hibernate 中将枚举映射到字符串

c++ - 直接将选定的图像传递给另一个函数

mysql - 引用同一列的两个外键

php - 加入查询不起作用

java - 单元测试和日志返回

java - Spring JPA Repository n+1 问题,EBEAN 替代方案

java - AcceptHeaderLocaleResolver 错误