我正在试验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:

insert

into

TestEntity

(name, value)

values

(?, ?)

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

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: addParticipant ( XAResourceTransaction: 3139322E3136382E31342E3131372E746D30303030323030303831:3139322E3136382E31342E3131372E746D32 ) for transaction 192.168.14.117.tm0000200081

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

INFO: XAResource.start ( 3139322E3136382E31342E3131372E746D30303030323030303831:3139322E3136382E31342E3131372E746D32 , XAResource.TMNOFLAGS ) on resource jdbc/mysqlDs represented by XAResource instance com.mysql.jdbc.jdbc2.optional.JDBC4MysqlXAConnection@16ecee1

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

INFO: registerSynchronization ( com.atomikos.jdbc.AtomikosConnectionProxy$JdbcRequeueSynchronization@35a707b3 ) for transaction 192.168.14.117.tm0000200081

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 prepareStatement(insert into TestEntity (name, value) values (?, ?),1)...

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

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

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: XAResource.end ( 3139322E3136382E31342E3131372E746D30303030323030303831:3139322E3136382E31342E3131372E746D32 , XAResource.TMSUCCESS ) on resource jdbc/mysqlDs represented by XAResource instance com.mysql.jdbc.jdbc2.optional.JDBC4MysqlXAConnection@16ecee1

Hibernate:

insert

into

TestEntity

(name, value)

values

(?, ?)

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

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: addParticipant ( XAResourceTransaction: 3139322E3136382E31342E3131372E746D30303030323030303831:3139322E3136382E31342E3131372E746D32 ) for transaction 192.168.14.117.tm0000200081

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

INFO: XAResource.start ( 3139322E3136382E31342E3131372E746D30303030323030303831:3139322E3136382E31342E3131372E746D32 , XAResource.TMJOIN ) on resource jdbc/mysqlDs represented by XAResource instance com.mysql.jdbc.jdbc2.optional.JDBC4MysqlXAConnection@16ecee1

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

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

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

at com.mysql.jdbc.jdbc2.optional.MysqlXAConnection.mapXAExceptionFromSQLException(MysqlXAConnection.java:581)

at com.mysql.jdbc.jdbc2.optional.MysqlXAConnection.dispatchCommand(MysqlXAConnection.java:566)

at com.mysql.jdbc.jdbc2.optional.MysqlXAConnection.start(MysqlXAConnection.java:507)

at com.atomikos.datasource.xa.XAResourceTransaction.resume(XAResourceTransaction.java:427)

at com.atomikos.datasource.xa.session.BranchEnlistedStateHandler.(BranchEnlistedStateHandler.java:59)

at com.atomikos.datasource.xa.session.NotInBranchStateHandler.checkEnlistBeforeUse(NotInBranchStateHandler.java:64)

at com.atomikos.datasource.xa.session.TransactionContext.checkEnlistBeforeUse(TransactionContext.java:88)

at com.atomikos.datasource.xa.session.SessionHandleState.notifyBeforeUse(SessionHandleState.java:179)

at com.atomikos.jdbc.AtomikosConnectionProxy.enlist(AtomikosConnectionProxy.java:223)

at com.atomikos.jdbc.AtomikosConnectionProxy.invoke(AtomikosConnectionProxy.java:142)

at com.sun.proxy.$Proxy12.prepareStatement(Unknown Source)

at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$2.doPrepare(StatementPreparerImpl.java:124)

at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:186)

at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareStatement(StatementPreparerImpl.java:122)

at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.prepare(IdentityGenerator.java:89)

at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:55)

at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3032)

at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3556)

at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:97)

at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:480)

at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:191)

at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:175)

at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:210)

at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:324)

at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:288)

at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:194)

at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:125)

at org.hibernate.jpa.event.internal.core.JpaPersistEventListener.saveWithGeneratedId(JpaPersistEventListener.java:84)

at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:206)

at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:149)

at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:75)

at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:807)

at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:780)

at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:785)

at org.hibernate.jpa.spi.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:1181)

