atomikos mysql_mysql – Atomikos:当事务包含多个持久性时的异常

在使用Atomikos进行独立JPA和JTA/XA事务管理时,测试中遇到MySQL数据库异常:'Invalid arguments (or unsupported command)'。异常发生在第二个持久化操作时。问题可能与MySQL的XA事务支持或配置有关。当只持久化一条记录或使用H2数据库时,测试能正常运行。测试代码展示了如何在UserTransaction中进行多个实体的持久化操作。
摘要由CSDN通过智能技术生成

我正在试验Atomikos提供的独立JPA和JTA / XA事务管理.

我的简单单元测试持久存储3条记录,包含在JTA UserTransaction中.

使用H2作为后备数据库时,测试工作正常.

使用MySQL作为后备数据库时,第二个持久性引发此异常:

com.mysql.jdbc.jdbc2.optional.MysqlXAException: XAER_INVAL: Invalid arguments (or unsupported command)

(参见下面的完整堆栈跟踪和记录).日志文件提供了更多详细信息:

WARNING: XA resource ‘jdbc/mysqlDs’: resume for XID ‘3139322E3136382E31342E3131372E746D30303030323030303831:3139322E3136382E31342E3131372E746D32’ raised -5: invalid arguments were given for the XA operation

如果我在测试中只留下一个持久性,它就会成功.使用H2而不是MySQL时,同样的测试也会成功.

那么问题:在MySQL的情况下,可能是异常的原因是什么?

以下是JtaJpaMySQLAtomikosTest.java的主要测试代码:

@Test

public void testSingleCommitMySql() throws Exception {

EntityManagerFactory emf = Persistence.createEntityManagerFactory("javaee7.standalone.jta.pu_mysql");

EntityManager em = emf.createEntityManager();

UserTransaction userTransaction = (UserTransaction) new InitialContext().lookup("java:comp/UserTransaction");

userTransaction.begin();

em.joinTransaction();

em.persist(new TestEntity("FOO", "A"));

em.persist(new TestEntity("BAR", "B"));

em.persist(new TestEntity("BAZ", "C"));

em.flush();

userTransaction.commit();

TypedQuery query = em.createQuery("SELECT b FROM TestEntity b WHERE name = :name", TestEntity.class)

.setParameter("name", "FOO");

assertEquals("A", query.getSingleResult().getValue());

em.close();

emf.close();

}

如果您需要完整的测试代码,请告诉我们.

这是日志记录异常的相关部分:

INFO: AtomikosDataSoureBean 'jdbc/mysqlDs': getConnection ( null )...

Apr 28, 2016 12:34:57 PM com.atomikos.logging.JULLogger logInfo

INFO: AtomikosDataSoureBean 'jdbc/mysqlDs': init...

Apr 28, 2016 12:34:57 PM com.atomikos.logging.JULLogger logInfo

INFO: atomikos connection proxy for com.mysql.jdbc.jdbc2.optional.JDBC4ConnectionWrapper@1bb266b3: calling getAutoCommit...

Apr 28, 2016 12:34:57 PM com.atomikos.logging.JULLogger logInfo

INFO: atomikos connection proxy for com.mysql.jdbc.jdbc2.optional.JDBC4ConnectionWrapper@1bb266b3: calling getMetaData...

Apr 28, 2016 12:34:57 PM com.atomikos.logging.JULLogger logInfo

INFO: atomikos connection proxy for com.mysql.jdbc.jdbc2.optional.JDBC4ConnectionWrapper@1bb266b3: calling createStatement...

Apr 28, 2016 12:34:57 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute

INFO: HHH000396: Updating schema

Apr 28, 2016 12:34:57 PM org.hibernate.tool.hbm2ddl.TableMetadata

INFO: HHH000261: Table found: twophasepoc.testentity

Apr 28, 2016 12:34:57 PM org.hibernate.tool.hbm2ddl.TableMetadata

INFO: HHH000037: Columns: [name, id, value]

Apr 28, 2016 12:34:57 PM org.hibernate.tool.hbm2ddl.TableMetadata

INFO: HHH000108: Foreign keys: []

Apr 28, 2016 12:34:57 PM org.hibernate.tool.hbm2ddl.TableMetadata

INFO: HHH000126: Indexes: [primary]

Apr 28, 2016 12:34:57 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute

INFO: HHH000232: Schema update complete

Apr 28, 2016 12:34:57 PM com.atomikos.logging.JULLogger logInfo

INFO: atomikos connection proxy for com.mysql.jdbc.jdbc2.optional.JDBC4ConnectionWrapper@1bb266b3: calling getWarnings...

Apr 28, 2016 12:34:57 PM com.atomikos.logging.JULLogger logInfo

INFO: atomikos connection proxy for com.mysql.jdbc.jdbc2.optional.JDBC4ConnectionWrapper@1bb266b3: calling clearWarnings...

Apr 28, 2016 12:34:57 PM com.atomikos.logging.JULLogger logInfo

INFO: atomikos connection proxy for com.mysql.jdbc.jdbc2.optional.JDBC4ConnectionWrapper@1bb266b3: close()...

Apr 28, 2016 12:34:57 PM com.atomikos.logging.JULLogger logInfo

INFO: createCompositeTransaction ( 10000 ): created new ROOT transaction with id 192.168.14.117.tm0000200081

Apr 28, 2016 12:34:57 PM com.atomikos.logging.JULLogger logInfo

INFO: registerSynchronization ( com.atomikos.icatch.jta.Sync2Sync@4e517165 ) for transaction 192.168.14.117.tm0000200081

Hibernate:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值