我有一种情况,我需要在全局 tx 中执行一些工作。
出于这个原因,我在我的 persistence.xml 中定义了以下 PersistenceUnit 来获得一个 jta entityManager。
<persistence-unit name="resubEclipselink" transaction-type="JTA">
<jta-data-source>jdbc/XADataSource</jta-data-source>
...
</persistence-unit>
现在坚持下去,我尝试按照以下步骤进行#1:
if(isXA()){
mXAEntityManager.persist(entity);
mXAEntityManager.flush();
}
事情因异常而失败
javax.persistence.TransactionRequiredException:
Exception Description: No transaction is currently active
at
org.eclipse.persistence.internal.jpa.transaction.EntityTransactionWrapper.throwCheckTransactionFailedException(EntityTransactionWrapper.java:113)
在继续之前开始用户事务时,我得到了同样的原因。
所以我尝试了另一种方法#2:
// get the transactional unit of work or null.
UnitOfWork uow = mEntityManager.getUnitOfWork();
uow.registerObject(entity);
uow.writeChanges();
uow.commit();
这种工作,但我不确定这是否是正确的方法。
如果有人可以帮助我解决为什么在第一种情况下无法正常工作以及第二种方法是否可行,我将不胜感激?