我一直在使用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模塊
包含另一個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(...);
}
}
我的意思是:真的那麼容易嗎?當事情似乎「神奇地」起作用時,我總是有點懷疑,我總是懷疑有一個「捕捉」。
在Oracle WebLogic 10.3上使用Java EE 5,EJB 3.0和JPA 1.0。