Thanks for the feedback. I have posted the ticket [1]. [1] https://issues.apache.org/jira/browse/ARIES-1393
-----Original Message----- From: [email protected] [mailto:[email protected]] On Behalf Of Christian Schneider Sent: Thursday, September 03, 2015 6:11 AM To: [email protected] Subject: RE: JTA 2 - Bug in XAJpaTemplate#txExpr using TransactionType.Supports? This indeed sounds like a bug. Can you open a jira issue for it? Christian Am 03.09.2015 4:13 vorm. schrieb <[email protected]>: > Couple of corrections: > > 1) I meant to put 'JPA 2' in the subject to indicate this being related to > new aries JPA 2 bundles, specifically the jpa-support bundle in this case. > > 2) My suggestion to delegate the transaction joining logic to a new method > should have said the TransactionToken class, not the TransactionAttribute > class. It would look something like [1]. Since TransactionAttribute already > takes care to only set activeTransaction if one is present, then the > null-check here seems logical to me. Suggestions welcome. > > [1] > public void joinTransaction(EntityManager em) { > if (activeTransaction != null) > em.joinTransaction(); > } > > -----Original Message----- > From: Pitts, Matthew W. > Sent: Wednesday, September 02, 2015 7:48 PM > To: '[email protected]' > Subject: JTA 2 - Bug in XAJpaTemplate#txExpr using > TransactionType.Supports? > > Hey all, thanks for the great aries bundles. > > I'm trying to put together a JPA+JTA setup to do XA across Eclipselink > partitions for replicated entities to begin sharding an existing > application. I've worked through to an almost working setup and I'm running > into a problem that I think may be a bug. > > When trying to run txExpr methods on my OSGi-exposed JpaTemplate services > I get a TransactionRequired [1] exception every time I use > TransactionType.Supports. It seems to me that the logic in > XAJpaTemplate#txExpr is calling EntityManager#joinTransaction() regardless > of whether there is a current global transaction. So for situations where > you just want your logic to 'support' running within an existing global > transaction, but not create a new one if one doesn't exist, > em.joinTransaction() is still being called. > > I'm a bit new to XA/JTA so perhaps I'm not understanding how this should > work. > > Would it make sense to delegate the joining to a new method > TransactionAttribute that only calls em.joinTransaction if the current > transaction is not null? > > I appreciate the input on this. Thanks! > > [1] Caused by: javax.persistence.TransactionRequiredException: > Exception Description: No externally managed transaction is currently > active for this thread > at > org.eclipse.persistence.internal.jpa.transaction.JTATransactionWrapper.throwCheckTransactionFailedException(JTATransactionWapper.java:94) > ~[org.eclipse.persistence.jpa.jar:na] > at > org.eclipse.persistence.internal.jpa.transaction.JTATransactionWrapper.checkForTransaction(JTATransactionWrapper.java:54) > ~[org.eclipse.persistence.jpa.jar:na] > at > org.eclipse.persistence.internal.jpa.transaction.JTATransactionWrapper.registerIfRequired(JTATransactionWrapper.java:131) > ~[org.eclipse.persistence.jpa.jar:na] > at > org.eclipse.persistence.internal.jpa.EntityManagerImpl.joinTransaction(EntityManagerImpl.java:2081) > ~[org.eclipse.persistence.jpa.jar:na] > at > org.apache.aries.jpa.support.impl.XAJpaTemplate.txExpr(XAJpaTemplate.java:57) > ~[na:na] > ... 20 common frames omitted > > Matthew Pitts > > Developer > Security Solutions Design & Automation > > Wells Fargo Bank | Tel 336.608.3332 | Cell 336.202.3913 | Kernersville, > NC | MAC D9693-010 > [email protected] > > >
