Java XA数据源1PC优化
我正在使用JBoss EAP 6.4(Java EE 6),我有一个问题与应用程序服务器处理XA数据源的方式(通过EJB/JTA)以及是否始终使用2阶段提交(2PC)或是否应用了“优化”有关 假设我有这个:Java XA数据源1PC优化,java,transactions,ejb,jta,xa,Java,Transactions,Ejb,Jta,Xa,我正在使用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
@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查询
谢谢。MyFirstEjb和MySecondEjb部署在同一个应用程序(EAR)中 当数据源不同时,如您所知,如果驱动程序和基础数据源无法加入全局事务,或者如果驱动程序未配置为加入全局事务,则会出现特定错误 对于其他情况,除此之外,理想的场景是业务层同时处理数据源,所有客户机都处理业务层(应避免使用处理相同数据源的不同应用程序)。这就是可能发生的事情 2.MyFirstEjb和MySecondEjb部署在同一应用服务器内的不同应用程序(EAR)中 如果部署在同一个应用服务器上,但使用不同的.ear,那么客户端将通过远程接口访问它们,因此每个应用服务器都会启动一个完全不同的线程/事务(需要新的)。如果出现问题,客户端将得到一个EJBException。从客户端的角度来看,没有全局事务 3.MyFirstEjb和MySecondEjb部署在不同的应用服务器中
如果ejb部署在不同的应用程序服务器上,则同样适用。它们通过远程接口访问,因此它们各自启动一个全新的事务。1.MyFirstEjb和MySecondEjb部署在同一个应用程序(EAR)中。 当数据源不同时,如您所知,如果驱动程序和基础数据源无法加入全局事务,或者如果驱动程序未配置为加入全局事务,则会出现特定错误 对于其他情况,除此之外,理想的场景是业务层同时处理数据源,所有客户机都处理业务层(应避免使用处理相同数据源的不同应用程序)。这就是可能发生的事情 2.MyFirstEjb和MySecondEjb部署在同一应用服务器内的不同应用程序(EAR)中 如果部署在同一个应用服务器上,但使用不同的.ear,那么客户端将通过远程接口访问它们,因此每个应用服务器都会启动一个完全不同的线程/事务(需要新的)。如果出现问题,客户端将得到一个EJBException。从客户端的角度来看,没有全局事务 3.MyFirstEjb和MySecondEjb部署在不同的应用服务器中 如果ejb部署在不同的应用程序服务器上,则同样适用。它们是通过远程接口访问的,因此它们各自启动一个全新的事务。视情况而定 JTA(事务协调器)对EJB或应用程序一无所知。它只关注XAResources和关联的事务分支。通常情况下,管理JPA为实体bean使用的连接池的JCA将为JTA提供每个使用的数据源一个XAResource。JTA在相同的全局tx id下为每个分支分配不同的分支限定符 在事务终止期间,JTA准备好每个XAResource,正是在这一点上开始优化。如果db引擎检测到它有多个分支(连接/XAResources)用于相同的全局发送,它可能会从第一个XAResource返回PREPARED,但只从剩余的资源中读取。假设tx因此只有一个准备好的资源,其余的都是只读的,那么它可以相应地优化终端的其余部分。见例 请注意,根据供应商的不同,“db引擎”和“数据库”并不完全相同。一些系统将在同一台服务器上托管多个数据库,并允许在它们之间进行优化,而另一些系统可能将每个数据库视为单独的事务引擎范围,而不会对此类情况进行优化。数据源也可能仅在用于连接的userid/schema上有所不同,依赖于权限/schema名称空间来隔离应用程序,而不需要使用不同的数据库。在这种情况下,优化几乎总是有效的 在某些情况下,应用程序使用相同的XADatasource,JCA只向JTA注册一个XAResource,这可能允许它使用更激进的1PC优化 同时