11.3. Controlling database connections
11.3.1. DataSourceUtils
JNDI 를 사용하여 connection을 얻어오고 필요 없을 때 반환할 때 사용할 수 있는 편리한 static 메소드들을 제공하는 클래스입니다.
11.3.2. SmartDataSource
Classes using this interface can query whether or not the Connection should be closed after an operation. Spring's DataSourceUtils and JdbcTemplate classes automatically perform such a check.
11.3.3. AbstractDataSource
DataSource를 구현한 추상 클래스로 커스텀 DataSource 클래스르 만들고 싶을 때 이 클래스를 상속합니다.
11.3.4. SingleConnectionDataSource
SmartDataSource 를 구현하야 만든 클래스로 connection을 재사용합니다. 따라서 멀티쓰레드 환경에 적합하지 않으며 테스트 용도로 사용합니다.
11.3.5. DriverManagerDataSource
SmartDataSource 를 구현하여 만들었으며 매번 새로운 connection을 만들어서 사용합니다. 이것도 역시 테스트 용도로 사용하는 것 같습니다. 근데 위에 있는 거랑 정반대인데 언제 어떻게 쓰는건지는;;;
11.3.6. TransactionAwareDataSourceProxy
대상 DataSource를 감싸서 Spring Tracsaction 을 사용할 수 있는 프록시를 만드는 클래스 입니다. 이미 존재하고 있는 DataSource를 Spring JDBC와 Tracsaction 추상화 계층을 사용할 수 있도록 하는 클래스 인듯..
11.3.7. DataSourceTransactionManager
JDBC datasource를 위한 PlatformTransactionManager의 구현체입니다. dataSource 당 하나의 쓰레드를 보장합니다.
JtaTransactionManager는 못하는데 이 녀석은 커스텀 Isolation level을 제공합니다.
DataSourceUtils.getConnection(DataSource) 을 사용해서 JDBC connection을 가져오는 방법이 DataSource.getConnection 이 방법 보다 좋습니다. Spring 이 SQLException을 감싸서 만들어 둔 unchecked Exception을 던져주기 때문에~