【发布时间】:2017-03-13 16:06:44
【问题描述】:
我正在使用 JBoss EAP 6.4 (Java EE 6),我有一个关于应用程序服务器处理 XA 数据源的方式(通过 EJB / JTA)以及是否始终使用 2 阶段提交 (2PC) 的问题或者如果应用了“优化”。
假设我有这个:
@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 数据源 1 执行 JPA 查询。
- MySecondEjb 使用 XA 数据源 2 执行 JPA 查询。
我使用 XA 数据源是因为这些 EJB 可用于需要 2PC 的其他情况(以及另一个数据源或 JMS 提供程序)。
我现在想区分几种情况:
- MyFirstEjb 和 MySecondEjb 部署在同一个应用程序 (EAR) 中
- MyFirstEjb 和 MySecondEjb 部署在同一应用程序服务器内的不同应用程序 (EAR) 中
- MyFirstEjb 和 MySecondEjb 部署在不同的应用服务器中
及子案例:
a) 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 / ...)链接可以解释这一点? 所有应用服务器/实现都一样吗?
谢谢
【问题讨论】:
标签: java transactions ejb jta xa