강좌
클라우드/리눅스에 관한 강좌입니다.
프로그램 분류

JNDI로 jdbc 사용하기

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문


icon01.gif title45.gif


kenu
2002-02-04 2:45오전

Tomcat 4 의 JNDI howto 문서를 보면 Tomcat 4 에서 개발된 소스가 J2EE 의 환경으로 포팅할 경우에도 JNDI 를 이용해서 jdbc 연결하게 된다면 jdbc 부분의 소스를 바꾸지 않아도 된다고 합니다. mysql에 연결을 해보도록 하겠습니다. 설치를 마친 환경은 다음과 같습니다. mysql 은 mysql 인증설정강좌를 이용해서 okjsp 계정에 kenu1234 비밀번호를 만들고, okjspdb 라는 database 를 만들었습니다. (이 문서는 tomcat 3.* 에서는 실행되지 않습니다.)
실행환경
windows 2000 professional, Tomcat 4.0.2-b2, mysql 3.23.47, mm.mysql-2.0.11-bin.jar


다운받은 mysql 드라이버를 압축을 푼 뒤(www.alzip.com 도 됩니다.)에 mm.mysql-2.0.11-bin.jar 파일을 Tomcat4 가 설치된 디렉토리의 common/lib 에 복사합니다. Tomcat4 재시동하면 인식을 합니다. classpath 에 추가해주지 않아도요.
jndijdbc01_01.gif

다음으로 해당 Context 의 web.xml 을 편집합니다. conf/web.xml 에 있는 내용을 참고하시면 됩니다. 한가지 알아두실 것은 conf/web.xml 은 Tomcat4 에 아무 영향도 주질 않습니다. 해당 Context의 WEB-INF/web.xml 로 있어야 설정한 것이 영향을 줍니다. ROOT 에 있는 웹 어플리케이션에서 사용하려면 webapps/ROOT/WEB-INF/web.xml 파일이 필요합니다. WEB-INF 는 모두 대문자여야 합니다. 다음과 같이 JNDI 설정을 해줍니다.
c:/tomcat4/webapps/WEB-INF/web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
  <resource-ref>
    <description>
      Resource reference to a factory for java.sql.Connection
      instances that may be used for talking to a particular
      database that is configured in the server.xml file.
    </description>

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

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

    <res-auth>
      Container
    </res-auth>
  </resource-ref>
</web-app>



기존 web.xml 에 추가해줘야 할 부분은 <resource-ref> 태그와 그 안에 있는 내용들입니다. resource reference name 은 jdbc/OkjspDB 로 정해주었고, resource Type 은 javax.sql.DataSource 입니다. jdbc 2.0 에 있는 class로 아시면 됩니다. resource auth 는 Container 인데, 자세한 내용은 저도 다른 문서를 찾아봐야합니다.(툭 까놓고 얘기하면, 아직 저도 모릅니다. ^^) web.xml 파일이 변경이 되면 tomcat을 재시동해야되는데, 아직 server.xml 을 변경해야하니까 그 후로 미루죠. ^^

server.xml 파일은 Tomcat 전체의 환경설정에 관한 파일입니다. server.xml 파일에서 다음 부분을 수정해줍니다. 주석처리에서 벗겨 낸 다음 child 내용을 추가해줍니다. Context tag가 새끼를 치는 것입니다.
c:/tomcat4/conf/server.xml 중 일부
...
        <!-- Tomcat Root Context -->
        <!--
        -->
        <Context path="" docBase="ROOT" debug="0">
  <Resource name="jdbc/OkjspDB" auth="Container"
            type="javax.sql.DataSource"/>
  <ResourceParams name="jdbc/OkjspDB">
    <parameter>
      <name>user</name>
      <value>okjsp</value>
    </parameter>
    <parameter>
      <name>password</name>
      <value>kenu1234</value>
    </parameter>

    <parameter>
      <name>driverClassName</name>
      <value>org.gjt.mm.mysql.Driver</value>
    </parameter>

    <parameter>
      <name>driverName</name>
      <value>jdbc:mysql://localhost:3306/okjspDB</value>
    </parameter>
  </ResourceParams>
        </Context>  

