proxool 설정

자료 출처:  http://sunnylocus.iteye.com/blog/359570
  proxool 데이터베이스 연결 풀 프레임 워 크 는 선택 한 다른 유형의 드라이버 에 대한 연결 풀 패 키 지 를 제공 합 니 다.기 존 코드 에 아주 간단하게 이식 할 수 있 습 니 다.완전히 설정 가능 합 니 다.빠르다기 존의 JDBC 드라이버 에 연결 풀 기능 을 투명 하 게 추가 할 수 있 습 니 다.지금까지 최신 버 전 은 proxool 0.9.1 로 홈 페이지 에서 최신 버 전 을 다운로드 할 수 있 습 니 다.http://proxool.sourceforge.net
1. proxool. xml 파일 설정
<?xml version="1.0" encoding="UTF-8"?>
    <!--
        the proxool configuration can be embedded within your own
        application's. Anything outside the "proxool" tag is ignored.
    -->
<something-else-entirely>
    <proxool>
        <alias>dbname</alias> <!--      -->
        <driver-url>jdbc:oracle:thin:@127.0.0.1:1521:testdb</driver-url><!--url   -->
        <driver-class>oracle.jdbc.driver.OracleDriver</driver-class> <!--   -->
        <driver-properties>
            <property name="user" value="username" /> <!--   -->
            <property name="password" value="password" /><!--  -->
        </driver-properties>
        <!--     (  5 ),        ,     ,        ,         maximum-new-connections   -->
        <maximum-connection-count>100</maximum-connection-count>
        <!--     (  2 )-->
        <minimum-connection-count>10</minimum-connection-count>
        <!--proxool               (  ),             ,        30 -->
        <house-keeping-sleep-time>90000</house-keeping-sleep-time>
        <!--                       ,                  -->
        <maximum-new-connections>10</maximum-new-connections>
        <!--          (  2 )-->
        <prototype-count>5</prototype-count>
        <!--       -->
        <test-before-use>true</test-before-use>
        <!--            -->
        <house-keeping-test-sql>select sysdate from dual</house-keeping-test-sql>
    </proxool>
</something-else-entirely> 

2. 웹. xml 설정
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
  <servlet-name>ServletConfigurator</servlet-name>
  <servlet-class>
    org.logicalcobwebs.proxool.configuration.ServletConfigurator
  </servlet-class>
  <init-param>
    <param-name>xmlFile</param-name>
    <param-value>WEB-INF/proxool.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>

<servlet>
  <servlet-name>Admin</servlet-name>
  <servlet-class>
    org.logicalcobwebs.proxool.admin.servlet.AdminServlet
  </servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>Admin</servlet-name>
  <url-pattern>/admin</url-pattern>
</servlet-mapping>
<!--       ,  Tomcat              -->
<security-constraint>
  <web-resource-collection>
      <web-resource-name>proxool</web-resource-name>
      <url-pattern>/admin</url-pattern>
  </web-resource-collection>
  <auth-constraint>
     <role-name>manager</role-name>
     </auth-constraint>
  </security-constraint>
 <login-config>
     <auth-method>BASIC</auth-method>
     <realm-name>proxool manager Application</realm-name>
  </login-config>
  <security-role>
    <description>The role that is required to log in to the Manager Application</description>
     <role-name>manager</role-name>
 </security-role>
  <error-page>
    <error-code>401</error-code>
    <location>/401.jsp</location>
  </error-page>
</web-app>


 
ServletConfigurator: proxool. xml 파일 을 불 러 오고 초기 화 합 니 다. 데이터 베 이 스 를 연결 하 는 것 이기 때 문 입 니 다. 다른 많은 모듈 은 데 이 터 를 사용 하기 때문에 load - on - startup 을 먼저 불 러 와 야 합 니 다. 수치 가 작 을 수록 먼저 불 러 옵 니 다. Admin: 데이터베이스 연결 풀 의 연결 상황 모니터링
/ / 데이터베이스 연결 을 가 져 오 는 문장
Connection conn=DriverManager.getConnection("proxool.dbname");
 
 
메모: 401. jsp 페이지 에 추가 해 야 합 니 다.
<%   response.setHeader("WWW-Authenticate", "Basic realm=\"Tomcat Manager Application\""); %>이 말 은 그렇지 않 으 면 연결 풀 정 보 를 방문 / admin 에서 살 펴 볼 때 401. jsp 페이지 로 바로 이동 합 니 다.admin / 에 접근 하 는 사용자 에 게 사용자 이름과 비밀 번 호 를 입력 하고 manager 역할 이 어야 합 니 다. 세 번 의 입력 이 정확 하지 않 아야 401. jsp 페이지 로 이동 할 수 있 습 니 다. 그림 참조
proxool 配置_第1张图片
정확 한 사용자 이름과 비밀 번 호 를 입력 해 야 proxool 풀 의 정 보 를 볼 수 있 습 니 다.

