[06] 톰캣 JDBC Connection Pool 설정 및 테스트용 JSP 코드 작성

안녕하세요. 똘똘님! 이번 미션은 톰캣 JDBC Connection Pool을 설정하는 것입니다. 커넥션 풀을 이용해보기는 했지만, 제가 직접 구성을 하려니 막막합니다. 톰캣 7 설치, JDK 1.7 설치까지는 쉽게 했지만, 커넥션 풀을 설정하는 부분에서 헤매고 있습니다. 구글링을 해보면 Server.xml, Context.xml, Web.xml 등 환경 파일 내에 설정 정보를 넣어주면 쉽게 된다고 하는데, 잘 되지 않습니다. 그리고 커넥션 풀을 이용한 JSP 샘플 코드를 작성해보고 싶은데, 이 역시 쉽지 않습니다. 알려주세요. 똘똘님!

제가 WAS 전문가는 아니지만, 말씀하신 부분은 도움을 드릴 수 있을 것 같습니다. 그럼 시작해볼까요?

6-1. 개요


DB Connection Pool (이하 DBCP)톰캣 JDBC Connection Pool을 설정하는 방법은 아주 간단합니다. context.xml 파일에만 적절한 정보를 입력하면 됩니다. 아주 쉽죠? 그럼, 온라인 서비스와 배치 서비스 각각을 위한 커넥션 풀을 설정하는 예제를 통해서 설명하도록 하겠습니다.

Note
참고로, 톰캣 6부터는 web.xml 파일에 항목을 등록하지 않아도 됩니다.

6-2. 서비스를 위한 디렉토리 생성


cd /usr/local/tomcat  -- 설치 디렉토리로 이동
cd webapps
mkdir -p online/META-INF
mkdir -p batch/META-INF

6-3. 각 서비스의 META-INF 디렉토리 내에 context.xml 생성


예시-1. /usr/local/tomcat/webapps/online/META-INF/context.xml 내용

<?xml version=’1.0′ encoding=’utf-8′?>
<Context>

<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Manager pathname=”” />
<Valve className=”org.apache.catalina.valves.CometConnectionManagerValve” />

<Resource
name=”jdbc/onlinesrv”
auth=”Container”
type=”javax.sql.DataSource”
factory=”org.apache.tomcat.jdbc.pool.DataSourceFactory”
driverClassName=”oracle.jdbc.OracleDriver”
url=”jdbc:oracle:thin:@192.168.56.81:1521:ORA12C1″
username=”apps”
password=”apps”
maxActive=”20″
maxIdle=”10″
initialSize=”10″
connectionPoolName=”onlinesrv_pool”
maxWait=”-1″/>

</Context>

 

예시-2. /usr/local/tomcat/webapps/batch/META-INF/context.xml 내용

<?xml version=’1.0′ encoding=’utf-8′?>
<Context>

<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Manager pathname=”” />
<Valve className=”org.apache.catalina.valves.CometConnectionManagerValve” />

<Resource
   name=”jdbc/batchsrv”
auth=”Container”
type=”javax.sql.DataSource”
factory=”org.apache.tomcat.jdbc.pool.DataSourceFactory”
driverClassName=”oracle.jdbc.OracleDriver”
url=”jdbc:oracle:thin:@192.168.56.82:1521:ORA12C2″
username=”apps”
password=”apps”
maxActive=”20″
maxIdle=”10″
initialSize=”10″
connectionPoolName=”batchsrv_pool”
maxWait=”-1″/>

</Context>

Note
오라클 11g부터는 사용자 비밀번호의 대소문자를 구별합니다. 따라서, 대소문자를 구별해서 정확한 비밀번호를 password 항목을 입력하도록 합니다. 참고로, 비밀번호 대소문자를 구별하지 않으려면 sec_case_sensitive_logon 파라미터를 false로 변경하면 됩니다.

6.4 톰캣 서버 재시작 후 DB 서버에서 커넥션 풀 접속 확인


service tomcat stop
service tomcat start

Note
톰캣 서버를 service 방식으로 start/stop 하는 방법은 “여기“를 참고하세요.

