2015-04-16 43 views
0

我有彈簧注入一個服務到自身允許服務進行事務性調用自己。不幸的是,我發現一個引發NullPointerException並被捕獲的requires_new方法並沒有回滾新的事務。外部事務不會中斷,這是我想要的,但我無法解釋爲什麼需要新的事務不會回滾。有任何想法嗎?Proxied REQUIRES_NEW方法不會回滾(spring)

@Service(value="orderService") 
@Transactional 
public class OrderServiceImpl implements OrderService { 

    @Resource 
    private OrderService orderService; // transactional reference to this service 

    public void requiredTransMethod(){ 
     try { 
      orderService.requiresNewTransMethod(); 
     }catch(Throwable t){ 
      LOG.error("changes from requiresNewTransMethod call should be rolled back right?", t); 
     } 
    } 

    @Transactional(propagation = Propagation.REQUIRES_NEW) 
    public void requiresNewTransMethod() { 
     // database changes that are NOT rolled back 
     throw new NullPointerException("bla bla bla"); 
    } 

} 
+0

我注意到,在requiredTransMethod()返回控件之前,沒有被回滾的數據庫更改不會被提交。這使我相信requiresNewTransMethod()正在使用調用者的事務。在實際實現中調用的其他require_new方法在將控制權返回給requiredTransMethod()後立即提交。不確定require_new方法和不執行方法之間有什麼區別。 – user2832649

+0

即使使用Propagation.NOT_SUPPORTED註釋了requiredTransMethod,requireNewTransMethod()更改也不會提交,直到requiredTransMethod()返回。 – user2832649

回答

相關問題