본문 바로가기

삽질하기/Servlet & JSP

JDBC Data Sources

반응형

JDBC Data Sources

0. 소개 Introduction
많은 웹 어플리케이션은 여러 기능을 지원하기 위해, JDBC 드라이버를 통해 database에 접속하는 것이 필요합니다. J2EE 플랫폼 스펙은 이 때문에 J2EE 어플리케이션 서버에서 DataSource 구현(즉, JDBC 연결의 커넥션 풀)이 가능할 것을 요구하고 있습니다. Tomcat 4 는 똑같은 기능을 지원하기 때문에, database기반의 어플리케이션을 Tomcat 기반에서 개발을 한 뒤에 J2EE 서버에 올려도 바뀌지 않습니다.

JDBC 에 대한 더 상세한 정보는 아래 링크에서 찾아보십시오:

http://java.sun.com/products/jdbc/ - Java Database Connectivity 에 관한 정보 홈페이지.
http://java.sun.com/j2se/1.3/docs/guide/jdbc/spec2/jdbc2.1.frame.html - The JDBC 2.1 API Specification.
http://java.sun.com/products/jdbc/jdbc20.stdext.pdf - The JDBC 2.0 Standard Extension API (including the javax.sql.DataSource API). 현재 "JDBC Optional Package" 로 알려진 패키지입니다.
http://java.sun.com/j2ee/download.html - The J2EE Platform Specification (J2EE 플랫폼이 어플리케이션에 제공해야하는 JDBC 기능이 담겨있습니다.)

주의 NOTE - Tomcat 에서의 기본 data source 지원은 Tyrex 를 지원합니다. 그러나, javax.sql.DataSource 를 구현하는 어느 다른 커넥션 풀도 사용할 수 있습니다. 아래에 기술된 대로 사용자 자원 팩토리를 구성하면 됩니다.

1. JDBC 드라이버 설치하기
JDBC Data Sources JNDI 자원 팩토리를 사용하려면 Tomcat 내부 class들과 웹어플리케이션에 적당한 JDBC 드라이버를 필요로 합니다. 이같은 작업은 드라이버 jar 파일을 $CATALINA_HOME/common/lib 디렉토리 에 설치해 놓으면 쉽게 끝납니다. 이 디렉토리는 자원 팩토리와 웹 어플리케이션 양쪽에서 모두 인식할 수 있습니다.

2. 자원 요건 선언하기 Declare Your Resource Requirements
다음으로, 웹 어플리케이션 설치 지시자 (/WEB-INF/web.xml) 를 수정해서 이 빈의 새로운 인스턴스를 요청할 때 쓸 JNDI 명을 선언합니다. 보통은, 가장 간단한 접근은 다음과 같이 <resource-env-ref> 요소 를 사용하는 것입니다. 규약에 의하면, 모든 이름은 jdbc 서브컨텍스트로 결말지어져야 합니다. 제공된 모든 자원 팩토리의 루트가 되는 표준 java:comp/env 네이밍 컨텍스트에 상대적입니다.) 전형적인 web.xml 엔트리는 다음과 같습니다.

<resource-ref>
  
<description>
   java.sql.Connection 인스턴스의 팩토리에 대한 자원 참조입니다.
   server.xml 파일에 설정된 특정한 database 와 통신하는데 쓰입니다.
  
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/EmployeDB
  
</res-ref-name>
  
   <res-type>
     
javax.sql.DataSource
  
</res-type>

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

주의 WARNING - 웹 어플리케이션 설치 지시자의 DTD 에 요구되는 요소의 순서가 제대로인지 확인하십시오. 자세한 내용은 Servlet Specification 를 확인하십시오.

3. 이 자원을 사용하는 어플리케이션 코딩하기
Code Your Application's Use Of This Resource
이 자원 참조(resource reference)의 사용법은 다음과 같습니다.

Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource)envCtx.lookup("jdbc/EmployeeDB");
Connection conn = ds.getConnection();
... 이 커넥션으로 database 에 접속합니다. ...
conn.close();

알아둘 점은 어플리케이션이 웹 어플리케이션 설치 지시자에서 선언된 같은 자원참조 이름을 사용한다는 것입니다. 이것은 $CATALINA_HOME/conf/server.xml 에서 설정된 자원 팩토리와 아래처럼 대치될 수 있습니다.

4. Tomcat의 자원 팩토리 환경설정 Configure Tomcat's Resource Factory
Tomcat의 자원 팩토리 환경설정를 하기 위해서는, $CATALINA_HOME/conf/server.xml 파일에서 이 웹 어플리케이션의 Context 요소(or nested inside a DefaultContext element for the surrounding <Host> or <Engine> element.) 안에 다음의 요소를 추가합니다.

<Context ...>
  ...
   <Resource name="jdbc/EmployeeDB" auth="Container" t
ype="javax.sql.DataSource"/>
   <ResourceParams name="jdbc/EmployeeDB">
      <parameter>
         <name>user</name>
         <value>dbusername</value>
      </parameter>

      <parameter>
         <name>password</name>
         <value>dbpassword</value>
      </parameter>
      <parameter>
         <name>driverClassName</name>
         <value>org.hsql.jdbcDriver</value>
      </parameter>

      <parameter>
         <name>driverName</name>
         <value>jdbc:HypersonicSQL:database</value>
      </parameter>
   </ResourceParams>
  ...
</Context>

주의할 점은 자원 이름(여기서, jdbc/EmployeeDB)은 반드시 웹 어플리케이션 설치 지시자에 지정된 값과 일치해야 합니다. 현재 사용하는 네트웍의 SMTP 서비스를 제공하는 서버의 주소를 mail.smtp.host 파라메터의 값에 변경해 주십시오.

이 예제는 HypersonicSQL database JDBC 드라이버를 사용한다고 가정합니다. driverClassName 와 driverName 파라메터를 사용하고 있는 JDBC드라이버와 Connection URL로 바꿔주십시오

출처 :
http://www.apache-korea.org/