분류 전체보기 (122)
공지사항 (3)
주저리 주저리 (26)
Ubuntu (3)
개발관련 (37)
개발이야기 (6)
Language (20)
Framework (5)
Pattern (2)
DataBase (4)
Server (4)
Book (9)
스터디 (0)
HFSD  STRUTS2  자바  mylyn  oracle  db connection  Eclipse  ubuntu netbook remix  Head First Software Development  다짐 
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
+ dazzi님 블로그
+ 온 오프 믹스! (모임,세미…
+ kenu blog
+ OKJSP: 사는 얘기
+ 정호님 블로그
+ 존경하는회수형님
+ 자바지기님 블로그
+ 루비나라 출입구
+ 은정이누나 블롯
+ Total :
+ Today :
+ Yesterday :
  

 

 

 

ibatis _해당되는 글 1건
2008.10.10   ibatis Transaction 

 

ibatis Transaction
+   [개발이야기]   |  2008. 10. 10. 12:53  

트랜잭션
디폴트에 의하면 SqlMapClient인스턴스에서 어느 executeXxxx()메소드를 호출하는 것은 자동커밋/롤백(autocommit/
rollback)을 하는것이다. 이것은 executeXxxx()의 각각의 호출이 하나의 작업단위가 되는 것을 의미한다. 이것은 정
말로 간단하다. 하지만 하나의 작업단위로 수행해야할 많은 수의 statement(이를 테면 그룹처럼 모두 성공하거나 실패하는
것)를 가진다면 좋은생각이 아니다. 이것은 트랜잭션이 작동하는 시점이다.
만약 당신이 전역(SQL Map설정파일에 의해 설정된) 트랜잭션을 사용한다면 당신은 자동커밋을 사용할수 있고 여전히 작업단
위 행위를 달성할수 있다. 어쨌든 이것은 트랜잭션 범위 경계는 성능원인에 영향을 끼친다. 그리고 이것은 connection pool과
데이터베이스 연결 초기화에 트래픽을 감소시킨다.
SqlMapClient인터페이스는 트랜잭션경계를 지정하기 위해 메소드를 가진다. 트랜잭션이 시작되고 SqlMapClient인터페이스의
다음과 같은 메소드를 사용함으로써 커밋되고/되거나 롤백된다.
트랜잭션을 시작함으로써 당신은 connection pool로부터 connection을 가져오고 SQL쿼리와 update를 가져오기 위해 열린다.
트랜잭션을 사용하는 에제는 다음과 같다.


endTransaction()가 에러에도 불구하고 호출되는 방법에 주의하라. 이것은 정화(cleanup)을 확실히 하기 위해서 중요한 단계이다. 그 규칙은 만약 당신이 startTransaction()을 호출한다면 endTransaction()을 받드시 호출해야 한다. (당신이 커밋을하거나 하지않더라도)
주의! 트랜잭션은 내포될수 없다. 한 개이상의 같은 쓰레드로부터 .startTransaction()을 호출하는 것은 commit()나
rollback()을 호출하기 전에 던져질 예외를 야기한다. 반면에 각각의 쓰레드는 SqlMapClient 인스턴스마다 적어도 하나의 열려있는 트랜잭션 가질수 있다.
주의! SqlMapClient 트랜잭션은 저장 트랜잭션 객체를 위해 자바의 ThreadLocal을 사용한다. 이것은 각각의
startTransaction()을 호출하는 쓰레드가 그들의 트랜잭션을 위해 유일한 Connection객체를 가질것이라는걸 의미한다. 데이터소스로 connection을 반환(또는 connection을 닫는)하는 유일한 방법은 commitTransaction()이나 endTransaction()을 호출하는것이다. 아무것도 하지않으면 당신의 pool이 connection이 바닥나거나 잠기게 되는 현상을 야기할것이다.

출처] ibatis SQL Maps 개발자 가이드 version2.0 (www.ibatis.com)

 
 
        
<<이전 | 1 | 다음>>

별책부록's Blog is powered by Daum