at JtaJpaMySQLAtomikosTest.testSingleCommitMySql(JtaJpaMySQLAtomikosTest.java:88)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:497)

at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)

at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)

at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)

at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)

at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)

at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)

at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)

at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)

at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)

at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)

at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)

at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)

at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)

at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)

at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)

at org.junit.runners.ParentRunner.run(ParentRunner.java:300)

at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)

at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

Caused by: java.sql.SQLException: XAER_INVAL: Invalid arguments (or unsupported command)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3878)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3814)

at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2478)

at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2625)

at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2547)

at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2505)

at com.mysql.jdbc.StatementImpl.executeInternal(StatementImpl.java:840)

at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:740)

at com.mysql.jdbc.jdbc2.optional.MysqlXAConnection.dispatchCommand(MysqlXAConnection.java:560)

... 60 more

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

WARNING: Error enlisting in transaction - connection might be broken? Please check the logs for more information...

com.atomikos.datasource.ResourceException: XA resource 'jdbc/mysqlDs': resume for XID '3139322E3136382E31342E3131372E746D30303030323030303831:3139322E3136382E31342E3131372E746D32' raised -5: invalid arguments were given for the XA operation

at com.atomikos.datasource.xa.XAResourceTransaction.resume(XAResourceTransaction.java:434)

at com.atomikos.datasource.xa.session.BranchEnlistedStateHandler.(BranchEnlistedStateHandler.java:59)

at com.atomikos.datasource.xa.session.NotInBranchStateHandler.checkEnlistBeforeUse(NotInBranchStateHandler.java:64)

at com.atomikos.datasource.xa.session.TransactionContext.checkEnlistBeforeUse(TransactionContext.java:88)

at com.atomikos.datasource.xa.session.SessionHandleState.notifyBeforeUse(SessionHandleState.java:179)

at com.atomikos.jdbc.AtomikosConnectionProxy.enlist(AtomikosConnectionProxy.java:223)

at com.atomikos.jdbc.AtomikosConnectionProxy.invoke(AtomikosConnectionProxy.java:142)

at com.sun.proxy.$Proxy12.prepareStatement(Unknown Source)

at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$2.doPrepare(StatementPreparerImpl.java:124)

at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:186)

at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareStatement(StatementPreparerImpl.java:122)

at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.prepare(IdentityGenerator.java:89)

at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:55)

at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3032)

at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3556)

at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:97)

at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:480)

at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:191)

at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:175)

at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:210)

at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:324)

at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:288)

at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:194)

at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:125)

at org.hibernate.jpa.event.internal.core.JpaPersistEventListener.saveWithGeneratedId(JpaPersistEventListener.java:84)

at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:206)

at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:149)

at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:75)

at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:807)

at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:780)

at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:785)

at org.hibernate.jpa.spi.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:1181)

at JtaJpaMySQLAtomikosTest.testSingleCommitMySql(JtaJpaMySQLAtomikosTest.java:88)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:497)

at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)

at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)

at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)

at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)

at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)

at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)

at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)

at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)

at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)

at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)

at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)

at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)

at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)

at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)

at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)

at org.junit.runners.ParentRunner.run(ParentRunner.java:300)

at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)

at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

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

INFO: setRollbackOnly() called for transaction 192.168.14.117.tm0000200081

这是persistence.xml:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"

version="2.1">

org.hibernate.jpa.HibernatePersistenceProvider

jdbc/mysqlDs

