[ibatis] sqlMapConfig.xml 파일 설정 및 정리[ibatis] sqlMapConfig.xml 파일 설정 및 정리

Posted at 2014.05.09 17:09 | Posted in Framework/Ibatis2



facebook에 글올리기



sqlMapConfig.xml 파일 설정 및 정리



SQL Maps는 DataSource, Data Mapper에 대한 설정이나, Thread 관리와 같은 SQL Maps와 다른 옵션에 대한 설정을 하는 sqlMapConfig.xml 을 사용한다.


* sqlMapConfig.xml 사용의 예


 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
    "http://www.ibatis.com/dtd/sql-map-config-2.dtd">


<sqlMapConfig>
    <settings enhancementEnabled="true" maxTransactions="5"
        maxRequests="32" maxSessions="10" useStatementNamespaces="true"/>

        
    <sqlMap resource="com/test/testSQL.xml" />
     
</sqlMapConfig>


sqlMapConfig.xml 에 사용하는 태그의 종류는 다음과 같다.


① <?xml version="1.0" encoding="UTF-8"?>  : xml 파일 선언 (필수)

② <!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
    "http://www.ibatis.com/dtd/sql-map-config-2.dtd">

 : sqlMapConfig.xml 의 형식을 정의하는 sql-map-config2.dtd 선언 (필수)

③ <sqlMapConfig> : XML 헤더 (필수)

④ <properties> : 명시된 프로퍼티 에서 변수 값을 가져온다.

⑤ <settings> : 트랜잭션 관리 및 sqlMapClient 상세 제어

⑥ <typeAlias> : 긴 전체 경로를 포함한 클래스명을 짧은 이름으로 사용하기 위한 별칭 지정

⑦ <transactionManager><dataSource> : SimpleDataSource를 이용해 SQL Map을 사용하기 위한 데이터소스 설정

⑧ <sqlMap> : sqlMapConfig에 의해 로드되는 모든 SQL Map 파일을 가져온다. 


(1) <properties> 요소


properties 파일을 읽어 변수 값을 사용할 데 사용한다.


<properties resource = "file:conf/jdbc.properties"/>


con/jdbc.properties 파일을 읽어 property 들을 가져온다.

읽어온 property 들은 다음과 같이 사용할 수 있다.


<property name="JDBC.DRIVER" value="${driver}"/>


위와 같이 사용하면 jdbc.properties 에 있는 driver 의 내용을 가져와 대입할 수 있다.


(2) <settings> 요소


sqlMapClient 인스턴스를 위해 다양한 옵션과 최적화를 설정한다.


<settings

cacheModelsEnabled="true"

enhancementEnabled="true"

lazyLoadingEnabled="true"

maxRequests="128"

maxSession="10"

maxTransaction="5"

useStatementNamespaces="false"

/>


옵션 

설명 

 사용 예

Default 

maxRequests 


동시에 SQL 문을 수행할 수 있는 Thread의 개수이다.

셋팅 값보다 많은 Thread는 다른 Thread가 수행을 완료할때까지 블록된다. 

최소한 10개의 maxTransactions 이고 언제나 maxSession과 maxTransactions보다 크다.

최대치를 줄이면 성능향상이 되는 경우가 있다.


 maxRequests="256"

 512

maxSessions


이것은 주어진 시간동안 활성화될 수 있는 session의 갯수이다. session은 명시적으로 주어질 수도 있고 프로그램적으로 요청도리 수도 있고 Thread가 sqlMapClient 인스턴스를 사용할때마다 자동적으로 생성될 수도 있다. 이 값은 항상 maxTransaction 보다 같거나 커야 하고 maxRequests보다 작아야 한다. 

maxSession 값의 최대치를 줄이면 전체적인 메모리 사용량을 줄일 수 있다.


 maxSession="64"

128 

maxTransactions


이것은 한꺼번에 sqlMapClient.startTransaction()에 들어갈 수 있는 Thread의 최대 갯수이다. 셋팅값보다 많은 Thread는 다른 Thread가 나올때까지 블록된다.

