2009年1月2日星期五

Spring事务战(一)

进过一段时间的呕心沥血,实战了spring的事务配置(主要是Jta事务),虽然结果大家都知道,但是能一点一点的实战出来还是很值得高兴的。
操作系统  winXp
J2EE容器  OC4J / glassFish
数据库    Oracle 10g
spring2.5

开始!!

(一) 一个数据源
在容器中配置一个dataSource,在spring配置中用JNDI引用
然后配置TransactionManage
还可以配置容器自己的TransactionManage如:org.springframework.transaction.jta.OC4JJtaTransactionManager
配置事务控制在
execution(* test.domain..*Service.*(..))

场景:Service -> Sa (test.domain.ServiceA)  中的方法 ma

1 Sa.ma中插入数据 成功;
2 Sa.ma中插入数据,之后抛出uncheckedException,数据回滚;
3 使用不在test.domain..*  Service的service插入数据,之后抛出uncheckedException,数据不回滚
4 实战timeout参数
    
    Sa.ma中插入数据,之后sleep 10秒,数据回滚
5 将timeout参数去除,sleep 10秒,数据不回滚
6 自定义test.exception.TestException,Sa.ma中插入数据,之后抛出TestException,数据不回滚
    spring默认定义,抛出checkedException,数据不rollbank

7 使用参数
    Sa.ma中插入数据,之后抛出TestException,数据回滚

    debug信息:
    
    
    
    
    
    
    

8 使用参数
    Sa.ma中插入数据,之后抛出uncheckedException,数据回滚

9 使用参数
    Sa.ma中插入数据,之后抛出Test2Exception,数据不回滚

    debug信息:
    
    
    
    
    
    
    
    
    

10 使用参数
    Sa.ma中插入数据,之后抛出uncheckedException、TestException、Test2Exception 数据都回滚
11 使用参数
    
    
    Sa.ma方法抛出Test2Exception,数据不回滚
12 将某个方法配制为REQUIRES_NEW
    

14 datasource不用JNDI,在spring配置文件里配置一个datasource
    org.springframework.transaction.jta.JtaTransactionManage
    不能控制事务,需要使用
    
  
      
    JTA事务还是需要依赖于容器,由容器控制datasource


未完,待续。。。

没有评论: