关于用spring的JtaTransactionManager,配置分布式事务

如果容器支持jta,那么spring配置起来非常简单,因为spring提供了JtaTransactionManager,在这里面提供了几乎所有的服务器的jta的jndi名字,比如
*   " java:comp/UserTransaction "   for  Resin  2 . x ,  Oracle OC4J (Orion) ,  JOnAS (JOTM) ,  BEA WebLogic
*   " java:comp/TransactionManager "   for  Resin  3 . x
*   " java:appserver/TransactionManager "   for  GlassFish
*   " java:pm/TransactionManager "   for  Borland Enterprise Server and Sun Application Server (Sun ONE  7  and later)
*   " java:/TransactionManager "   for  JBoss Application Server

由于大部分服务器获取jta的方式都不尽相同,spring还针对不同的服务器提供了不同的jta实现,例如:
WebLogicJtaTransactionManager
WebSphereUowTransactionManager
OC4JJtaTransactionManager

具体内容参加:
http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/transaction/jta/JtaTransactionManager.html

不管是jdbc、hibernate还是ibatis,都可以通过JtaTransactionManager来配置分布式事务
下面简单贴出部分配置代码:
hibernate:
< beans >
  
< jee:jndi-lookup  id ="myDataSource1"  jndi-name ="dsjndi1"   />
  
< jee:jndi-lookup  id ="myDataSource2"  jndi-name ="dsjndi2"   />

  
< bean  id ="mySessionFactory1"
        class ="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" >
        
< property  name ="dataSource" >
            
< ref  bean ="myDataSource1"   />
        
</ property >
        
< property  name ="hibernateProperties" >
            
< props >
                
< prop  key ="hibernate.dialect" > org.hibernate.dialect.MySQLDialect </ prop >
                
< prop  key ="hibernate.show_sql" > true </ prop >
                
< prop  key ="hiberante.format_sql" > true </ prop >
            
</ props >
        
</ property >  
        
< property  name ="annotatedClasses" >
            
< list >
                
< value > com.landor.test.entity.User </ value >
            
</ list >
        
</ property >
        
< property  name ="annotatedPackages" >
            
< list >
                
< value > com.landor.test.entity </ value >
            
</ list >
        
</ property >
  
</ bean >
  
< bean  id ="mySessionFactory2"
        class ="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" >
        
< property  name ="dataSource" >
            
< ref  bean ="myDataSource2"   />
        
</ property >
        
  
</ bean >

  
< bean  id ="myTxManager"  class ="org.springframework.transaction.jta.JtaTransactionManager" />
  <!--如果默认id=
transactionManager,那么可以有下面的标签,这样spring会自动寻找相应的jta的jndi并且注入
  <tx:jta-transaction-manager/> -->
   < tx:advice  id ="txAdvice"  transaction-manager ="myTxManager" >
    
< tx:attributes >
        
< tx:method  name ="select*"  read-only ="true"  propagation ="REQUIRED" />
        
< tx:method  name ="find*"  read-only ="true"   propagation ="REQUIRED" />
        
< tx:method  name ="save*"   propagation ="REQUIRED"  isolation ="REPEATABLE_READ" />
        
< tx:method  name ="update*"   propagation ="REQUIRED"  isolation ="REPEATABLE_READ" />
        
< tx:method  name ="add*"   propagation ="REQUIRED"  isolation ="REPEATABLE_READ"   />
        
< tx:method  name ="delete*"   propagation ="REQUIRED"  isolation ="REPEATABLE_READ" />
    
</ tx:attributes >
  
</ tx:advice >

</ beans >
ibatis:
ibatis与hibernate是一样的,只需要将hibernate的sessionFactory部分更换一下
    ......
   
< bean  id ="sqlMap1Client"
        class ="org.springframework.orm.ibatis.SqlMapClientFactoryBean" >
        
< property  name ="dataSource"  ref ="myDataSource1"   />
        
< property  name ="configLocation"  value ="xxx/SqlMapConfig.xml"   />
    
</ bean >
    
< bean  id ="sqlMap2Client"
        class ="org.springframework.orm.ibatis.SqlMapClientFactoryBean" >
        
< property  name ="dataSource"  ref ="OssDS"   />
        
< property  name ="configLocation"  value ="xxx/SqlMapConfig.xml"   />
    
</ bean >
    ......

转载于:https://my.oschina.net/pangzhuzhu/blog/318141

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值