TestEntity

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

  1. atomikos mysql_mysql – Atomikos:当事务包含多个持久性时...

    我正在试验Atomikos提供的独立JPA和JTA / XA事务管理. 我的简单单元测试持久存储3条记录,包含在JTA UserTransaction中. 使用H2作为后备数据库时,测试工作正常. 使 ...

  2. springmvc atomikos mysql数据源_springboot+atomikos+多数据源管理事务(mysql 8.0)

    jta:Java Transaction API,即是java中对事务处理的api 即 api即是接口的意思 atomikos:Atomikos TransactionsEssentials 是一个为 ...

  3. springBoot入门总结(八)使用 jta+atomikos 整合springBoot分布式事务

    一.JTA:Java Transaction Manager 事务是计算机应用中不可或缺的组件模型,它保证了用户操作的原子性 ( Atomicity ).一致性 ( Consistency ).隔离性 ...

  4. Spring MyBatis Atomikos 实现JTA分布式事务

    Spring+MyBatis+Atomikos实现JTA分布式事务 项目中需要同时操作两个数据库,对两个数据库中的表同时做变更时就需要控制事务,要么全部成功,要么全部失败. Atomikos是一个开源 ...

  5. Spring事务管理只对出现运行期异常进行回滚

    使用spring难免要用到spring的事务管理,要用事务管理又会很自然的选择声明式的事务管理,在spring的文档中说道,spring声明式事务管理默认对非检查型异常和运行时异常进行事务回滚,而对检 ...

  6. thinkphp的控制器包含在Url中时注意区分大小写

    thinkphp的控制器包含在Url中时要区分大小写. 转载于:https://www.cnblogs.com/npk19195global/p/4531961.html

  7. 泰德激光打标软件 包含 #include Main.h 时 原本正确的单元却报错

    问题:泰德激光打标软件  ,当新增单元需要包含 #include "Main.h" 时, 原本正确的单元却报错. 办法:包含 #include "Main.h" ...

  8. 分布式事务-Atomikos解决多数据源事务问题

    目录 场景 多数据源配置 引入Atomikos 测试service 1. 场景: 经常会碰到这种应用场景,比如说下订单的操作,有需要修改订单库中信息,又需要修改产品库中库存,这一个操作就是需要一次性操 ...

  9. SpringBoot整合atomikos实现跨库事务

    背景 框架之前完成了多数据源的动态切换及事务的处理,想更近一步提供一个简单的跨库事务处理功能,经过网上的搜索调研,大致有XA事务/SEGA事务/TCC事务等方案,因为业务主要涉及政府及企业且并发量不大 ...

最新文章

  1. Java反序列化漏洞整理
  2. windows netstat 查看端口、进程
  3. [前台]---js获取input标签中name相同的各个value值
  4. docker 日志_Docker容器日志管理最佳实践
  5. IDP:云原生的“Jupyter”,让算法团队更高产
  6. python日历下拉框_selenium+Python(Js处理日历控件)
  7. 周鸿祎评互联网大佬的编程能力:我能排前三,谁排第一?
  8. 65. magent 手动创建用户
  9. C# fmpeg加虹软的人脸识别demo
  10. 用友U8.72总账报表速学手册
  11. ASA k8 升 k9
  12. 边框盒子 box-sizing 的 content-box 和 border-box属性
  13. php 送货单管理系统,销售送货单管理系统下载
  14. 虚拟机服务器磁盘扩容步骤,vmware ESXi 虚拟机扩容磁盘空间
  15. 论文阅读笔记 1.《Open Flow: Enabling Innovation in Campus Networks》(2022.12.22)
  16. 小i机器人2019数博会C位秀肌肉 “认知智能”引领行业创新变革
  17. Leptonica PIX 与 Qt QImage 的相互转换
  18. 【分解质因数】合数的质因数分解
  19. Unity动画状态的获取和常用判断(逐步完善)
  20. 【白手起家】Python教程02——需求分析与流程图

热门文章

  1. 江苏省计算机学业水平测试模拟软件,基于江苏省普通高中物理学业水平测试的学生在线自主模拟测试系统研发...
  2. NestJS 核心概念,IOC 和 AOP 的运用
  3. 《疯狂72小时》点映获好评 有望成暑期档喜剧黑
  4. 迁移学习关于下载不了inception-v3,自己网络又加载不了的问题
  5. nrf52832 rtthread dlmodule 动态模块适配
  6. 如何在域环境中利用组策略配置墙纸?
  7. 域控发放壁纸到本地客户端磁盘防止黑屏
  8. Python自学路线图之Python系统自学
  9. python难学吗-python自学难吗?
  10. element-UI el-select 简单修改下拉框样式