Tomcat에서 Datasource 설정하기


서핑하다 저도 잘 잊어버려서 ..퍼왔습니다. ㅎ
WAS를 갈아타고 작업할 때 마다 항상 잊어버린다. 그리고 이놈의 tomcat은 버전마다 이런 기본 설정 방법이 달라지니...
점점 떨어지는 기억력은 어쩔 수 없으니 블로그에 의지하고 남기는 수 밖에...
---

Tomcat에서 Datasource 설정하기Tomcat에서는 JNDI 리소스를 등록하는 방법이 크게 2가지가 있다. 하나는 모든 web context가 사용할 수 있는global 리소스이고 다른 하나는 해당 context에만 적용되는 리소스이다.
Global 리소스 등록방법
${CATALINA_HOME}/conf/server.xml에 다음과 같이 추가
   <Server port="8005" shutdown="SHUTDOWN">
   ...
  <GlobalNamingResources>
    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users
    -->
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
 
    <Resource name="jdbc/OracleDS" auth="Container" type="javax.sql.DataSource"
          username="xxx"
          password="xxx"
          driverClassName="oracle.jdbc.driver.OracleDriver"
          url="jdbc:oracle:thin:@localhost:1521:XE" />

       
  </GlobalNamingResources>
 ...
각 web context에서 global 리소스를 사용하기 위해서는 각 context의 <ResourceLink/> 태그로 연결하여야 한다. 다음은 모든 context에 연결하는 방법이다.

${CATALINA_HOME}/conf/context.xml에 다음과 같이 추가
 <Context>
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <ResourceLink
            name="jdbc/OracleDS"
            global="jdbc/OracleDS"
            type="javax.sql.DataSource"
          /> 
...

Context 리소스 등록방법tomcat 6.x에서는 각 WAR 디렉토리의 /META-INF/context.xml 파일에 해당 context 설정 정보를 담고 있다. 즉 WAR 파일 내에 context.xml 이 있어야 한다. 편하긴 한데...
예) bcf가 context라면
${CATALINA_HOME}/webapps/bcf/META-INF/context.xml 에 다음과 같이 추가
<Context antiResourceLocking="false" privileged="true">
<Resource name="jdbc/OracleDS" auth="Container" type="javax.sql.DataSource"
          username="xxx"
          password="xxx"
          driverClassName="com.mysql.jdbc.Driver"
          url="jdbc:mysql://localhost:3306/bcf" />

</Context>

JNDI로 접근하기다른 JNDI 룩업과 마찬가지로 다음과 같은 이름로 접근하면 된다. 그냥 jdbc/OracleDS 이런식으로는 접근할 수 없다. 
java:comp/env/jdbc/OracleDS

정리Context 리소스 등록방법이 context.xml을 war/MET-INF 밑에 넣으면 되기 때문에 더 편하기는 한데 war에 저 파일이 배포되어야해서 좀 찜찜하다. (datasource 정보가 WAR 형상관리되어야 한다?)
따라서 운영환경에서는 global 리소스를 이용하는 방법이 나을 듯 하다. (역시 비밀번호는 노출이 되는군 ㅠㅠ)

댓글

이 블로그의 인기 게시물

어쩌다 마주친 spring Error

nginx 설정정리

이클립스에서 톰캣 publish할때 에러