honzeland

          記錄點滴。。。

          常用鏈接

          統計

          Famous Websites

          Java

          Linux

          P2P

          最新評論

          org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-only

          發生這種異常的case:
              @Transactional
              
          public void foo() {
                  
          try{
                      bar();
                  } 
          catch (RuntimeException re) {
                      
          // caught but not throw further
                      
                  }
                  
              }

              @Transactional
              
          public void bar() {
                  
              }
          如果foo在調用bar的時候,bar拋出RuntimeException,Spring在bar return時將Transactional標記為Rollback only, 而foo捕獲了bar的RuntimeException,所以Spring將會commit foo的事務,但是foo和bar使用的是同一事務,因此在commit foo事務時,將會拋出UnexpectedRollbackException。注意:如果foo和bar在同一class中,不會出現這種情況,因為:

          Since this mechanism is based on proxies, only 'external' method calls coming in through the proxy will be intercepted. This means that 'self-invocation', i.e. a method within the target object calling some other method of the target object, won't lead to an actual transaction at runtime even if the invoked method is marked with @Transactional!

          可以通過配置log4j來debug Spring事務獲取情況:
          To delve more into it I would turn up your log4j logging to debug and also look at what ExerciseModuleController is doing at line 91, e.g.: add a logger for org.springframework.transaction

          posted on 2010-02-24 18:02 honzeland 閱讀(6985) 評論(0)  編輯  收藏 所屬分類: SpringHibernate

          主站蜘蛛池模板: 仪陇县| 历史| 黑河市| 松潘县| 新津县| 咸丰县| 开封县| 江都市| 鸡西市| 静安区| 青浦区| 扎赉特旗| 天津市| 宜川县| 马龙县| 厦门市| 集贤县| 安化县| 潞城市| 靖安县| 潼南县| 南涧| 万荣县| 黄浦区| 齐河县| 岑溪市| 云林县| 抚松县| 资兴市| 澄江县| 刚察县| 阿巴嘎旗| 洪洞县| 鞍山市| 浦江县| 林西县| 鹿泉市| 富顺县| 明水县| 淮南市| 高陵县|