이 값은 언제나 maxSessions보다 작거나 같아야 하고 maxRequests보다 작아야 한다. maxTransaction의 최대치를 줄이면 성능향상이 되는 경우가 있다. 


maxTransactions="16" 

32 

cacheModelsEnabled


이 값은 sqlMapClient 를 위한 모든 캐쉬모델을 가능하게 하거나 가능하지 않게 한다. 디버깅시 도움이 된다. 


cacheModelsEnabled

="true" 

true 

lazyLoadingEnabled

이 값은 sqlMapClient를 위한 lazy 로딩을 가능하게 하거나 가능하지 않게 한다. 디버깅시 도움이 된다. 

lazyloadingEnabled

="true" 

true 

enhancementEnabled 


이 값은 향상된 lazy 로딩처럼 최적화된 자바빈즈 속성 접근을 위해 런타임시 바이트코드 향상을 가능하게 한다.

 

enhancementEnabled

="true"

false 

useStatementNamespaces 


이 값을 true로 셋팅하면 sqlmap 이름과 statement 이름으로 구성된 전체 이름으로 매핑된 statement를 참조해야 한다.

ex> queryForObject("sqlMapName.statementName");


useStatementNamespaces

="false"

false 


(3) <typeAlias> 요소


긴 전체 경로를 포함한 클래스명을 참조하기 위한 짧은 이름을 명시한다.


<typeAlias  alias="shortname" type="com.test.Class"/>


SQL Maps 설정 파일에서 사용되는 미리 정의된 몇몇 alias가 있다.


Transaction Manager Aliases 

JDBC

JTA

EXTERNAL

com.ibatis.sqlmap.engine.transaction.jdbc.JdbcTransactionConfig

com.ibatis.sqlmap.engine.transaction.jta.JtaTransactionConfig

com.ibatis.sqlmap.engine.transaction.external.ExternalTransactionConfig 

Data Source Factory Aliases

SIMPLE

DBCP

JNDI 

com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory

com.ibatis.sqlmap.engine.datasource.DbcpDataSourceFactory

com.ibatis.sqlmap.engine.datasource.JndiDataSourceFactory


(4) <transactionManager> 요소


<transactionManager> 는 SQL Maps를 위한 트랜잭션 관리를 설정하도록 한다. type 속성값 트랜잭션 종류를 표시한다.


type 값의 종류


- JDBC : Connection commit()과 rollback() 메소드를 통해 트랜잭션을 제어하기 위한 JDBC를 사용한다.

- JTA : 이 트랜잭션관리자는 SQL Maps가 다른 데이터베이스나 트랜잭션 자원을 포함하는 더욱더 넓은 범위의 트랜잭션을 포함하도록 하는 JTA 전역트랜잭션을 사용한다. 이 설정은 JNDI 자원으로부터 사용자 트랜잭션을 위치시키기 위한 UserTransaction 속성값을 필요로 한다.

- EXTERNAL : 이것은 트랜잭션을 스스로 관리하도록 한다. 이것은 애플리케이션이 SQL Maps의 트랜잭션을 관리하게 하며 비 트랜잭션 데이터베이스에 유용하다.


<transactionManager> 는 <dataSource> 요소를 가지며 <dataSource> 는 SimpleDataSourceFactory, DbcpDataSourceFactory, JndiDataSourceFactory 에 따라 설정 방식을 구분한다.


* SimpleDataSourceFactory


SimpleDataSource는 데이터소스를 제공하는 컨테이너가 없는 경우 connection을 제공하기 위해 기본적으로 pooling 데이터소스 구현을 제공한다. 이것은 iBATIS SimpleDataSource connection pooling을 기반으로 한다.


<transactionManager type="JDBC">

  <dataSource type ="SIMPLE">

       <property name="JDBC.Driver" value="org.postgresql.Driver"/>

<property name="JDBC.ConnectionURL" value="jdbc:postgresql://server:5432/dbname"/>

<property name="JDBC.Username" value="user"/>

