グローバル tx でいくつかの作業を実行する必要がある状況があります。
このため、jta entityManager を取得するために、persistence.xml で次の PersistenceUnit を定義しています。
<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();
この種の作品ですが、これが正しいアプローチであるかどうかはわかりません。
最初のケースで物事がうまくいかない理由と、2番目のアプローチがうまくいくかどうか、誰かが私を助けることができれば感謝しますか?