...



web.xml 에서 설정한 값들과 공통적인 부분이 많이 나옵니다. 그리고, database 접속에 필요한 아이디(user), 비밀번호(password), jdbc 드라이버(driverClassName), jdbc 접속 URL(driverName) 이 지정됩니다. 여기의 설정은 "ROOT" Context 에서만 효력이 발생합니다. 이제 세팅은 다 끝났습니다. 다음으로 테스트할 소스를 보겠습니다.

server.xml 파일은 Tomcat 전체의 환경설정에 관한 파일입니다. server.xml 파일에서 다음 부분을 수정해줍니다. 주석처리에서 벗겨 낸 다음 child 내용을 추가해줍니다. Context tag가 새끼를 치는 것입니다.
c:/tomcat4/webapps/ROOT/jndi01.jsp
<%@ page 
import="java.sql.*, javax.naming.*, javax.sql.*"%><%

Context initCtx = new InitialContext();

Context envCtx = (Context) initCtx.lookup("java:comp/env");

DataSource ds = (DataSource) envCtx.lookup("jdbc/OkjspDB");

Connection conn = ds.getConnection();

Statement stmt = conn.createStatement();

String query = "select now()";

ResultSet rs = stmt.executeQuery(query);

if(rs.next()) {
  out.println(rs.getTimestamp(1));
}

rs.close();

stmt.close();

conn.close();
%>



mysql 에 접속해서 현재 시간을 불러오는 간단한 기능입니다. 필요한 패키지는 javax.naming.Context, javax.naming.InitialContext, javax.sql.DataSource 입니다. 이 방식은 복잡합니다만 J2EE 에서 사용하는 JNDI 를 통해서 JDBC 연결하는 방식과 일치하기 때문에 Tomcat 에서 개발한 소스를 쉽게 적용할 수 있는 잇점을 갖고 있습니다. jsp 소스에 있는 내용이야 쉽게 수정이 되지만 servlet 이나 bean 으로 되어있는 Compile 이 필요한 파일이라면 재컴파일하지 않고 사용할 수 있게 됩니다.

J2EE 를 꼭 써야되는지 아니면 경량 Container 로 운영해도 가능한지에 관해서는 자주 논의되고 있습니다만, J2EE 환경은 사이트가 커져버린다면 반드시 필요한 환경이기 때문에 준비해 놓는 것이 손해는 아닐 것입니다. 물론 거시적으로 본다면야 MS의 .NET 이 java 를 사장시켜 버리는 어처구니 없는 일이 생기거나, Lindows 가 MS 를 인수 합병하고 Apache 가 IIS 를 먹어버리고 apache에서 asp, php, jsp 가 동시에 실행이 되는 개발자에게 정말 X같은 일이 생길 수도 있거나, 아니면 TV 컴퓨터 선전에 나오는 외계인이 침공해서 !#@$*@#%)!# 퍽! 애구, 잡소리 그만하고 끝내겠습니다. 읽어주셔서 감사합니다.

JDBC 외에도 SMTP, Factory resource등을 JNDI 를 사용해서 이용할 수 있습니다. 아래 링크한 문서를 읽어보세요. 제발... 제가 짬을 내서 번역한 문서입니다. 이해 안 가는 것은 영문사이트를 공부하시고(저한테 묻지마세요. 저도 JNDI 공부많이 못했습니다.), 번역이 잘못된 것만 알려주세요. 공부 못한게 자랑은 아니지만, 요즘 서블릿 책보고 열심히 다른 것 준비중이거든요. 행복하세요.

관련 사이트
http://sourceforge.net/project/showfiles.php?group_id=15923
mm.mysql jdbc 드라이버
http://jakarta.apache.org/tomcat/tomcat-4.0-doc/jndi-resources-howto.html
JNDI resources howto 문서
http://okjsp.pe.kr/doc/tomcat/tomcat-4.0-doc/jndi-resources-howto.html
JNDI resources howto 번역문서

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,041 명
  • 현재 강좌수 :  35,855 개
  • 현재 접속자 :  100 명