<property name="JDBC.Password" value="password"/>

<!-- OPTIONAL PROPERTIES BELOW-->

<property name="Pool.MaximumActiveConnections" value="10"/>

<property name="Pool.MaximumIdelConnections" value="5"/>

<property name="Pool.TimeToWait" value="10000"/>

<property name="Pool.PingQuery" value="select * from dual"/>

<property name="Pool.PingEnabled" value="false"/>

<property name="Pool.PingConnectionsOlderThan" value="0"/>

<property name="Pool.PingConnectionsNotUsedFor" value="0"/>

  </dataSource>

</transactionManager>


* DbcpDataSourceFactory


DbcpDataSourceFactory는 DataSource API를 통해 connection pooling 서비스를 제공하기 위해 DBCP를 사용한다.

이 DataSource는 어플리케이션/웹 컨테이너가 DataSource 구현물을 제공하지 못하거나 standalone 어플리케이션을 구동할 때 이상적이다.


<transactionManager type="JDBC">

  <dataSource type ="DBCP">

       <property name="JDBC.Driver" value="${driver}"/>

<property name="JDBC.ConnectionURL" value="${url}"/>

<property name="JDBC.Username" value="${username}"/>

<property name="JDBC.Password" value="${password}"/>

<!-- OPTIONAL PROPERTIES BELOW-->

<property name="Pool.MaximumActiveConnections" value="10"/>

<property name="Pool.MaximumIdelConnections" value="5"/>

<property name="Pool.MaximumWait" value="60000"/>

<!-- Use of the validation query can be problematic. If you have difficulty, try without it -->

<property name="Pool.ValidationQuery" value="select * from ACCOUNT"/>

<property name="Pool.LogAbandoned" value="false"/>

<property name="Pool.RemoveAbandoned" value="false"/>

<property name="Pool.RemoveAbandonedTimeout" value="50000"/>

<property name="Driver.DriverSpecificProperty" value="SomeValue"/>

  </dataSource>

</transactionManager>


* JndiDataSourceFactory


JndiDataSourceFactory 는 어플리케이션 컨테이너내 JNDI 컨텍스트로부터 DataSource 구현물을 가져와야 한다. 이것은 어플리케이션 서버를 사용중이고 컨테이너 관리 connection pool 과 DataSource 가 제공될 때 사용한다.

JDBC DataSource 구현물에 접근하기 위한 표준적인 방법은 JNDI 컨텍스트를 통하여 접근하는 것이다.


<transactionManager type="JDBC">

  <dataSource type ="JNDI">

       <property name="DBJndiContext" value="java:comp/env/jdbc/jpetstore"/>

  </dataSource>

</transactionManager>


만약 전역 트랜잭션 설정이 필요할 경우에는

<transactionManager type="JTA">

  <property name="UserTransaction" value="java:/ctx/con/UserTransaction"/>

  <dataSource type ="JNDI">

       <property name="DBJndiContext" value="java:comp/env/jdbc/jpetstore"/>

  </dataSource>

</transactionManager>



(5) <sqlMap> 요소


<sqlMap> 요소는 명시적으로 SQL Map이나 다른 SQL Map 설정파일을 포함할 때 사용한다.

sqlMapClient 인스턴스에 의해 사용되는 각각의 SQL Map XML 파일은 반드시 선언되어야 한다.


<sqlMap resource="com/test/sql/Test1.xml"/>

<sqlMap resource="com/test/sql/Test2.xml"/>

<sqlMap resource="com/test/sql/Test3.xml"/>


또는


<sqlMap url="file:///c:/config/Test1.xml"/>

<sqlMap url="file:///c:/config/Test2.xml"/>
<sqlMap url="file:///c:/config/Test3.xml"/>


이웃추가
facebook에 글올리기
  1. 유용한 정보 감사합니다.
    블로그로 링크 퍼갑니다.
  2. 감사
    정리가 엄청 잘 되어있네요
    감사합니다
  3. 이우영
    안녕하세요 도움 많이 되었습니다. 유용하게 봤습니다.

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기