我正在使用JBoss EAP 6.4(Java EE 6),我有一個問題與應用程序服務器處理XA數據源(通過EJB/JTA)的方式有關,如果2階段提交(2PC )總是使用或者如果應用「優化」。XA Datasource 1PC優化
比方說,我有這樣的:
@Stateless
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class MyEjb {
@EJB
private MyFirstEjb first;
@EJB
private MySecondEjb second;
// Transactional processing
public void process() {
first.processJpaStuff();
second.processJpaStuff();
}
}
假設:
- MyFirstEjb做使用XA數據源JPA查詢1.
- MySecondEjb做使用XA數據源2. JPA查詢
我正在使用XA數據源,因爲這些EJB可用於其他情況下2PC i (與其他數據源或JMS提供者一起)。
我現在想區分幾種情況:同一個應用程序服務器中
- MyFirstEjb和MySecondEjb部署在同一個應用程序(EAR)
- MyFirstEjb和MySecondEjb部署在獨立的應用程序(EAR) 0:
- MyFirstEjb和MySecondEjb被不同的應用程序的服務器
而子情形內展開
一個)XA數據源1 = XA數據源2
B)XA數據源1!= XA數據源2(相同的數據庫)
C)XA數據源1!= XA數據源2(不同的數據庫)
我想b)和c)的管理方式是一樣的。有一個全局事務,每個數據源與XA事務管理器協作。 2PC被應用。
那麼情況1.a)和2.a)呢?既然兩者最終都使用相同的數據源,那麼我認爲有一些優化不需要全局2PC事務處理呢? 如果是,是否有任何官方(JTA/JBoss/...)鏈接解釋這個? 所有應用程序服務器/實現都是一樣的嗎?
感謝
哇...謝謝你對這個詳細的解釋和這些重要的鏈接!這是非常有趣的,並且使它更加清晰,即使這是一個複雜的主題。 它確認優化是供應商特定的。 非常感謝 –