Tomcat 5.5를 기준으로된 문서에 자세히 나와있음.
http://tomcat.apache.org/tomcat-5.5-doc/jndi-datasource-examples-howto.html
요점을 말하면 설정해야 할 파일은 2가지 정도 되고 대상으로 conf/server.xml과 WEB-INF/web.xml 을 수정하거나 server.xml 대신 META-INF/context.xml 을 수정하여도 됨.
필요한 Component는 $CATALINA_HOME/common/lib/naming-factory-dbcp.jar에 있으니 별도로 설치를 하지 않아도 되지만 JDBC 드라이버는 별도로 준비
하여야 하며 $CATALINA_HOME/common/lib
에 추가해야 드라이버를 찾을 수 있다. WEB-INF/lib에 넣어놓고 안된다고 하면 안됨.(경험해 봄)
설정해야 할 Context 내용 (server.xml or META-INF/context.xml)
- <Context>
- <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
- maxActive="100" maxIdle="30" maxWait="10000"
- username="javauser" password="javadude" driverClassName="com.mysql.jdbc.Driver"
- url="jdbc:mysql://localhost:3306/javatest?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8"/>
- </Context>
resourecename, username, password, databasename 을 수정하여 사용하면되고, &useUnicode=true&characterEncoding=UTF-8 은 옵션 사항
web.xml 설정 내용
- <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>
을 적당한 곳에 추가.
사용법은
- Context initContext = new InitialContext();
- Context envContext = (Context)initContext.lookup("java:/comp/env");
- DataSource ds = (DataSource)envContext.lookup("jdbc/TestDB);
- Connection conn = ds.getConnection();
주의할 사항 중에 하나로 Connecton이 자기 맘대로 close 되는 경우가 있다고 한다.
- conn.close();
- conn = null;
로 명시적으로 사용할 수 없도록 하면 해결. 원인은 conn.close()를 하더라도 다른 쓰레드에서 사용할 수 있으며 이를 다시 close하는 경우 발생함.