개발/프로그래밍(일반)

[WAS] Tomcat 7 JNDI DataSource+Spring framework 연동

kyu76 2016. 7. 21. 14:27

(출처: http://icoon22.tistory.com/249)


[WAS] Tomcat 7 JNDI DataSource+Spring framework 연동


작업 순서

1. tomcat-jdbc.jar 라이브러리를 "%TOMCAT_HOME%/lib" 복사하기

2. server.xml 에서 DataSource 설정 하기

3. server.xml에서 <Context>에서 DataSource 링크 설정

4. web.xml에서 DataSource 참조 설정 하기

5. Spring에서 bean 설정 하기


(1) tomcat-jdbc.jar 라이브러리를 "%TOMCAT_HOME%/lib" 복사하기

     tomcat 7.x 이전버전에서는 commons-dbcp.jar, commons-pool.jar, commons-collection.jar, 

     3rd driver library(oracle, ms-sql, mysql, db2) 4개의 라이브러리 필요

     Tomcat 7.x에서는 2개의 라이브러리만 필요

      tomcat-jdbc,jar, 3rd driver library(oracle, ms-sql, mysql, db2)

     다음의 사이트에서 다운로드

    압축 해제 후 tomcat-jdbc.jar를 %TOMCAT_HOME%/lib에 복사

     http://people.apache.org/~fhanik/jdbc-pool/



%TOMCAT_HOME%/conf/server.xml 파일에 <GlobalNamingResources>에 DataSource 추가

<GlobalNamingResources>

        <!-- jdbc 셋팅 -->

        <Resource name="jdbc/testDB" 

            auth="Container" 

            type="javax.sql.DataSource" 

            factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"

            maxActive="100" 

            minIdle="10" 

            maxWait="10000" 

            initialSize="10"

            validationQuery="SELECT 1 FROM DUAL"

            driverClassName="com.mysql.jdbc.Driver"

            defaultAutoCommit="false"

            username="beyondj2ee" 

            password="beyondj2ee"

            url="jdbc:mysql://127.0.0.1:3316/testDB" />

    </GlobalNamingResources>


여기서 중요한 부분은 factory 속성에 "org.apache.tomcat.jdbc.pool.DataSourceFactory"

선언 합니다. 

그리고 이전 버전에서 사용 했던 "<ResourceParams>"는 없어지고, 대신 훨씬 편하게

직접 속성들을 설정 하도록 변경 되었습니다.

보다 자세한 속성 정보는 아래의 링크를 참조 하시면 됩니다.

http://people.apache.org/~fhanik/jdbc-pool/jdbc-pool.html


server.xml에서 <Context>에서 DataSource 링크 설정

이제 Global DataSource 설정을 완료 했습니다. (즉 WAS에 등록된 웹 어플리케이션이

접근 가능 하도록 설정)


이제 Context에서 DataSource를 설정하는 방법을 말씀 드리겠습니다.

사실 이부분 이후로는 이전 버전과 동일 합니다.


<Context docBase="beyondj2ee"

              path="/beyondj2ee"

              reloadable="true"

              source="org.eclipse.jst.jee.server:beyondj2ee">

                    <ResourceLink global="jdbc/testDB" name="jdbc/testDB" type="javax.sql.DataSource" />

 </Context>


web.xml에서 DataSource 참조 설정 하기

Context에 선언된 DataSource를 님들의 웹 어플리케이션에서 쓸수 있도록

web.xml에 설정을 합니다.

※반드시 <Context>의 안에 선언된 "<ResourceLink>" 태그의 "name"속성의 같과

동일 해야 합니다. 즉 (name="jdbc/testDB" == res-ref-name)


<resource-ref>

        <description>DB Connection</description>

        <res-ref-name>jdbc/testDB</res-ref-name>

        <res-type>javax.sql.DataSource</res-type>

        <res-auth>Container</res-auth>

    </resource-ref>


Spring에서 bean 설정 하기

이제 웹 어플리케이션에서 사용 하기 위한 DataSource 설정은 완료가 되었습니다.

이제 스프링에서 JDBC 설정 입니다.


<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">

        <property name="jndiName" value="java:/comp/env/jdbc/testDB" />

 </bean>


sample :  Tomcat7-Datasource.zip



출처 : http://beyondj2ee.egloos.com/1469795


(2) Spring 빈 설정


아래와 같이 설정 하시면 됩니다.


<bean id=”dataSource” class=”org.apache.tomcat.jdbc.pool.DataSource”

        destroy-method=”close”

        p:driverClassName=”oracle.jdbc.OracleDriver”  p:url=”jdbc:oracle:thin:@localhost:1521:XE”

        p:defaultAutoCommit=”false”

        p:username=”scott”

        p:password=”tiger”

        p:initialSize=”10”

        p:minIdle=”10”

        p:maxIdle=”100”

        p:maxActive=”100”

        p:maxWait=”6000”    

    />


원문 사이트 : http://bit.ly/p0qmkx