プロファイル


ソース:  http://sunnylocus.iteye.com/blog/359570
  proxoolデータベース接続プールのフレームワークは、あなたが選択した他のタイプのドライバの接続プールのパッケージを提供します.既存のコードに簡単に移植できます.完全に設定可能です.快速、成熟、健やか.既存のJDBCドライバに透明に接続池機能を追加できます.今までの最新バージョンはproxool 0.9.1です.公式サイトから最新バージョンをダウンロードできます.http://proxool.sourceforge.net
一、プロxool.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> 
二、配置web.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>

 
ServletConfigrator:proxool.xmlファイルをロードして初期化します.データベースに接続されています.他の多くのモジュールはデータを使用しています.まず、そのload-on-startupをロードしなければなりません.数値が小さいほど、先に読み込まれて初期化されます.データベース接続池の接続状況を監視します.
//データベース接続の文言を取得する
Connection conn=DriverManager.get Connection;
 
 
注意:401.jspページには必ず追加してください.
<%  レスポンス.set Header(「WW-Authenticate」,「Baic realm=」Tomcat Manager Apple");%この文は接続池の情報をアクセス/adminで確認しないと401.jspページに直接ジャンプします.私達はadmin/にアクセスしたいユーザーにユーザー名とパスワードを入力しなければなりません.そして、managerキャラクターでなければなりません.正しく入力しないと401.jspページにジャンプできません.
proxool 配置_第1张图片
正しいユーザー名とパスワードを入力してからproxoolプールの情報が見えます.

http://sunnylocus.iteye.com/upload/picture/pic/34529/d9240b55-37c3-3eac-83c1-cb6aeb6a61aa.jpg  
三、より詳細な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-wrapper-class:上に述べたように、異なる異常を設定して投げ直したほうがいいです.この属性を利用して、ユーザーはSQLExceptionを包装できます.彼を別の異常にさせました.この異常またはSQLExceptionを継承します.またはRuntimeException.proxoolは2つの実装を持っています.'org.logcal cobwebs.proxool.FatalSQLException'と'org.logcalcobwers.proxool.Fatallection.より適切です.
house-keepings-sleep-time:house keeperはスレッドを保留して睡眠状態にある最長時間、house keeperは各接続の状態を確認し、廃棄または作成する必要があるかどうかを判断するのが仕事です.
house-keepingn-test-sql:  空きデータベース接続が発見されたら.house keeperはこの文を使ってテストします.この文は一番速く実行したほうがいいです.定義がないとテストプロセスは無視されます.
injectable-connection-interface:プロxoolが代理されたconnectionオブジェクトを実現する方法を許可する.
injectable-statement-interface:proxoolが代理されているSttementオブジェクト方法を実現することを許可します.
injectable-prepard-statement-innt-interface:プロxoolがプロキシされたPreparedSttementオブジェクト方法を実現することを許可します.
injectable-statement-innt-interface:プロxoolが代理されたCallable Stationオブジェクト方法を実現することを許可します.
jmx:略
jmx-agent-i:略
jndi-name:データソースの名前
maximu-active-time:housekeeperがあるスレッドの活動時間がこの値より大きいことを検出したら.このスレッドを殺します.だからサーバーの帯域幅を確認してください.適切な値を決めます.デフォルトは5分です.
maximu-connection-count:最大のデータベース接続数.
maximu-connection-lifetime:スレッドの最大寿命.
minimum-connection-count:最小のデータベース接続数
overload-without-refusal-lifetime:略
prototype-count:接続池で利用可能な接続数.現在の接続池の接続がこの値より少ない場合、新しい接続が確立されます.(最大利用数を超えていないと仮定します.)例えば、3つのアクティブ接続があります.2つの利用可能な接続があります.私たちのprototype-countは4です.データベース接続池は他の2つの接続を確立しようとします.これはminimum-connection-countとは違います.minimum-connection-countは活動の接続を計算します.prototype-countはspare connectionsの数です.
recently-started-thress hold:  省略する
simultianeous-build-throttle:  省略する
statistics: 接続池の使用状況統計.パラメータ「10 s,1 m,1 d」
statistics-log-level:  ログ統計のトレースタイプ.パラメータ「ERROR」または「INFO」
test-before-use:略
test-after-use:略
trueであれば、各実行されるSQL文は実行期間中にlogに記録されます.また、Connection Listenerに登録してもいいです.
バージョン:詳細設定.パラメータブック値
------------------------------------------------------
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>