2010.12.08 22:47
테스트 환경...
JDK 1.6_u22
Tomcat 7.0.4



1. 준비
commons-dbcp-1.4.jar
commons-pool-1.5.5.jar
상단의 2개 파일을 http://commons.apache.org 에서 다운받아서
WAS(톰캣)의 WEB-INF/lib 폴더로 복사.
각각 DBCP, Pool 항목을 받아서 압축을 풀면 안에 해당 jar 파일들이 있습니다.
(JDK 1.6, TOMCAT 7.0.4 에서 사용한 것이며, JDK나 톰캣의 버젼에 따라 다른 버젼을 사용해야 하는경우도 있음)



2. pool.jocl 작성(내용수정 필요)
파일명 pool.jocl로 저장한 다음, WEB-INF/classes 에 위치하도록 저장 합니다.

<object class="org.apache.commons.dbcp.PoolableConnectionFactory"
 xmlns ="http://apache.org/xml/xmlns/jakarta/commons/jocl">

<object class="org.apache.commons.dbcp.DriverManagerConnectionFactory">
 <string value="jdbc:mysql://localhost:3306/haebi"/>
 <string value="haebi"/>
 <string value="1234"/>
</object>

<object class="org.apache.commons.pool.impl.GenericObjectPool">
<object class="org.apache.commons.pool.PoolableObjectFactory" null="true"/>
 <int value="10"/>          <!-- maxActive -->
 <byte value="1"/>  <!-- whenExhaustedAction-->
 <long value="10000"/>  <!--maxWait -->
 <int value="10"/>  <!-- maxIdle -->
 <int value="3"/>  <!--minIdle-->
 <boolean value="true"/>  <!-- testOnBorrow-->
 <boolean value="true"/>  <!--testOnReturn--> 
 <long value="600000"/>  <!--timeBetweenEvctionRunsMillis-->
 <int value="5"/>  <!--numTestsPerEvictionRun-->
 <long value="3600000"/>  <!--minEvictableIdleTimeMillis-->
 <boolean value="true"/>  <!--testWhileIdle-->
</object>

<object class="org.apache.commons.pool.impl.GenericKeyedObjectPoolFactory" null="true"/>
 <string null = "true"/>
 <boolean value="false"/>
 <boolean value="true"/>
</object>

(드래그로 복사&붙여넣기 해서 쓰세요 -_-)


상단의 내용중...
<string value="jdbc:mysql://localhost:3306/haebi"/>
표시된 부분에 자신이 사용할 DB명을 설정.

 <string value="haebi"/>
표시된 부분에 DB접속 계정명을 기입.

 <string value="1234"/>
표시된 부분에 DB접속에 사용되는 패스워드를 기입.



3. DBCPInit.class 작성(경우에 따라 수정필요)
파일명 DBCPInit.java로 저장한 다음, WEB-INF/classes/jdbc/loader 에 위치하도록 저장 합니다.

package jdbc.loader;

import javax.servlet.http.HttpServlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import java.util.StringTokenizer;

public class DBCPInit extends HttpServlet {

 public void init(ServletConfig config) throws ServletException {
  try {
   String drivers = config.getInitParameter("jdbcdriver");
   StringTokenizer st = new StringTokenizer(drivers, ",");
   while (st.hasMoreTokens()) {
    String jdbcDriver = st.nextToken();
    Class.forName(jdbcDriver);
   }
   
   Class.forName("org.apache.commons.dbcp.PoolingDriver");

  } catch(Exception ex) {
   throw new ServletException(ex);
  }
 }
}

(드래그로 복사&붙여넣기 해서... 2탄 -_-)


package jdbc.loader;
패키지 명은 classes폴더 하단의 경로를 표시하는 것으로 임의로 주면 됩니다.

(예시)
package loader;
WEB-INF/classes/loader


해당 폴더로 이동한 다음 컴파일 합니다.
javac *.*

.java 파일은 Java 소스파일로서 서비스 운영에 필요한 파일은 아닙니다.
컴파일 되서 나온 .class 가 실제로 사용되는 파일입니다.



4. web.xml 수정 (자신의 환경에 맞추어서...)
WEB-INF 폴더 안에 있는 web.xml의 <web-app>태그안에 적당한 위치에 넣도록 합니다.
xml파일에 대해 잘 모르겠다... 하시는 분들은 </web-app>를 찾아서 바로 위에 붙여넣기 합세다.

<servlet>
  <servlet-name>DBCPInit</servlet-name>
  <servlet-class>jdbc.loader.DBCPInit</servlet-class>
  <init-param>
   <param-name>jdbcdriver</param-name>
   <param-value>com.mysql.jdbc.Driver</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>
(드래그로 복사&붙여넣기 해서... 3탄!)


<servlet-name>DBCPInit</servlet-name>
위 3. 항목에서 저장한 파일명을 그대로 적어줍니다.

<servlet-class>jdbc.loader.DBCPInit</servlet-class>
위 3. 항목에서 파일을 위치시킨 경로를 참조해서 수정합니다.



5. DBCP를 이용한 데이터베이스 연동 예제 (옵션)

 <%@ page contentType = "text/html; charset=UTF-8" %>
<%@ page import = "java.sql.DriverManager" %>
<%@ page import = "java.sql.Connection" %>
<%@ page import = "java.sql.Statement" %>
<%@ page import = "java.sql.ResultSet" %>
<%@ page import = "java.sql.SQLException" %>
<html>
<head><title>회원 목록</title></head>
<body>

MEMBER 테이블의 내용
<table width="100%" border="1">
<tr>
    <td>이름</td><td>아이디</td><td>이메일</td>
</tr>
<%
   
    Connection conn = null;
    Statement stmt = null;
    ResultSet rs = null;
   
    try {
        String jdbcDriver = "jdbc:apache:commons:dbcp:/pool";
        String query = "select * from MEMBER order by ID";
        conn = DriverManager.getConnection(jdbcDriver);
        stmt = conn.createStatement();
        rs = stmt.executeQuery(query);
        while(rs.next()) {
%>
<tr>
    <td><%= rs.getString("NO") %></td>
    <td><%= rs.getString("ID") %></td>
    <td><%= rs.getString("PASS") %></td>
</tr>
<%
        }
    } finally {
        if (rs != null) try { rs.close(); } catch(SQLException ex) {}
        if (stmt != null) try { stmt.close(); } catch(SQLException ex) {}
        if (conn != null) try { conn.close(); } catch(SQLException ex) {}
    }
%>
</table>

</body>
</html>

(드래그 & 붙여넣기... 하든말든;;; 그냥 테스트용)

소스를 환경에 맞게 수정해서 돌려보면 되겠습니다.




Posted by 해비