论坛首页 Java企业应用论坛

详解spring事务属性

浏览 132275 次
该帖已经被评为良好帖
作者 正文
   发表时间:2007-05-14  
好文章!但是为什么使用PROPAGATION_REQUIRES_NEW,就一定要使用JtaTransactionManager作为事务管理器呢?
0 请登录后投票
   发表时间:2007-05-14  
spiritfrog 写道
好文章!但是为什么使用PROPAGATION_REQUIRES_NEW,就一定要使用JtaTransactionManager作为事务管理器呢?


因为需要把前一个事务挂起!!!
目前只有jta事务管理器才能实现把事务挂起和恢复事务!!!
0 请登录后投票
   发表时间:2007-05-14  
jdbc的Connection只有简单的commit 和rollbacke

只有jta事务管理器才有suspend和resume!
0 请登录后投票
   发表时间:2007-05-14  
removed
0 请登录后投票
   发表时间:2007-05-14  
关于事务传播属性还有一个常见的误解:
java 代码
 
  1. class A{  
  2.   
  3. //事务属性 PROPAGATION_REQUIRED
  4. methodA(){ 
  5.       ......
  6.       ......
  7.       methodB();  
  8. }  
  9.   
  10. //事务属性 PROPAGATION_REQUIRES_NEW
  11. methodB(){  
  12.       .......  
  13. }  
  14.   
  15. }  

此时外部程序对methodA的调用只会发起一个事务,methodB的PROPAGATION_REQUIRES_NEW属性不会起作用
因为methodA是在内部对methodB直接调用,AOP声明式事务自然就不起作用了
所以外部程序对methodB的调用仍然是PROPAGATION_REQUIRES_NEW的
0 请登录后投票
   发表时间:2007-05-14  
klyuan 写道
spiritfrog 写道
好文章!但是为什么使用PROPAGATION_REQUIRES_NEW,就一定要使用JtaTransactionManager作为事务管理器呢?


因为需要把前一个事务挂起!!!
目前只有jta事务管理器才能实现把事务挂起和恢复事务!!!


可以另取一个连接啊
0 请登录后投票
   发表时间:2007-05-14  
Qieqie 写道
klyuan 写道
jdbc的Connection只有简单的commit 和rollbacke

只有jta事务管理器才有suspend和resume!
not the case!

jdbc with "save points" supports suspend and resume


晕!!!当然你可以通过保存点来实现事务挂起和恢复!!!
前题是必须是同一个connection!!!!

当一个是数据库事务,而另外一个不是事务库事务时,怎么办?

并且,spring对require_new的处理,并没有有像NESTED那样使用JDBC 的save point!!!!
0 请登录后投票
   发表时间:2007-05-14  

daquan198163 写道:
关于事务传播属性还有一个常见的误解:
java 代码
 
  1. class A{  
  2.   
  3. //事务属性 PROPAGATION_REQUIRED
  4. methodA(){ 
  5.       ......
  6.       ......
  7.       methodB();  
  8. }  
  9.   
  10. //事务属性 PROPAGATION_REQUIRES_NEW
  11. methodB(){  
  12.       .......  
  13. }  
  14.   
  15. }  

此时外部程序对methodA的调用只会发起一个事务,methodB的PROPAGATION_REQUIRES_NEW属性不会起作用
因为methodA是在内部对methodB直接调用,AOP声明式事务自然就不起作用了
所以外部程序对methodB的调用仍然是PROPAGATION_REQUIRES_NEW的
我不太明白!!!你是支持上面这种说法还是不支持!!!
“此时外部程序对methodA的调用只会发起一个事务,methodB的PROPAGATION_REQUIRES_NEW属性不会起作用
因为methodA是在内部对methodB直接调用,AOP声明式事务自然就不起作用了
实际情况并不是这样子的!!!




0 请登录后投票
   发表时间:2007-05-14  
daquan198163 写道
klyuan 写道
spiritfrog 写道
好文章!但是为什么使用PROPAGATION_REQUIRES_NEW,就一定要使用JtaTransactionManager作为事务管理器呢?


因为需要把前一个事务挂起!!!
目前只有jta事务管理器才能实现把事务挂起和恢复事务!!!


可以另取一个连接啊


required_new,当存在一个当前事务时,是会去新取得一个连接的!!!!
0 请登录后投票
   发表时间:2007-05-14  
当然是支持的了
methodA是在内部对methodB直接调用,他们在同一个类中,调用不能被aop拦截到
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics