public class UserTransaction { private static Map threadDbconnectionMap = new HashMap(); public void begin() { dataSource.getConnection().setAutoCommit(false); threadDbConnectionMap.put(Thread.currentThread(), dataSource.getConnection()); dataSource.getConnection().startTransaction(); } public void commit() { dataSource.getConnection().commitTransaction(); threadDbConnectionMap.remove(Thread.currentThread()); } } public class DataSource { private static Map threadDbConnectionMap = new HashMap(); public Connection getConnection() { if(threadDbConnectionMap.get(Thread.currentThread()) == null) { threadDbConnectionMap.put(Thread.currentThread(), DBCONNECTION_POOL.getConnection); } return (Connection)threadDbConnectionMap.get( Thread.currentThread()); } } |
UserTransaction的机制就是建立一个currentThread和一个DBconnection的map,使得在同一个thread下的所有db operation使用同一个connection,这样通过背后的同一个connection的commit或rollback来保证transaction的atomic