//TransactionException클래스를 하나 만든후
public class TransactionManager {
//private static Connection conn; //static은 오직 메모리에 하나만 있기 때문에 여러쓰레드에서 사용할경우 문제발생
//밑에것처럼 만들면, 하나의 흐름에서 하나의 쓰레드를 만들수 있다.
private static ThreadLocal tlocal = new ThreadLocal();
public static void begin() throws TransactionException{
try{
Connection conn = DBUtil.getConnection();
conn.setAutoCommit(false);
tlocal.set(conn); //이렇게 하면 하나의 흐름안에 하나만 쓰게 됨.
}catch(Exception e){
throw new TransactionException(e);
}
}
public static void commit() throws TransactionException{
try{
Connection conn = tlocal.get();
conn.commit();
conn.close();
tlocal.set(null);
}catch(Exception e){
throw new TransactionException(e);
}
}
public static Connection get() throws TransactionException{
Connection conn = tlocal.get();
return conn;
}
public static void rollback() throws TransactionException{
//마찬가지로 롤백도 commit()대신 넣어주면 된다.
}
TransactionException은 런타임익셉션으로 만들어야한다. 굴릴때 에러가 나고 롤백이 되어야하기 때문이다.