요즘 거의 모든 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
입니다.
댓글 없음:
댓글 쓰기