package com.example.fp.tx; import java.util.List; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.support.TransactionCallbackWithoutResult; import org.springframework.transaction.support.TransactionTemplate; import com.example.fp.User; import com.example.fp.UserManager; /** * This class decorates a given AccountManager by adding transaction boundaries. * * @author kamal * */ public class TxUserManager implements UserManager { private UserManager userManager; public void setUserManager(UserManager userManager) { this.userManager = userManager; } private TransactionTemplate txTemplate; public void setTxManager(DataSourceTransactionManager txManager) { txTemplate = new TransactionTemplate(txManager); } @Override public User find(int uid) { return userManager.find(uid); } @Override public void delete(int uid) { txTemplate.execute(new TransactionCallbackWithoutResult() { @Override protected void doInTransactionWithoutResult(TransactionStatus arg0) { userManager.delete(uid); } }); } @Override public void create(User user) { txTemplate.execute(new TransactionCallbackWithoutResult() { @Override protected void doInTransactionWithoutResult(TransactionStatus arg0) { userManager.create(user); } }); } @Override public List findAll() { return userManager.findAll(); } @Override public void update(User user) { txTemplate.execute(new TransactionCallbackWithoutResult() { @Override protected void doInTransactionWithoutResult(TransactionStatus arg0) { userManager.update(user); } }); } @Override public void setPassword(int uid, String plainTextPassword) { txTemplate.execute(new TransactionCallbackWithoutResult() { @Override protected void doInTransactionWithoutResult(TransactionStatus arg0) { userManager.setPassword(uid, plainTextPassword); } }); } }