2014년 1월 9일 목요일

톰캣에서 커넥션 풀 설정[재직자무료교육/프로그래머교육/구로디지털IT교육,오라클/자바/닷넷/C#/iOS/안드로이드/아이폰교육]

톰캣에서 커넥션 풀 설정[재직자무료교육/프로그래머교육/구로디지털IT교육,오라클/자바/닷넷/C#/iOS/안드로이드/아이폰교육]


요즘 거의 모든 WAS에서 커넥션 풀을 지원해 주고 있는데요.

커넥션을 맺고 끊음이 필요없기때문에 효율도 좋아지고, 트랜잭션 처리를 커

넥션 풀이 해주면 프로그램이 간단해 지기 때문에 사용하는 분들이 점점 늘어

나고 있는 것 같습니다.

모든 WAS에서 커넥션 풀 설정이 간단하기 때문에 일단 가장 널리 사용되는

톰캣에서 설정해 보도록 하겠습니다.

기본적으로 필요한 라이브러리

* commons-dbcp.jar
* commons-collections.jar
* commons-pool.jar

예제 JDBC 드라이버

* Oracle 9i classes12.jar 혹은 ojdbc14.jar

1. 위 라이브러리들을 $CATALINA_HOME/common/lib 에 복사.

2. $CATALINA_HOME/conf/server.xml 혹은 각 웹 컨텍스트별 XML 파일의 <Context>의 자식 요소로 다음을 추가.

<Resource name="jdbc/oraclejava" auth="Container" type="javax.sql.DataSource"/>


<!-- 자세한 파라미터 설정은
http://jakarta.apache.org/tomcat/tomcat-5.0-doc/jndi-datasource-examples-howto.html 참조 -->
<ResourceParams name="jdbc/oraclejava">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>

<parameter>
<name>maxActive</name>
<value>100</value>
</parameter>

<parameter>
<name>maxIdle</name>
<value>30</value>
</parameter>

<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>

<!-- DB 사용자명과 비밀번호 설정 -->
<parameter>
<name>username</name>
<value>scott</value>
</parameter>
<parameter>
<name>password</name>
<value>tiger</value>
</parameter>

<!-- JDBC 드라이버 클래스 -->
<parameter>
<name>driverClassName</name>
<value>oracle.jdbc.driver.OracleDriver</value>
</parameter>

<!-- JDBC 접속 URL -->
<parameter>
<name>url</name>
<value>jdbc:oracle:thin:@dbhost:1521:ORA</value>
</parameter>
</ResourceParams>

3. 웹 어플리케이션의 web.xml파일에 다음을 추가하여 JNDI 리소스를 사용할 수 있도록 설정.

<resource-ref>
<description>Oraclejava DB Connection</description>
<!-- 다음이 바로 리소스의 이름 -->
<res-ref-name>jdbc/oraclejava</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

4. 이렇게 설정을 한 후 자바파일에서 불러다 사용할 수 있습니다.

*********************************************************************

    커넥션을 맺어서 쓸 경우 닫아야 하는지 여부를 확실히 모르겠네요.

    아시는 분은 답글 달아주시면 감사하겠습니다.

********************************************************************
  저는 그냥 스크립틀릿 안에서 불러서 예제를 만들어 보았습니다.


/////////////////////////  test.jsp //////////////////////////

<%@ page contentType="text/html;charset=euc-kr">
<%@ page import=java.sql.*,javax.sql.*"%>
<%@ page import=java.util*"%>

<%
    Connection conn = null;
    ResultSet rs = null;
    Statement stmt = null;

   
        try {
                // 커넥션을 얻기 위한 전초작업.
                Context initContext = new InitialContext();
                Context envContext = (Context)initContext.lookup("java:/comp/env");
                DataSource ds = (DataSource)envContext.lookup("jdbc/oraclejava");
       
                // 커넥션 얻기
                conn = ds.getConnection();
                //------------------------------------------------------------------
       
                String sql = "SELECT * FROM EMP";
                stmt = conn.createStatement();
       
                rs = stmt.executeQuery(sql);
       
                while (rs.next()) {
               
                        Map row = new HashMap();
       
                        row.put("num", rs.getString("num"));
                        row.put("name", rs.getString("name"));
       
                        results.add(row);
                }
       
       
        } catch (NamingException e) {
                throw new ServletException("JNDI 부분 오류", e);
        } catch (SQLException e) {
                throw new ServletException("SQL 부분 오류", e);
        } finally {
               
                if (rs != null) { try { rs.close(); } catch (Exception ignored) {} }
                if (stmt != null) { try { stmt.close(); } catch (Exception ignored) {} }
                if (conn != null) { try { conn.close(); } catch (Exception ignored) {} }
        }


%>


///////////////////////////////////////////////////////////////////

소스에서는 커넥션을 받은 객체를 닫아주고 있네요.



출처는

http://blog.naver.com/maru0226?Redirect=Log&logNo=140022373531

입니다.
 



댓글 없음:

댓글 쓰기