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进行配置不会产生此问题。
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值