EJB分布式事务的一个小问题

 
最近对EJB分布式事务进行了一些接触,在操作过程中遇到一个问题,就是不能完全保证事务的完整性,偶尔会有小几率的失败,通过上网查找,发现国内关于这个问题的资料还是很少,所以现在把它记录下来,以备参考:
 
遇到警告:
WARN [TxConnectionManager$LocalXAResource] Prepare called on a local tx. Use of local transactions on a jta transaction with more than one branch may result in inconsistent data in some cases of failure.
发生场景:
在JBoss中,用Session Bean进行容器事务管理,若一个事务方法中操作多个数据库,而对这些数据库的数据源配置是local-tx-datasource,就会产生这样的警告(在应用局部/本地事务进行jta事务管理中,若设计多个数据库流程,在某些情况下会产生一致性失败)。
 
问题及解决:
出现上述失败及警告的原因是配置数据源类型错误,正确的配置是在JBoss中进行分布式的数据源配置,文件为mssql-xa-ds.xml,配置内容如下
 
<datasources>
  
<xa-datasource>
    
<jndi-name>JSQLConnectDB_Test_locale</jndi-name>
    
<track-connection-by-tx/>
    
<isSameRM-override-value>false</isSameRM-override-value>
    
<xa-datasource-class>net.sourceforge.jtds.jdbcx.JtdsDataSource</xa-datasource-class>
    
<xa-datasource-property name="ServerName">192.168.11.185</xa-datasource-property>
    
<xa-datasource-property name="DatabaseName">qinysong</xa-datasource-property>
    
<user-name>sa</user-name>
    
<password>123456</password>
  
</xa-datasource>
  
<xa-datasource>
    
<jndi-name>JSQLConnectDB_Test_Remote</jndi-name>
    
<track-connection-by-tx/>
    
<isSameRM-override-value>false</isSameRM-override-value>
    
<xa-datasource-class>net.sourceforge.jtds.jdbcx.JtdsDataSource</xa-datasource-class>
    
<xa-datasource-property name="ServerName">192.168.8.92</xa-datasource-property>
    
<xa-datasource-property name="DatabaseName">qinysong</xa-datasource-property>
    
<user-name>sa</user-name>
    
<password>xmission</password>
  
</xa-datasource>
</datasources>
 
备注:若EJB事务方法中只是对一个数据源进行多个步骤的操作,而不是对于多个数据源,则用local-tx-datasource进行配置不会产生此问题。
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值