AFAIK outer method and inner method are run in 2 different transactions on db level (because of REQUIRES_NEW). outer method makes update and waits for the inner method to commit. Does it mean that outer hold lock on user resource till inner commits?
@Autowired
private TestDAO testDAO;
@Autowired
private SomeBean someBean;
@Override
@Transactional(propagation=Propagation.REQUIRED)
public void outerMethod(User user) {
testDAO.updateUser(user);
someBean.innerMethod();
}
SomeBean:
@Override
@Transactional(propagation=Propagation.REQUIRES_NEW)
public void innerMethod() {
//some work
}
Update:
Can this be presented like open 2 db consoles, then type and run one by one:
1. begin # 1st console
2. update user set...# 1st console
3. 4. 5. begin ...#do some work; commit; # 2nd console
6. commit; # 1st console