AbstractTransactionalDataSourceSpringContextTests
아 굉장히 기다란 클래스 이름입니다. 한글로는 "추상 트랜잭셔널 데이타소스 스프링 컨텍스트 테스츠" 클래스. 일종의 농담입니다. -_-;;
AbstractTransactionalDataSourceSpringContextTests 클래스 API를 보았습니다.
1386765813.bmp분홍색 윗 부분은 JUnit 프레임웍입니다. 이 클래스는 기본적으로 JUnit 프레임웍 기반으로 만들어졌슴을 알 수 있습니다. 그러므로 assertEquals(int a, int b) 와 같은 test에 유용한 JUnit의 메소드들을 사용할 수 있었던 것입니다.
1109625600.bmp그리고 가지고 있는 member 변수로는 jdbcTemplate이 있으며 API를 인용하면 다음과 같습니다.
This is the central class in the JDBC core package. It simplifies the use of JDBC and helps to avoid common errors. It executes core JDBC workflow, leaving application code to provide SQL and extract results. This class executes SQL queries or updates, initiating iteration over ResultSets and catching JDBC exceptions and translating them to the generic, more informative exception hierarchy defined in the org.springframework.dao.pachage.JDBC 사용을 간편하게 해주는 객체 인듯 합니다.
멤버와 상속구조를 살펴 봐서는 대체 어떤 녀석인지 아직도 감이 잡히지 않습니다. 이 클래스의 API를 보면 "AbstractTransactionalSpringContextTests를 상속받은 클래스로 몇가지 편리한 기능을 추가를 했다. Expects a DataSource to be defined in the Spring application context.(?) 이 클래스는 JdbcTemplate을 가지고 있으며 트랜잭션을 DB에서 지우는 편리한 방법을 제공한다." 라고 나와있습니다.(가운데 문장은 해석이잘 안됨.ㅠ.ㅠ)
그래서 상위 클래스인 AbstractTransactionalSpringContextTests API를 살펴보았습니다.
트랙잭션이 발생 시키는 테스트를 할 때 유용한 슈퍼 클래스지만 기본적으로 트랜잭션을 각각의 테스트 메소드가 끝날 때 마다 롤백 시킨다.
다음과 같은 상황일 때 유용하다.
- 다른 test에 영향을 주지않고 DB에 data을 넣거나 삭제 할 때.
- 트랜잭션이 필요한 코드를 위해 transactional context를 제공
- 굳이 청소할 필요없이 DB에 아무거나 집어 넣어 볼때.
다음과 같은 유용한 메소드도 제공합니다.
- setComplete() - 트랜잭션을 롤백 시키고 싶지 않을 때(DB에 추가, 삭제한 결과를 남기고 싶을때 사용)
- endTransaction() - 트랜잭션을 좀더 빨리 끝내고 싶을 때(잘 모르겠네요. O/R mapping의 초기화 지연 기법을 검증할 때 사용할 수 있다는데 O/R mapping이 뭔지 모르겠네요.)
- startNewTransaction() - endTransaction() 호출 뒤에 이전 트랜잭션에 독립적인 새로운 트랜잭션을 시작할때 사용(역시.. endTransaction() 커플로 어떻게 언제 쓰는건지 모르겠습니다.)
아직은 뭔가 알아내야 할 것이 많군요. OTL 갈길이 너무 멀다. 멀다 한들 멈추리오..