[ https://issues.apache.org/jira/browse/GEODE-8483?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Barrett Oglesby resolved GEODE-8483. ------------------------------------ Resolution: Fixed > Geode JCALocalTransaction fails to begin a JTA last resource transaction if > the TransactionManager is not bound into JNDI > ------------------------------------------------------------------------------------------------------------------------- > > Key: GEODE-8483 > URL: https://issues.apache.org/jira/browse/GEODE-8483 > Project: Geode > Issue Type: Bug > Components: transactions > Reporter: Barrett Oglesby > Assignee: Barrett Oglesby > Priority: Major > Labels: pull-request-available > Fix For: 1.12.1, 1.14.0, 1.13.1 > > > The exception is: > {noformat} > [error 2020/08/18 22:57:03.997 UTC <Default Executor-thread-4> tid=0x20] > Application run failed > Caused by: org.springframework.transaction.TransactionSystemException: > UOWManager transaction processing failed; nested exception is > com.ibm.wsspi.uow.UOWException: javax.transaction.HeuristicMixedException > at > org.springframework.transaction.jta.WebSphereUowTransactionManager.execute(WebSphereUowTransactionManager.java:313) > at example.jta.client.Client.iterateAndCreateTrades(Client.java:93) > at example.jta.client.Client.loadEntries(Client.java:74) > Caused by: com.ibm.wsspi.uow.UOWException: > javax.transaction.HeuristicMixedException > at > com.ibm.ws.uow.embeddable.EmbeddableUOWManagerImpl.runUnderNewUOW(EmbeddableUOWManagerImpl.java:757) > at > com.ibm.ws.uow.embeddable.EmbeddableUOWManagerImpl.runUnderUOW(EmbeddableUOWManagerImpl.java:329) > at > org.springframework.transaction.jta.WebSphereUowTransactionManager.execute(WebSphereUowTransactionManager.java:306) > Caused by: javax.transaction.HeuristicMixedException > at com.ibm.tx.jta.impl.TransactionImpl.commit(TransactionImpl.java:715) > at com.ibm.tx.jta.impl.TranManagerImpl.commit(TranManagerImpl.java:165) > at com.ibm.tx.jta.impl.TranManagerSet.commit(TranManagerSet.java:113) > at > com.ibm.ws.uow.embeddable.EmbeddableUOWManagerImpl.uowCommit(EmbeddableUOWManagerImpl.java:834) > at > com.ibm.ws.uow.embeddable.EmbeddableUOWManagerImpl.uowEnd(EmbeddableUOWManagerImpl.java:812) > at > com.ibm.ws.uow.embeddable.EmbeddableUOWManagerImpl.runUnderNewUOW(EmbeddableUOWManagerImpl.java:754) > Caused by: javax.transaction.xa.XAException > at > com.ibm.ejs.j2c.LocalTransactionWrapper.commit(LocalTransactionWrapper.java:157) > at > com.ibm.tx.jta.impl.OnePhaseResourceImpl.commit_one_phase(OnePhaseResourceImpl.java:113) > at > com.ibm.tx.jta.impl.RegisteredResources.flowCommitOnePhase(RegisteredResources.java:2045) > at > com.ibm.tx.jta.impl.TransactionImpl.commitXAResources(TransactionImpl.java:1478) > at > com.ibm.tx.jta.impl.TransactionImpl.stage1CommitProcessing(TransactionImpl.java:801) > at > com.ibm.tx.jta.impl.TransactionImpl.processCommit(TransactionImpl.java:768) > at com.ibm.tx.jta.impl.TransactionImpl.commit(TransactionImpl.java:711) > Caused by: javax.resource.spi.LocalTransactionException: > java.lang.IllegalStateException: Thread does not have an active transaction > at > org.apache.geode.internal.ra.spi.JCALocalTransaction.commit(JCALocalTransaction.java:116) > at > com.ibm.ejs.j2c.LocalTransactionWrapper.commit(LocalTransactionWrapper.java:145) > {noformat} > Here is a truncated version of {{JCALocalTransaction.begin}}: > {noformat} > public void begin() throws ResourceException { > TransactionManager tm = this.cache.getJTATransactionManager(); > if (tm != null && tm.getTransaction() != null) { > this.gfTxMgr.begin(); > } else { > if (logger.fineEnabled()) { > logger.fine("JCAManagedConnection: JTA Transaction does not exist."); > } > } > } > {noformat} > It attempts to get the {{TransactionManager}} (which in this case is a > {{com.ibm.tx.jta.embeddable.impl.EmbeddableTranManagerSet}}). If it is null > (not bound) or it doesn't have a {{Transaction}} in progress, it logs a > message at fine level and returns. > A stack trace in {{JCALocalTransaction.begin}} shows the call stack: > {noformat} > java.lang.Exception > at > org.apache.geode.internal.ra.spi.JCALocalTransaction.begin(JCALocalTransaction.java:54) > at > com.ibm.ejs.j2c.LocalTransactionWrapper.start(LocalTransactionWrapper.java:668) > at > com.ibm.ws.Transaction.JTA.JTAResourceBase.start(JTAResourceBase.java:121) > at > com.ibm.tx.jta.impl.RegisteredResources.startRes(RegisteredResources.java:835) > at > com.ibm.tx.jta.impl.RegisteredResources.enlistResource(RegisteredResources.java:289) > at > com.ibm.tx.jta.impl.TransactionImpl.enlistResource(TransactionImpl.java:1991) > at > com.ibm.tx.jta.embeddable.impl.EmbeddableTranManagerSet.enlistOnePhase(EmbeddableTranManagerSet.java:184) > at > com.ibm.ws.transaction.services.TransactionManagerService.enlistOnePhase(TransactionManagerService.java:366) > at > com.ibm.ejs.j2c.LocalTransactionWrapper.enlist(LocalTransactionWrapper.java:412) > at > com.ibm.ejs.j2c.ConnectionManager.initializeForUOW(ConnectionManager.java:1037) > at > com.ibm.ejs.j2c.ConnectionManager.involveMCInTran(ConnectionManager.java:699) > at > com.ibm.ejs.j2c.ConnectionManager.allocateConnection(ConnectionManager.java:316) > at > org.apache.geode.internal.ra.GFConnectionFactoryImpl.getConnection(GFConnectionFactoryImpl.java:44) > at > org.apache.geode.internal.ra.GFConnectionFactoryImpl.getConnection(GFConnectionFactoryImpl.java:25) > at > org.springframework.data.gemfire.config.annotation.support.AbstractGemFireAsLastResourceAspectSupport$GemFireConnectionHolder.acquire(AbstractGemFireAsLastResourceAspectSupport.java:525) > at > org.springframework.data.gemfire.config.annotation.support.GemFireAsLastResourceConnectionAcquiringAspect.doGemFireConnectionFactoryGetConnection(GemFireAsLastResourceConnectionAcquiringAspect.java:61) > ... > at > org.springframework.transaction.jta.WebSphereUowTransactionManager$UOWActionAdapter.run(WebSphereUowTransactionManager.java:371) > at > com.ibm.ws.uow.embeddable.EmbeddableUOWManagerImpl.runUnderNewUOW(EmbeddableUOWManagerImpl.java:736) > at > com.ibm.ws.uow.embeddable.EmbeddableUOWManagerImpl.runUnderUOW(EmbeddableUOWManagerImpl.java:329) > at > org.springframework.transaction.jta.WebSphereUowTransactionManager.execute(WebSphereUowTransactionManager.java:306) > ... > at > example.jta.client.controller.TradeController.iterateAndCreateTrades(TradeController.java:48) > at > example.jta.client.controller.TradeController.createTrades(TradeController.java:36) > {noformat} > AFAICT, these checks are unnecessary since the {{EmbeddableTranManagerSet}} > is involved in the call to begin. -- This message was sent by Atlassian Jira (v8.3.4#803005)