JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » JDBC/SQL討論區 » Connection Pool  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to postflat modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 使用 jakata DBCP package 作 DB Connection pooling [精華]
精靈





發文: 86
積分: 7
於 2004-04-14 02:31 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
一般來說,在多人使用的系統中,應用程式若沒有運用 Connection pooling 的機制,會造成很大的效能問題,Connection 開開關關,除了慢,也會耗損資料庫伺服器的資源。大部分的 AP Server 都有提供 Connection pooling 的機制,程式設計師並無須去顧慮這個機制是如何運作的,只要懂得設定相關的參數即可。

假如說,某種狀況下,我們必須自行建置 Connection pooling 的機制時,該如何進行呢?自己寫當然是非常不划算的,況且也不一定寫的好,在這裡,我們使用 jakata project 裡的一個子專案 DBCP,來快速的建置一個隨處可用的 Connection pooling 機制。

在 Tomcat 裡,DBCP 是內建的,用來管理 DB Connection pooling。這個機制是可移植且可獨立出來使用的,要在你的運用程式中加上 DBCP 的功能,你必須至 http://jakarta.apache.org/commons/index.html 這個網址,找到該網頁內的 Components,共有三個必須下載:Collections 、 DBCP 、 Pool 。DBCP 是運用 Collections 及 Pool 這二個基礎的 Components 所設計出來的。當然,如果你有安裝 Tomcat server,最佳的方式是至 $TOMCAT_HOME/common/lib/ 目錄下去取得,保證版本的配合度不會出現問題。在 Tomcat server 裡,以 Tomcat 5.0.19 版內附的最新版本,這三個 Components 的檔名分別是 commons-collections.jar 、 commons-pool-1.1.jar 及 commons-dbcp-1.1.jar。

取得使用 DBCP 必備的 jar 檔後,請記得將這些 jar 檔,放置到 CLASSPATH 中,或直接放至 $JAVA_HOME/jre/lib/ext/ 目錄內。不過,由於 DBCP 有運用到 DataSource 的功能,而這功能是 J2EE 才有的,所以你還必須去下載 J2EE 的一個 javax.jar 檔。

環境建置好之後,接下來就可以開始設計 Connection Pooling 的機制,在這兒,我們介紹最簡單的作法,只要幾行指令就可以完成了,請看範例區裡的程式及其說明。

完成這個程式後,接下來在你的應用程式裡,用 DBConnect.getConnection() 來取得 DB Connection,就能享受到 Connection Pooling 的功能了。

在實際的運作中,這個範例有加上偵錯指令,會顯示出目前 Connection Pool 裡,有多少個 Idle 的 Connection 及多少個 Active 的 Connection,可供作為系統運作的參數調整依據。

範例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
01 package util;
02 
03 import java.sql.*;
04 import javax.naming.*;
05 import javax.sql.*;
06 
07 import org.apache.commons.dbcp.BasicDataSource;
08 
09 public class DBConnect {
10   static DataSource dataSource = null;
11 
12   public static DataSource setupDataSource( String sDrvName, String sUserName,
13       String sPwd, String connectURI ) {
14       BasicDataSource ds = new BasicDataSource();
15       ds.setDriverClassName( sDrvName );
16       ds.setUsername( sUserName );
17       ds.setPassword( sPwd );
18       ds.setUrl( connectURI );
19       ds.setMaxActive( 50 );
20       ds.setMaxIdle( 10 );
21       ds.setMaxWait( 10000 ); // 10 seconds
22       return ds;
23   }
24 
25 
26   // static init of the class
27   static {
28     try {
29       System.setProperty( "jdbc.drivers", "oracle.jdbc.driver.OracleDriver" );
30       Class.forName( "oracle.jdbc.driver.OracleDriver" );
31 
32       dataSource = setupDataSource( "oracle.jdbc.driver.OracleDriver", "username",
33         "password", "jdbc:oracle:thin:@192.168.0.1:1521:SID" );
34     }
35     catch (Exception e) {
36       System.out.println( "DBConnect.java => Unable to load driver."  + e.getMessage() );
37     }
38   }
39 
40   /**
41    * 空的建構元,不作任何處理動作。
42    */
43   public DBConnect() {}
44 
45   /**
46    * 取得 DB Connection.
47    */
48   public static Connection getConnection() throws SQLException,ClassNotFoundException {
49     BasicDataSource bds = (BasicDataSource) dataSource;
50     System.out.println("NumActive: " + bds.getNumActive() + ","
51       + "NumIdle: " + bds.getNumIdle() );
52     return dataSource.getConnection();
53   }
54 }


anthonychen edited on 2004-04-14 03:01
reply to postreply to post
話題樹型展開
人氣 標題 作者 字數 發文時間
33404 [精華] 使用 jakata DBCP package 作 DB Connection pooling 精靈 2973 2004-04-14 02:31
29861 Re:使用 jakata DBCP package 作 DB Connection pooling mingling 217 2004-04-23 11:16
24651 Re:使用 jakata DBCP package 作 DB Connection pooling zanyking 230 2005-05-23 12:56
22011 Re:使用 jakata DBCP package 作 DB Connection pooling jiangshachina 161 2005-11-09 14:37
21558 Re:使用 jakata DBCP package 作 DB Connection pooling tomingy 475 2005-12-28 10:10
19788 Re:使用 jakata DBCP package 作 DB Connection pooling krauphy 82 2006-06-05 18:39
19942 Re:使用 jakata DBCP package 作 DB Connection pooling magicfish 154 2006-06-08 23:33
17661 Re:使用 jakata DBCP package 作 DB Connection pooling xingxing365 59 2006-12-27 12:42
17407 Re:使用 jakata DBCP package 作 DB Connection pooling xeg921 120 2007-01-08 22:57
17419 Re:使用 jakata DBCP package 作 DB Connection pooling cphunterlin 48 2007-01-09 00:18
18166 Re:使用 jakata DBCP package 作 DB Connection pooling MegaBytes 216 2007-01-10 14:21
9265 Re:使用 jakata DBCP package 作 DB Connection pooling gfyy0827 2095 2010-04-29 14:00
29643 Re:使用 jakata DBCP package 作 DB Connection pooling 精靈 115 2004-04-24 03:25
29178 Re:使用 jakata DBCP package 作 DB Connection pooling Mit 76 2004-04-28 09:54
29147 Re:使用 jakata DBCP package 作 DB Connection pooling browser 137 2004-04-28 09:58
29142 Re:使用 jakata DBCP package 作 DB Connection pooling riochen 100 2004-04-28 16:20
29448 Re:使用 jakata DBCP package 作 DB Connection pooling koji 298 2004-04-28 16:54
13280 Re:使用 jakata DBCP package 作 DB Connection pooling singetter 253 2008-03-19 16:51
28120 Re:使用 jakata DBCP package 作 DB Connection pooling wolfskingoat 89 2004-08-18 15:59
27459 Re:使用 jakata DBCP package 作 DB Connection pooling tai1110 3210 2004-09-25 23:53
26809 Re:使用 jakata DBCP package 作 DB Connection pooling calvincalvin 315 2004-11-12 15:19
26212 Re:使用 jakata DBCP package 作 DB Connection pooling jianyu 92 2004-12-22 09:16
25382 Re:使用 jakata DBCP package 作 DB Connection pooling pen047 2293 2005-03-09 16:17
25717 Re:使用 jakata DBCP package 作 DB Connection pooling pen047 1889 2005-03-09 16:52
» JWorld@TW »  JDBC/SQL討論區 » Connection Pool

reply to postflat modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8