japanese site
온라인강좌책메일다운로드동아리쇼핑기술지원기업정보갤러리동영상 블로그
『신개념 4단계 리눅스기술지원 시스템 공개』

※ 『무료 리눅스 배포판 배송서비스』 ※

 
JNDI로 jdbc 사용하기
조회 : 3,587  






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 에 추가해주지 않아도요.

다음으로 해당 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 번역문서


[원글링크] : https://www.linux.co.kr/home2/board/subbs/board.php?bo_table=lecture&wr_id=611


이 글을 트위터로 보내기 이 글을 페이스북으로 보내기 이 글을 미투데이로 보내기

 
(주) 수퍼유저

 
   
 


『신개념 4단계 리눅스기술지원 시스템 공개』

CentOS 리눅스 전문서적 국내최초출시

 
회사소개 | 보도기사 | 채용안내 | 광고안내 | 이용약관 | 개인정보취급방침 | 책임한계와 법적고지 | 불편사항 신고하기 | 사이트맵
ㅇ 서울 : 서울특별시 강남구 노현로79길 66, 402호(역삼동,청송빌딩)  ㅇ 부산 : 부산광역시 해운대구 우동 1470 에이스하이테크21 914호
ㅇ 대표 : 1544-8128 ㅇ부산직통 : 051-744-0077 ㅇ서울직통 : 02-856-0055 ㅇ FAX : 02-6280-2663
ㅇ 사업자번호 : 128-86-68239 ㅇ 통신판매업 신고번호 : 2013-부산금정-0035호 ㅇ 개인정보책임자 : 이재석
ㅇ 상호명 : (주) 수퍼유저 ㅇ 대표자 : 박성수
Copyright ⓒ (주)수퍼유저. All rights reserved.

 아 이 디
 비밀번호
회원 가입 | 비밀번호 찾기

블로그~
 
▷ 웹개발언어
PHP
JSP
python
기타
책제목
리눅스서버관리실무바이블v3.0


저자 박성수
페이지수 2,032 pages
펴낸곳(주)수퍼유저

리눅스 서버 구축 및 관리에 필요한 거의 모든 부분과 전반적인 실무 기법들을 다루고 있음
책제목
리눅스보안관리실무(2/E)


저자홍석범
페이지수 820 pages
펴낸곳(주)수퍼유저

리눅스 보안에 관련된 내용을 종합적으로 쓴 책. 저자의 명성 그대로 보안관련의 모든 내용이 그대로 담겨져 있다.