http://sunnylocus.iteye.com/upload/picture/pic/34529/d9240b55-37c3-3eac-83c1-cb6aeb6a61aa.jpg  
3. 더 자세 한 proxool. xml 설정 속성 설명:
 <?xml version="1.0" encoding="ISO-8859-1"?>
<!--
Properties for Proxool Configurator testing. Defines the same parameters as
TestHelper.buildCompleteAlternativeProperties()
-->
<something-else-entirely xmlns="http://sumthin.else.entirely" xmlns:proxool="The latest version is available at http://proxool.sourceforge.net/xml-namespace">
    <proxool:proxool>
        <proxool:alias>xml-test-ns</proxool:alias>
        <proxool:driver-url>jdbc:hsqldb:db/test</proxool:driver-url>
        <proxool:driver-class>org.hsqldb.jdbcDriver</proxool:driver-class>
        <proxool:driver-properties>
            <proxool:property name="user" value="sa"/>
            <proxool:property name="password" value=""/>
        </proxool:driver-properties>
        <proxool:house-keeping-sleep-time>40000</proxool:house-keeping-sleep-time>
        <proxool:house-keeping-test-sql>select CURRENT_DATE</proxool:house-keeping-test-sql>
        <proxool:maximum-connection-count>10</proxool:maximum-connection-count>
        <proxool:minimum-connection-count>3</proxool:minimum-connection-count>
        <proxool:maximum-connection-lifetime>18000000</proxool:maximum-connection-lifetime> <!-- 5 hours -->
        <proxool:simultaneous-build-throttle>5</proxool:simultaneous-build-throttle>
        <proxool:recently-started-threshold>40000</proxool:recently-started-threshold>
        <proxool:overload-without-refusal-lifetime>50000</proxool:overload-without-refusal-lifetime>
        <proxool:maximum-active-time>60000</proxool:maximum-active-time>
        <proxool:verbose>true</proxool:verbose>
        <proxool:trace>true</proxool:trace>
        <proxool:fatal-sql-exception>Fatal error</proxool:fatal-sql-exception>
        <proxool:prototype-count>2</proxool:prototype-count>
    </proxool:proxool>
    <nothing-to-do-with-proxool>
        <proxool:proxool>
            <proxool:alias>xml-test-ns-2</proxool:alias>
            <proxool:driver-url>jdbc:hsqldb:db/test</proxool:driver-url>
            <proxool:driver-class>org.hsqldb.jdbcDriver</proxool:driver-class>
            <proxool:driver-properties>
                <proxool:property name="user" value="sa"/>
                <proxool:property name="password" value=""/>
            </proxool:driver-properties>
            <proxool:house-keeping-sleep-time>40000</proxool:house-keeping-sleep-time>
            <proxool:house-keeping-test-sql>select CURRENT_DATE</proxool:house-keeping-test-sql>
            <proxool:maximum-connection-count>10</proxool:maximum-connection-count>
            <proxool:minimum-connection-count>3</proxool:minimum-connection-count>
            <proxool:maximum-connection-lifetime>18000000</proxool:maximum-connection-lifetime> <!-- 5 hours -->
            <proxool:simultaneous-build-throttle>5</proxool:simultaneous-build-throttle>
            <proxool:recently-started-threshold>40000</proxool:recently-started-threshold>
            <proxool:overload-without-refusal-lifetime>50000</proxool:overload-without-refusal-lifetime>
            <proxool:maximum-active-time>60000</proxool:maximum-active-time>
            <proxool:verbose>true</proxool:verbose>
            <proxool:trace>true</proxool:trace>
            <proxool:fatal-sql-exception>Fatal error</proxool:fatal-sql-exception>
            <proxool:prototype-count>2</proxool:prototype-count>
        </proxool:proxool>
    </nothing-to-do-with-proxool>
</something-else-entirely>

