package cn.javass.spring.chapter9.service.impl.nested;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallbackWithoutResult;
import org.springframework.transaction.support.TransactionTemplate;
import cn.javass.spring.chapter9.dao.IAddressDao;
import cn.javass.spring.chapter9.model.AddressModel;
import cn.javass.spring.chapter9.service.IAddressService;
import cn.javass.spring.chapter9.util.TransactionTemplateUtils;
public class RequiredAndNestedAddressServiceImplWithSuccess implements IAddressService {
private IAddressDao addressDao;
private PlatformTransactionManager txManager;
public void setAddressDao(IAddressDao addressDao) {
this.addressDao = addressDao;
}
public void setTxManager(PlatformTransactionManager txManager) {
this.txManager = txManager;
}
@Override
public void save(final AddressModel address) {
TransactionTemplate transactionTemplate =
TransactionTemplateUtils.getTransactionTemplate(
txManager,
TransactionDefinition.PROPAGATION_NESTED,
TransactionDefinition.ISOLATION_READ_COMMITTED);
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(TransactionStatus status) {
addressDao.save(address);
}
});
}
@Override
public int countAll() {
return addressDao.countAll();
}
}