我正在使用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/...)链接解释这个? 所有应用程序服务器/实现都是一样的吗?
感谢
哇...谢谢你对这个详细的解释和这些重要的链接!这是非常有趣的,并且使它更加清晰,即使这是一个复杂的主题。 它确认优化是供应商特定的。 非常感谢 –