select inst_id, username, to_char(logon_time,'YYYY:MM:DD HH24/MI/SS') logontime , program, service_name
from gv$session
where username='APPS'
and program like 'JDBC%'
order by 1,3;

   INST_ID USERNAME   LOGONTIME            PROGRAM            SERVICE_NAME
---------- ---------- -------------------- ------------------ ------------
         1 APPS       2016:06:28 15/52/25  JDBC Thin Client   SYS$USERS
         1 APPS       2016:06:28 15/52/25  JDBC Thin Client   SYS$USERS
         1 APPS       2016:06:28 15/52/25  JDBC Thin Client   SYS$USERS
         1 APPS       2016:06:28 15/52/25  JDBC Thin Client   SYS$USERS
         1 APPS       2016:06:28 15/52/25  JDBC Thin Client   SYS$USERS
         1 APPS       2016:06:28 15/52/25  JDBC Thin Client   SYS$USERS
         1 APPS       2016:06:28 15/52/25  JDBC Thin Client   SYS$USERS
         1 APPS       2016:06:28 15/52/25  JDBC Thin Client   SYS$USERS
         1 APPS       2016:06:28 15/52/25  JDBC Thin Client   SYS$USERS
         1 APPS       2016:06:28 15/52/25  JDBC Thin Client   SYS$USERS
         2 APPS       2016:06:28 15/52/23  JDBC Thin Client   SYS$USERS
         2 APPS       2016:06:28 15/52/23  JDBC Thin Client   SYS$USERS
         2 APPS       2016:06:28 15/52/23  JDBC Thin Client   SYS$USERS
         2 APPS       2016:06:28 15/52/23  JDBC Thin Client   SYS$USERS
         2 APPS       2016:06:28 15/52/23  JDBC Thin Client   SYS$USERS
         2 APPS       2016:06:28 15/52/23  JDBC Thin Client   SYS$USERS
         2 APPS       2016:06:28 15/52/23  JDBC Thin Client   SYS$USERS
         2 APPS       2016:06:28 15/52/23  JDBC Thin Client   SYS$USERS
         2 APPS       2016:06:28 15/52/23  JDBC Thin Client   SYS$USERS
         2 APPS       2016:06:28 15/52/23  JDBC Thin Client   SYS$USERS

Note
initialSize를 10으로 설정했으므로, RAC 1,2번 노드 각각 10개의 세션이 연결된 것을 확인할 수 있습니다.

6.5 샘플 JSP 코드 작성


DBCP커넥션 풀이 생성된 상태이므로, 커넥션 풀의 커넥션 객체를 이용해서 DB에 접속하는 JSP 샘플 코드를 작성해보도록 하겠습니다.

예시-3. /usr/local/tomcat/webapps/online/test.jsp의 내용

<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.naming.*"%>
<%@ page import="javax.sql.*"%>

<%
        String v1 = null;
        try {
                Context initContext = new InitialContext();
                Context envContext  = (Context) initContext.lookup("java:/comp/env");
                DataSource datasource = (DataSource) envContext.lookup("jdbc/onlinesrv");
                Connection conn = datasource.getConnection();

                Statement st=conn.createStatement();
                String sql = "select 'Welcome! Tomcat DB Connection Pool (DBCP)' from dual";
                ResultSet rs = st.executeQuery(sql);
                rs.next();
                v1 = rs.getString(1);
        } catch (Exception e){
                e.printStackTrace(System.out);
        }
%>
        <%=v1 %>

Note
샘플 코드에서 가장 중요한 부분은 envContext.lookup 부분에 context.xml 에 설정한 name을 입력한다는 것입니다. 예를 들어, 온라인 서비스 커넥션 풀 객체를 이용하려면 “jdbc/onlinesrv”를 입력하면 되고 배치 서비스 커넥션 풀 객체를 이용하려면 “jdbc/batchsrv”를 입력하면 됩니다.

웹 브라우저를 이용해서 샘플 JSP를 실행하면 다음과 같은 결과를 확인할 수 있습니다.

똘똘님 덕분에 DBCP 커넥션 풀 구성 및 JSP 샘플 코드 작성을  쉽게 완료했습니다. 🙂

네. 궁금님. 그럼 다음 시간에는 DBCP 커넥션 풀 환경에서 “서비스”를 이용한 성능 관리에 대해서 살펴보도록 하겠습니다.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s