9.4. Resource synchronization with transactions
이번에 볼 것은 이전 글에서 살펴보았던 (1)각 종 TransactionManager를 사용하여 어떻게 Hibernate나 JDBC에 있는 트랙잭션 관련 API를 사용하느냐 (2)해당 자원[footnote]Hibernate나 JDBC, JTA등의 실제 트랜잭션을 처리하는 녀석들을 Resource라고 표현하고 있습니다.[/footnote]을 잘 가져왔고 creation/reuse/cleanup/trigger/transaction
synchronization이 필요할 때 잘 동작하는지 확인 하는 것 입니다.
9.4.1. High-level approach
추천하는 방법으로 추상화 단계가 높은 Template 클래스를 사용하여 creation/reuse/cleanup/trigger/transaction
synchronization 이런 일들을 할 수 있습니다.
예외를 전부 매핑해줍니다.
내부적으로 해당 자원의 API를 사용하는 것이지 Spring 의 API가 대체하는 것은 아닙니다.
'수' 작업으로 만든 HibernateTemplate
ex) HibernateTemplate, JdbcTemplate, JdoTemplate
9.4.2. Low-level approach
추상화 단계가 낮은 Utils 클래드를 사용해서 원하는 작업을 할 수도 있습니다.
Connection conn = DataSourceUtils.getConnection(dataSource);
이런식으로 사용하며 역시 예외를 전부 맵핑해서 좀더 유용한 unchecked 예외로 뿌려 줍니다.
ex) DataSourceUtils, SessionFactoryUtils, PersistenceManagerFactoryUtils
9.4.3. TransactionAwareDataSourceProxy
가장 낮은 단계의 클래스로 타겟 DataSource의 프록시입니다. Spring이 관리하는 트랙잭션이라는 정보를 추가하기 위해 타겟 DataSource를 감쌉니다. DataSource 인터페이 타입을 요구하는 기존 코드에서 작업해야 한다면 이 걸 사용할 수 있겠습니다.
그런 경우가 아니라면 추상화 단계가 높은 것을 사용하길 권장합니다.