자바 소스들은 WEB-INF/src/multiboard 패키지 밑에서 만들었습니다.
오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)
우선 디비에 접속할때 쓰이는 connectionpool을 설정하는 부분입니다.
관련된 라이브 러리 파일들은 또 네이버 블로그에 올렸습니다.
http://blog.naver.com/kkjae7646
로 가시면 다운 받을 수 있습니다.
//////////////////// NewActionServlet.java //////////////////////////
package multiboard;
import javax.servlet.ServletException;
import javax.servlet.ServletConfig;
import org.apache.struts.action.ActionServlet;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.config.ModuleConfig;
//import org.apache.struts.util.RequestUtils;
//Connection Pool
import com.bitmechanic.sql.*;
public class NewActionServlet extends ActionServlet {
private ConnectionPoolManager cpm;
/*
* poolAias는 커넥션 풀을 별칭(Alias)를 줘서 여러 개의 풀을 이용할 수 있게 해줍니다.
* 이 값을 잘 기억하였다가 프로그램에서 실제 커넥션을 수립할때 인자로 줘야 합니다.
*/
private String POOL_ALIAS = "multiboard";
private String JDBC_DRIVER = "oracle.jdbc.driver.OracleDriver"; // driver
private String DB_URL = "jdbc:oracle:thin:@localhost:1521:KJWINDOW"; // url
private String DB_USER = "multiboard"; // id
private String DB_PASSWORD = "multiboard"; // pw
/* reapConnInterval은 다른 커넥션 풀들과는 틀린 부분이며 중요한
* 옵션입니다.
* reapConnInterval은 두가지 경우에 커넥션 풀의 connVector에서 커넥션을 제거하게 됩니다.
* 1. 풀에서 conn이 나갔는데(checkout) checkoutTimeout 시간안에 돌아오지 않을 경우
* 2. 풀의 connVector에서 전혀사용되지 않는 상태(idle)로 idleTimeout 시간을 초과할 경우
* bitmechanic의 커넥션 풀은 최대 Connection 수를 설정해도 30이면 30개 커넥션이 담겨져
* 있는 것이 아니라 상황에 따라 적절히 조정 하며 전혀 사용이 되지 않으면(Idle)수를 줄입니다.
* 즉, maxConn이 30이어도 사용특성에 따라 몇 개만이 풀에서 운용될 수도 있다는 이야기 입니다.
*/
private int REAP_CONN_INTERVAL = 300; // 여기서부터는 bitmechanic 을 위한 환경 설정 값
/* 커넥션 풀에 담을 수 있는 커넥션의 최대 수 */
private int MAX_CONNECTION = 20;
/* idleTimeout은 ConnectionPoolManager가 그 간격으로 수행을
* 하게 되므로 적당한 시간을 설정하면 됩니다.
* (데이터베이스의 불필요한 Open Session 수를 줄일 수 있슴)
*/
private int IDLE_TIMEOUT = 60;
/* checkoutTimeout은 너무 짧게 설정해도 안되는게 정상적인 query 수행시간이 길다면
* 정상적으로 작동하는 query 수행 중에 Connection을 Reaping(제거)해 버리므로
* 최대의 쿼리 수행 시간보다 크게 설정해야 합니다.
* 즉 풀에서 나갔다가 돌아오는 시간의 Timeout 설정
*/
private int CHECKOUT_TIMEOUT = 60;
//Checkout의 최대 수를 지정 합니다
private int MAX_CHECKOUT = 15;
public void init(ServletConfig config) throws ServletException
{
try
{
Class.forName(JDBC_DRIVER);
cpm = new ConnectionPoolManager(REAP_CONN_INTERVAL);
cpm.addAlias(POOL_ALIAS,JDBC_DRIVER,DB_URL,DB_USER,DB_PASSWORD,MAX_CONNECTION,IDLE_TIMEOUT,CHECKOUT_TIMEOUT, MAX_CHECKOUT);
KKJLog.info("=========================================");
KKJLog.info(" ");
KKJLog.info(" NewActionServlet Servlet Init... [OK] ");
KKJLog.info(" ");
KKJLog.info(" [Connection Pool Init OK] ");
KKJLog.info(" ");
KKJLog.info("=========================================");
// connection pool 생성 후에 부모 class의 init method 연속 수행
super.init(config);
}
catch ( Exception e1 )
{
KKJLog.info("=========================================");
KKJLog.info(" ");
KKJLog.info(" NewActionServlet Servlet Init...[ERROR]");
KKJLog.info(" ");
KKJLog.info(" [Connection Pool Init ERROR] ");
KKJLog.info(" ");
KKJLog.info("=========================================");
KKJLog.info(e1.toString());
e1.printStackTrace();
}
}
}
////////////// web.xml /////////////////////////////////////////////
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>Welcome to Tomcat</display-name>
<description>
Welcome to Tomcat
</description>
<!-- Struts Tag Library Descriptors -->
<taglib>
<taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>multiboard.NewActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- ActionServlet Mapping ====================================-->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
다음은 스트럿츠에서의 한글 설정 부분입니다.
////////////// MyFilter.java ////////////////////////////////////////
package multiboard;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.RequestProcessor;
public class MyFilter extends RequestProcessor {
protected boolean processPreprocess(
HttpServletRequest request,
HttpServletResponse response) {
try {
request.setCharacterEncoding("euc-kr");
return true;
} catch (Exception e) {
return false;
}
}
}
/////////////// struts-config.xml ///////////////////////////////////
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
<!-- ========== Form Bean Definitions ================================== -->
<form-beans>
</form-beans>
<!-- ========== Global Forward Definitions =============================== -->
<global-forwards>
</global-forwards>
<!-- ========== Action Mapping Definitions =============================== -->
<action-mappings>
</action-mappings>
<!-- LANGUAGE SETTING -->
<controller
contentType="text/html;charset=euc-kr"
debug="3"
locale="true"
nocache="true"
processorClass="multiboard.MyFilter"/>
</struts-config>
댓글 없음:
댓글 쓰기