簡體   English   中英

單個JTA事務中的多個XA數據源

[英]Multiple XA data sources in a single JTA transaction

我已經使用Java EE平台編程了一段時間,但有時我錯過了更大的圖景。

使用EJB和容器管理事務 ,如何在單個事務中對多個數據源執行操作?

我的代碼看起來像這樣:

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。

是的,這真的很容易。 CccBean.qux啟動一個新的XA事務時,主叫方AaaDao / BbbDao重復使用相同的交易(因為REQUIRED正如你指出)。 EntityManager使用DataSource ,而DataSource將使用Transaction enlistResource一個XAResource 當C ccBean.qux退出時,事務將被提交,並且事務管理器將在DataSource注冊的兩個XAResource上驅動兩階段提交。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM