잠시 동안 Java EE 플랫폼을 사용하여 프로그래밍했지만 가끔 더 큰 그림을 놓치고 있습니다.하나의 JTA 트랜잭션에서 여러 XA 데이터 소스
EJB 및 Container-Managed Transactions을 사용하면 단일 트랜잭션에서 여러 데이터 소스에 대한 작업을 어떻게 수행 할 수 있습니까?
내 코드는 다음과 같습니다
AAA-EJB 모듈
가 첫 번째 데이터 소스에 persistence.xml
포인팅을 포함합니다.
@Stateless
public class AaaDao {
@PersistenceContext
EntityManager em;
// using defaults: @TransactionAttribute(REQUIRED)
public void foo(...) {
em.persist(...);
}
}
BBB-EJB 모듈
는 제 2 데이터 소스를 가리키는 다른 persistence.xml
(다른 퍼시스턴스 유닛)을 포함한다.
@Stateless
public class BbbDao {
@PersistenceContext
EntityManager em;
// using defaults: @TransactionAttribute(REQUIRED)
public void bar(...) {
em.persist(...);
}
}
CCC-EJB 모듈
는 상기 두 개의 모듈에 의존한다.
@Stateless
public class CccBean {
@EJB AaaDao aaaDao;
@EJB BbbDao bbbDao;
// using defaults: @TransactionAttribute(REQUIRED)
public void qux(...) {
aaaDao.foo(...);
bbbDao.bar(...);
}
}
내 말은 : 정말 쉽지 않은가요? 나는 상황이 "마술처럼"작동하는 것처럼 보일 때마다 항상 회의적입니다. 나는 항상 "잡기"가 있다고 의심합니다.
Java EE 5, EJB 3.0, Oracle WebLogic 10.3의 JPA 1.0을 사용하십시오.