글로벌 tx에서 일부 작업을 수행해야하는 경우가 있습니다.XA 트랜잭션에서 작업 수행
이러한 이유 때문에 jta entityManager를 얻으려면 내 persistence.xml에 다음 PersistenceUnit이 정의되어 있습니다. 나는 사용자 트랜잭션 이전을 시작할 때
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)
예외와 함께 실패 :
<persistence-unit name="resubEclipselink" transaction-type="JTA">
<jta-data-source>jdbc/XADataSource</jta-data-source>
...
</persistence-unit>
이제
내가 같이 진행하려고 지속하기는 # 1 다음 진행.
그래서 나는 또 다른 접근 방법 # 2 시도 :// get the transactional unit of work or null.
UnitOfWork uow = mEntityManager.getUnitOfWork();
uow.registerObject(entity);
uow.writeChanges();
uow.commit();
작품이 일종의 그러나 이것은 올바른 방법입니다 있는지 확실하지 않다.
누군가가 첫 번째 경우에 작동하지 않는 이유와 두 번째 접근 방식이 정상적으로 작동하는 이유를 도와 주시면 감사하겠습니다.
설명해 주셔서 감사합니다. 정확히 엔 엔티티 관리자를 얻으려고합니다. 이제는 컨테이너 관리 엔티티 관리자가 필요할 것이므로 제안한 방식으로 인수해야 함을 이해합니다. 그러나 불행히도 내 시나리오는 다른 조건에 따라 트랜잭션 경계를 결정해야하는 방식으로 실행됩니다. 또한 나는 세션 bean을 통해 주입하는 것이 나를 위해 너무 실행 가능하지 않을 수도 있도록 내 통제에 실제로 있지 않은 정면 api를 통해 전화를 받는다. –