[英]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.