sitelink1  
sitelink2  
sitelink3  
extra_vars6  

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<!--
  - Application context definition for JPetStore's data access layer.
  - Accessed by business layer objects defined in "applicationContext.xml"
  - (see web.xml's "contextConfigLocation"). 

이 설정화일은 "applicationContext.xml"에 정의된 비즈니스 레이어 오브젝트들에 의해 참조된다.

  -
  - This version of the data access layer works on a combined database,
  - using a local DataSource with DataSourceTransactionManager. It does not
  - need any JTA support in the container: It will run as-is in plain Tomcat. 

JTA(Java Transaction API) : J2EE 트랜잭션 매니저 (JTS:Java Transaction Service)를
실제 J2EE component(servlet,JSP,EJB..)에서 어떻게 사용할 것인지, 그를 위한 API 들을 정의한 spec.
근데 여기선 데이터베이스 억세스시에 DataSourceTransactionManager와 함께 local DataSource를
사용하고 있어서 container에서 그 어떤 JTA도 필요없다는군.
연동되어 있는 둘 이상의 데이터베이스 집단을  combined database라고 한다.
그 combined database가 JTA를 통해서 접근하게 되는 것이고...

  -->
<beans>
 <!-- ========================= RESOURCE DEFINITIONS ========================= -->
 <!-- Local Apache Commons DBCP DataSource that refers to a combined database -->
 <!-- (see dataAccessContext-jta.xml for an alternative) -->
 <!-- The placeholders are resolved from jdbc.properties through -->
 <!-- the PropertyPlaceholderConfigurer in applicationContext.xml -->
 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  <property name="driverClassName" value="${jdbc.driverClassName}"/>
  <property name="url" value="${jdbc.url}"/>
  <property name="username" value="${jdbc.username}"/>
  <property name="password" value="${jdbc.password}"/>
 </bean> 

jdbc.properties에 정의한 DB접속 정보들을 DataSource 화 한다.
jdbc.properties은 열어보면 그냥 URL과 ID랑 PASSWORD가 있을 뿐

 <!-- Transaction manager for a single JDBC DataSource -->
 <!-- (see dataAccessContext-jta.xml for an alternative) -->
 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dataSource"/>
 </bean> 

위에서 생성한 dataSource 참조하여 스프링의 DataSourceTransactionManager가 움직인다.

 <!-- SqlMap setup for iBATIS Database Layer -->
 <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
  <property name="configLocation" value="WEB-INF/sql-map-config.xml"/>
  <property name="dataSource" ref="dataSource"/>
 </bean> 

SqlMap은 이미 어플리케이션과 Database를 연결하는데 있어서 몰라서는 안되는 OR매핑 프레임웍중의 하나이다.
위에서 생성한 dataSource sql-map-config.xml의 설정을 이용한다.
이를 통해 생성되는 객체의 id는 sqlMapClient이다.


 <!-- ========================= DAO DEFINITIONS: IBATIS IMPLEMENTATIONS ========================= -->

 

 

DAO(Data Access Object)에 대한 정의다. 싱글 데이터베이스이므로 대부분이  빈관리를 위한 sqlMapClient 객체만 참조하고 있다.

 <bean id="accountDao" class="org.springframework.samples.jpetstore.dao.ibatis.SqlMapAccountDao">
  <property name="sqlMapClient" ref="sqlMapClient"/>
 </bean>
 <bean id="categoryDao" class="org.springframework.samples.jpetstore.dao.ibatis.SqlMapCategoryDao">
  <property name="sqlMapClient" ref="sqlMapClient"/>
 </bean>
 <bean id="productDao" class="org.springframework.samples.jpetstore.dao.ibatis.SqlMapProductDao">
  <property name="sqlMapClient" ref="sqlMapClient"/>
 </bean>
 <bean id="itemDao" class="org.springframework.samples.jpetstore.dao.ibatis.SqlMapItemDao">
  <property name="sqlMapClient" ref="sqlMapClient"/>
 </bean>
 <!-- Refers to the combined database here -->
 <!-- (see dataAccessContext-jta.xml for an alternative) -->
 <bean id="orderDao" class="org.springframework.samples.jpetstore.dao.ibatis.SqlMapOrderDao">
  <property name="sqlMapClient" ref="sqlMapClient"/>
  <property name="sequenceDao" ref="sequenceDao"/>
 </bean> 

 

 

 

다른 설정들은 sqlMapClient 객체만 참조하는데 이것은 sequenceDao객체도 참조한다. sequenceDao의 정의는 하단부에 나와있다.

 <!-- OrderDao definition for MS SQL Server -->
 <!-- (to be used instead of the default orderDao) -->
 <!--
 <bean id="orderDao" class="org.springframework.samples.jpetstore.dao.ibatis.MsSqlOrderDao">
  <property name="sqlMapClient" ref="sqlMapClient"/>
  <property name="sequenceDao" ref="sequenceDao"/>
 </bean>
 -->

 

 

 

MS SQL 데이터베이스에서는 orderDao객체 생성시 이것을 이용하라는 것 같다.
클래스가 틀리다. 아마 쿼리의 내용이 다를듯 하다.

 <!-- Refers to the combined database here -->
 <!-- (see dataAccessContext-jta.xml for an alternative) -->
 <bean id="sequenceDao" class="org.springframework.samples.jpetstore.dao.ibatis.SqlMapSequenceDao">
  <property name="sqlMapClient" ref="sqlMapClient"/>
 </bean> 

 

 

 

sqlMapClient객체를 이용하여 생성되는 것인데 orderDao라는 것이 이 DAO를 이용하고  있다.

 <!-- SequenceDao definition for Oracle databases -->
 <!-- (to be used instead of the default sequenceDao) -->
 <!--
 <bean id="sequenceDao" class="org.springframework.samples.jpetstore.dao.ibatis.OracleSequenceDao">
  <property name="sqlMapClient" ref="sqlMapClient"/>
 </bean>
 -->

 

 

 

sequenceDao객체를 생성할때도 DB마다 특성을 탄다. 오라클일땐 이것을 이용한다.

</beans>