속성 목록 설명:
fatal - sql - exception: 쉼표 로 분 할 된 정보 세 션 입 니 다. SQL 이상 이 발생 하면 그의 이상 정 보 는 이 정보 세 션 과 비교 합 니 다. 세 션 에 존재 하면 이 이상 은 치 명 적 인 오류 (Fatal SQL Exception) 로 여 겨 집 니 다. 이 경우 데이터베이스 연결 은 포 기 됩 니 다. 무슨 일이 있어 도,이 이상 은 소비자 에 게 제공 하기 위해 다시 던 져 질 것 입 니 다. 사용 자 는 스스로 다른 이상 을 설정 하여 던 지 는 것 이 좋 습 니 다.
fatal - sql - exception - wrapper - class: 위 에서 말 한 바 와 같이 다른 이상 을 설정 하여 다시 던 지 는 것 이 좋 습 니 다. 이 속성 을 이용 하여 사용 자 는 SQLException 을 포장 할 수 있 습 니 다.그 를 또 다른 이상 으로 만 들 었 다. 이 이상 또는 SQLException 또는 계승 자 Runtime Exception. proxool 은 'org. logicalcobweb. proxool. FatalSQLException' 과 'org. logicalcobweb. proxool. FatalRuntime Exception' 을 자체 적 으로 가 져 왔 다. 후 자 는 더욱 적합 하 다.
house - keeping - sleep - time: house keeper 는 스 레 드 가 수면 상태 에 있 는 가장 긴 시간 을 유지 합 니 다. house keeper 의 직책 은 각 연결 상 태 를 검사 하고 소각 하거나 만들어 야 하 는 지 판단 하 는 것 입 니 다.
house-keeping-test-sql:  남 은 데이터베이스 연결 이 발견 되면 house keeper 는 이 문 구 를 사용 하여 테스트 합 니 다. 이 문 구 는 매우 빨리 실행 되 는 것 이 좋 습 니 다. 정의 가 없 으 면 테스트 과정 은 무 시 됩 니 다.
injectable - connection - interface: proxool 이 대 리 된 connection 대상 을 실현 하 는 방법 을 허용 합 니 다.
injectable - statement - interface: proxool 이 대 리 된 Statement 대상 을 실현 하 는 방법 을 허용 합 니 다.
injectable - prepared - statement - interface: proxool 이 대 리 된 Prepared Statement 대상 을 실현 하 는 방법 을 허용 합 니 다.
injectable - calable - statement - interface: proxool 이 대 리 된 Callable Statement 대상 을 실현 하 는 방법 을 허용 합 니 다.
생략
jmx - agent - id: 략
jndi - name: 데이터 원본 이름
maximum - active - time: housekeeper 가 이 수치 보다 활동 시간 이 많은 것 을 감지 하면 이 스 레 드 를 죽 일 것 입 니 다. 따라서 서버 의 대역 폭 을 확인 하고 적당 한 값 을 정 하 십시오. 기본 값 은 5 분 입 니 다.
maximum - connection - count: 최대 데이터베이스 연결 수.
maximum - connection - lifetime: 하나의 스 레 드 의 최대 수명.
minimum - connection - count: 최소 데이터베이스 연결 수
overload - without - refural - lifetime: 약
prototype - count: 연결 탱크 에서 사용 할 수 있 는 연결 수량 입 니 다. 현재 연결 탱크 의 연결 이 이 수치 보다 적 으 면 새로운 연결 이 만들어 집 니 다. (최대 사용 가능 한 수 를 초과 하지 않 았 다 고 가정 합 니 다) 예 를 들 어, 우 리 는 3 개의 활동 으로 2 개의 연결 이 가능 합 니 다. 우리 의 prototype - count 는 4 입 니 다.그러면 데이터베이스 연결 탱크 는 다른 2 개의 연결 을 만 들 려 고 합 니 다. 이것 은 minimum - connection - count 와 다 릅 니 다. minimum - connection - count 는 활동 의 연결 도 계산 합 니 다. prototype - count 는 spare connections 의 수량 입 니 다.
recently-started-threshold:  대략.
simultaneous-build-throttle:  대략.
statistics: 연결 탱크 사용 현황 통계.인자 "10s, 1m, 1d"
statistics-log-level:  로그 통계 추적 형식.인자 "ERROR" 또는 "INFO"
test - before - use: 약
test - after - use: 약
trace: true 라면 실 행 된 SQL 문 구 는 실행 기간 에 log 에 기 록 됩 니 다 (DEBUG LEVEL). Connection Listener (ProxoolFacade 참조) 를 등록 하여 이 정 보 를 얻 을 수 있 습 니 다.
verbose: 상세 정보 설정.매개 변수 bool 값
------------------------------------------------------------------------------------------------------
1.	 WEB-INF   proxool.xml 
    <?xml version="1.0" encoding="UTF-8"?>
  <proxool>
    <alias>DBPool</alias>   <!--         -->
    <driver-url>jdbc:sqlserver://localhost:1433;DatabaseName=test</driver-url>
    <driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
    <driver-properties>
      <property name="user" value="sa"/>
      <property name="password" value="sa1234"/>
    </driver-properties>
     <!--                (  ,             ,      -->
    <house-keeping-sleep-time>90000</house-keeping-sleep-time>
    <!--         ,                         ,        ,           -->
    <proxool.simultaneous-build-throttle>20</proxool.simultaneous-build-throttle>
    <!--            -->
    <prototype-count>1</prototype-count>
    <!--        ,       ,     ,       -->
    <maximum-connection-count>1</maximum-connection-count>
    <!--       -->
    <minimum-connection-count>1</minimum-connection-count>
    <!--              .house keeper           .             .      ,         。 -->
    <house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>
  </proxool>

2.	 web.xml   
   <!-- proxool       -->
  <servlet>
     <servlet-name>proxoolServletConfigurator</servlet-name>
 <servlet-class>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class>
     <init-param>
       <param-name>xmlFile</param-name>
       <param-value>WEB-INF/proxool.xml</param-value><!--         xml     -->
     </init-param>
     <load-on-startup>1</load-on-startup>
   </servlet>
<!-- proxool         ,            -->
   <servlet>
    <servlet-name>Admin</servlet-name>
      <servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class>
   </servlet>
   <servlet-mapping>
    <servlet-name>Admin</servlet-name>
    <url-pattern>/admin</url-pattern>
   </servlet-mapping>

3.	jsp  
  <%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@page import="java.sql.*"%>
<%@page contentType="text/html; charset=GBK"%>
<%@page import="test.*"%>

<html>
<head>
<title>ProxoolTest</title>
</head>
<body bgcolor="#ffffff">
<h1>Proxool     </h1>
<%
  Connection con = null;
  Statement stmt = null;
  ResultSet rs = null;
  try {
    con = DriverManager.getConnection("proxool.DBPool");
    stmt = con.createStatement();

    String query = "select * from test t";
    out.println("query:" + query+ "--OK<br/>");
    rs = stmt.executeQuery(query);
    out.println("rs.next():" + rs.next()+ "--OK<br/>");
  
    while (rs.next()) {
      out.println(rs.getString(3) + "--OK<br/>");
    }
  }
  catch (SQLException sqle) {
    out.println("sqle=" + sqle+ "--OK<br/>");
  }
  finally {
    try {
      rs.close();
      stmt.close();
      if (con != null) {
        con.close();
      }
    }
    catch (SQLException sqle) {
      out.println("sqle=" + sqle+ "--OK<br/>");
    }
  }
%>
</body>
</html>

4.	main  
      
  
import java.sql.Connection;   
import java.sql.DriverManager;   
import java.sql.ResultSet;   
import java.sql.Statement;   
  
import org.logicalcobwebs.proxool.configuration.JAXPConfigurator;   
  
public class TestProxool {   
    // public static String dburl =   
    // "jdbc:oracle:thin:@192.168.104.192:1521:tim";   
    public static String dburl = "jdbc:sqlserver://localhost:1433;DatabaseName=test";   
    public static String user = "sa";   
    public static String password = "sa1234";   
  
    /**  
     * JDBC      
     *   
     * @throws Exception  
     */  
    public static void test1() throws Exception {   
        String testsql = "select * from test";   
        // 1:        
        // Class.forName("oracle.jdbc.driver.OracleDriver");   
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");   
        // 2:          
        Connection conn = DriverManager.getConnection(dburl, user, password);   
        // 3:    SQL      
        Statement stmt = conn.createStatement();   
        // 4:  SQL,          
        ResultSet rs = stmt.executeQuery(testsql);   
        // 5:      ,           
        while (rs.next()) {   
            System.out.print(rs.getString("a") + "\t");   
            // System.out.print(rs.getString("name") + "\t");   
            System.out.println();   
        }   
        // 6:          
        conn.close();   
    }   
  
    /**  
     * proxool      
     *   
     * @throws Exception  
     */  
    public static void test2() throws Exception {   
        // Java           ,               
        JAXPConfigurator.configure("D:\\workspace\\PoolTest\\src\\proxool.xml",   false);   
        String testsql = "select * from test";   
        // 1:     ,          Oracle    , Proxool        
        Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");   
        // 2:       ,          ,       ,         DBPool,     :proxool.         
        Connection conn = DriverManager.getConnection("proxool.DBPool");   
        // 3:    SQL      
        Statement stmt = conn.createStatement();   
        // 4:  SQL,          
        ResultSet rs = stmt.executeQuery(testsql);   
        // 5:      ,           
        while (rs.next()) {   
            System.out.print(rs.getString("e") + "\t");   
            // System.out.print(rs.getString("name") + "\t");   
            System.out.println();   
        }   
        // 6:          
        conn.close();   
    }   
  
    public static void main(String[] args) throws Exception {   
         //test1();   
        test2();  
    	    	
    }   
}  


5.	java+jsp
(1)java  
  package test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import org.logicalcobwebs.proxool.ProxoolException;
import org.logicalcobwebs.proxool.ProxoolFacade;
import org.logicalcobwebs.proxool.admin.SnapshotIF;
import org.logicalcobwebs.proxool.configuration.JAXPConfigurator;

public class PoolManager {

	private static int activeCount = 0;

	public PoolManager() {

	}

	/**
	 * *      * getConnection *
	 * 
	 * @param name
	 * 
	 * @return
	 */
	public Connection getConnection() {
		try {
			// JAXPConfigurator.configure("D:\\workspace\\PoolTest\\src\\proxool.xml",
			// false);
			Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");// proxool   
			Connection conn = DriverManager.getConnection("proxool.DBPool");
			//    DBPool  proxool.xml         
			showSnapshotInfo();

			return conn;
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return null;
	}

	/**
	 * 
	 *               * showSnapshotInfo
	 */
	private void showSnapshotInfo() {
		try {
			SnapshotIF snapshot = ProxoolFacade.getSnapshot("DBPool", true);
			int curActiveCount = snapshot.getActiveConnectionCount();//        
			int availableCount = snapshot.getAvailableConnectionCount();//          
			int maxCount = snapshot.getMaximumConnectionCount();//       
			if (curActiveCount != activeCount)//               
			{
				System.out.println("     :" + curActiveCount
						+ "(active)         :" + availableCount
						+ "(available)      :" + maxCount + "(max)");
				activeCount = curActiveCount;
			}
		} catch (ProxoolException e) {
			e.printStackTrace();
		}
	}

	/**
	 * *       
	 * * getConnection  *
	 * 
	 * @param name
	 *         
	 * @return 
	 */
	public Connection getConnection(String name) {
		return getConnection();
	}

	/**
	 *  *       * freeConnection  *
	 * 
	 * @param conn
	 *          
	 */
	public void freeConnection(Connection conn) {
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

	/**
	 * *       * freeConnection  *
	 * 
	 * @param name
	 *           *
	 * @param con
	 *          
	 */
	public void freeConnection(String name, Connection con) {
		freeConnection(con);
	}

	public void getQuery() {
		try {
			Connection conn = getConnection();
			if (conn != null) {
				Statement statement = conn.createStatement();
				ResultSet rs = statement.executeQuery("select * from test");
				int c = rs.getMetaData().getColumnCount();
				while (rs.next()) {
					System.out.println();
					for (int i = 1; i <= c; i++) {
						System.out.print(rs.getObject(i));
					}
				}
				rs.close();
			}
			freeConnection(conn);
		} catch (SQLException e) {
			e.printStackTrace();
		}

	}

}
(2)jsp  
   <%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@page import="java.sql.*"%>
<%@page contentType="text/html; charset=GBK"%>
<%@page import="test.*"%>

<html>
	<head>
		<title>ProxoolTest</title>
	</head>
	<body bgcolor="#ffffff">
		<h1>
			Proxool     
		</h1>
		<%
			Connection con = null;
			try {
				PoolManager poo = new PoolManager();
				//con =poo.getConnection();
				poo.getQuery();
			} catch (Exception sqle) {
				out.println("sqle=" + sqle + "--OK<br/>");
			} finally {

			}
		%>
	</body>
</html>



좋은 웹페이지 즐겨찾기