プロファイル
21250 ワード
ソース: http://sunnylocus.iteye.com/blog/359570
proxoolデータベース接続プールのフレームワークは、あなたが選択した他のタイプのドライバの接続プールのパッケージを提供します.既存のコードに簡単に移植できます.完全に設定可能です.快速、成熟、健やか.既存のJDBCドライバに透明に接続池機能を追加できます.今までの最新バージョンはproxool 0.9.1です.公式サイトから最新バージョンをダウンロードできます.http://proxool.sourceforge.net
一、プロxool.xmlファイルの設定
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プールの情報が見えます.
http://sunnylocus.iteye.com/upload/picture/pic/34529/d9240b55-37c3-3eac-83c1-cb6aeb6a61aa.jpg
三、より詳細なproxool.xmlの配置属性説明:
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に登録してもいいです.
バージョン:詳細設定.パラメータブック値
------------------------------------------------------
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プールの情報が見えます.
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>