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 閱讀(6991) 評論(0)  編輯  收藏 所屬分類: SpringHibernate

          主站蜘蛛池模板: 高雄市| 全州县| 临漳县| 扬州市| 临沭县| 张家港市| 芮城县| 修武县| 通化县| 宜都市| 文山县| 托克逊县| 衡水市| 东台市| 汾西县| 麦盖提县| 岳西县| 怀柔区| 满洲里市| 莎车县| 曲麻莱县| 罗江县| 凤阳县| 南涧| 蓬安县| 嘉定区| 富川| 福鼎市| 务川| 淮南市| 安西县| 康平县| 大城县| 禹城市| 宁明县| 昆明市| 嘉黎县| 邢台县| 阿合奇县| 巴彦县| 嘉善县|