茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1729118 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
IMG_00071.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

爪哇咖啡屋 : [分享]proxool

發表者 討論內容
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[分享]proxool
proxool



SECTION 01 為何需要 connection pooling

當我們進入了 Java 的開發世界, pool 也是一門學問, 如何讓 connection 先建立好與 DB 的連結, 後來的人可以使用已經存在於 pool 的 connection, 減少連結的時間, 這麼優秀的功能, 在許多 application server 都已經實做好了, 你只要簡單地按照說明文件設定, 包括最多連結數量, 開始連結數量, 最大等待數量等等的參數, 當然, Tomcat 也有內建 commons-dbcp 相關的 connection pooling 機制, 請查閱 Tomcat JNDI Datasource 設定 !!


而 proxool 是一個強大的 connection pooling 專案, 相容於 jdk 1.3 以及 1.4. 也已經實作了 監控, 紀錄等等的功能, 對於一個有限制 connection 數量, 及注重 performation 的專案來說, 是一套非常完整的解決方案.

下載區, 目前版本 0.7.2

http://sourceforge.net/projects/proxool/


SECTION 02 設定 AdminServlet


首先, 你要把下載 proxool 的 lib 下面所有的 jar 檔, 放到 WEB-INF/lib 下面,

另外, 把你的 jdbc driver 也放到相同的 lib,

接著就是設定 /WEB-INF/web.xml web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "/WEB-INF/dtds/web-app_2_3.dtd">
<web-app>
<display-name>proxool</display-name>
<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>
</web-app>


SECTION 03 透過 ProxoolDriver 取得 connection

建立一個 jsp or DAO Bean, 透過 org.logicalcobwebs.proxool.ProxoolDriver 建立 Connection


test.jsp
<%@page import="java.sql.*"%>
<%
	Connection connection = null;
	try {
		Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
		connection = DriverManager.getConnection(
		"proxool.test:org.gjt.mm.mysql.Driver:jdbc:mysql://localhost:3306/test",
		"root",
		"password"
	);
	} catch (Exception e) {
		out.println(e)
	}
	out.println("OK");
%>




SECTION 04 檢視 pooling 現在狀態

執行 http://localhost:8080/proxool-test/admin ( proxool-test 是你的專案名稱 ) 如果沒有任何 pool 狀態的時候, 你只會看到 Pools 這幾個字, 所以你先執行 http://localhost:8080/proxool-test/test.jsp 建立一個 connection, 就可以監控 connection pooling 的狀態了.

Pools
> test -> jdbc:mysql://www:3306/test

Defintition for test
URL jdbc:mysql://localhost:3306/test
Driver org.gjt.mm.mysql.Driver
Connections 0 (min), 15 (max)
Prototyping off
Connection Lifetime 11:00:00
Maximum active time 07:05:00
House keeping sleep time 30s
House keeping test SQL off
Fatal SQL exceptions off
Statistics off

Snapshot at 21:12:53
Start date 01-??-2003 21:12:30
Connections 1 (active), 0 (available), 15 (max)
Served 1
Refused 0
Details
# born last
start
lap
(ms)
thread
1 21:12:31 21:12:31 22432 Thread-15
less information

Proxool 0.7.2 (29-Apr-2003 00:33)



SECTION 05 使用 properties 或者 xml 來設定 DB URL 及 Driver

可以採用 xml 設定, 在程式中使用 JAXPConfigurator.configure("proxool.xml", false); 將資料設定 WEB-INF/proxool.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- the proxool configuration can be embedded within your own application's. Anything outside the "proxool" tag is ignored. -->
<something-else-entirely>
<proxool>
<alias>xml-test</alias>
<driver-url>jdbc:mysql://localhost:3306/test</driver-url>
<driver-class>org.gjt.mm.mysql.Driver</driver-class>
<driver-properties>
<property name="user" value="root"/>
<property name="password" value="password"/>
</driver-properties>
<maximum-connection-count>10</maximum-connection-count>
<house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>
</proxool>
</something-else-entirely>



也可以採用 properties, 在程式 PropertyConfigurator.configure("proxool.properties"); 將資料設定WEB-INF/proxool.properties
jdbc-0.proxool.alias=property-test
jdbc-0.proxool.driver-url=jdbc:mysql://localhost:3306/test
jdbc-0.proxool.driver-class=org.gjt.mm.mysql.Driver
jdbc-0.user=root
jdbc-0.password=password
jdbc-0.proxool.maximum-connection-count=10
jdbc-0.proxool.house-keeping-test-sql=select CURRENT_DATE



如果在 Web 使用, 在 web.xml 也可以設定 ServletConfigurator Servlet 來註冊
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "/WEB-INF/dtds/web-app_2_3.dtd">
<web-app>
<display-name>proxool</display-name>
<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>
</web-app>

在程式中, 只需要利用到別名就可以呼叫 connection pool 裡面的 connection 來使用了
<%@page import="java.sql.*;"%>
<%
	Connection connection = null;
	try {
		Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
		connection = DriverManager.getConnection("proxool.xml-test");
	} catch (Exception e) {
		out.println(e);
	}
	out.println("ok");
%>


SECTION 06 使用 connection.close() 關閉 connection

以上的範例我都沒有寫 close, 希望大家在 connection 做完之後記得使用 close() 來關閉, 將 connection 還到 pool , 以免有 java.sql.SQLException: org.logicalcobwebs.proxool.ProxoolException: ConnectionCount is 10. Maximum connection count of 10 cannot be exceeded. 的現象發生.
前一個主題 | 下一個主題 | 頁首 | | |



Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|