2015-04-16 123 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

回答

相关问题