監控Proxool連接池的活動連接變化情況

          研究了Proxool連接池的源代碼后完成下面的程序,Proxool連接池的配置過程略。

          /*
          *@author 我為J狂 建立日期 2007-4-18
          *
          */

          package net.blogjava.lzqdiy;

          import java.net.URL;
          import java.sql.*;
          import org.logicalcobwebs.proxool.ProxoolException;
          import org.logicalcobwebs.proxool.ProxoolFacade;
          import org.logicalcobwebs.proxool.configuration.JAXPConfigurator;
          import org.logicalcobwebs.proxool.admin.SnapshotIF;

          public class DBConnection
          {

              
          private static boolean initialized = false;

              
          private static int activeCount = 0;

              
          public static Connection getConnection() throws SQLException
              
          {
                  Connection connection 
          = null;
                  
          if (!initialized)
                  
          {

                      init();
                  }


                  connection 
          = DriverManager.getConnection("proxool.Develop");
                  
          try
                  
          {
                      SnapshotIF snapshot 
          = ProxoolFacade.getSnapshot("Develop"true);
                      
          int curActiveCount = snapshot.getActiveConnectionCount();// 獲得活動連接數
                      int availableCount = snapshot.getAvailableConnectionCount();// 獲得可得到的連接數
                      int maxCount = snapshot.getMaximumConnectionCount();// 獲得總連接數
                      if (curActiveCount != activeCount)// 當活動連接數變化時輸出信息
                      {
                          System.out.println(
          "----------------------------------");
                          System.out
                                  .println(curActiveCount 
          + "(active)  " + availableCount
                                          
          + "(available)  " + maxCount + "(max)");
                          System.out.println(
          "----------------------------------");
                          activeCount 
          = curActiveCount;
                      }


                  }
           catch (ProxoolException e)
                  
          {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  }

                  
          if (connection != null)
                  
          {

                      
          return connection;
                  }
           else
                  
          {
                      
          throw new NullPointerException(
                              
          "Didn't get connection, which probably means that no Driver accepted the URL");
                  }


              }


              
          private static void init()
              
          {
                  String fileName 
          = "proxool.xml";
                  URL resourceURL 
          = null;
                  
          try
                  
          {
                      
          if (Thread.currentThread().getContextClassLoader() != null)
                      
          {
                          resourceURL 
          = Thread.currentThread().getContextClassLoader()
                                  .getResource(fileName);
                      }


                      
          if (resourceURL == null)
                      
          {
                          resourceURL 
          = DBConnection.class.getClassLoader().getResource(
                                  fileName);
                      }


                      JAXPConfigurator.configure(resourceURL.getFile(), 
          false);
                      Class.forName(
          "org.logicalcobwebs.proxool.ProxoolDriver");
                  }
           catch (ClassNotFoundException e)
                  
          {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  }
           catch (ProxoolException e)
                  
          {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  }

                  initialized 
          = true;
              }

          }

          proxool.xml內容

          <?xml version="1.0" encoding="UTF-8"?>
          <something-else-entirely>
            
          <proxool>
              
          <alias>Develop</alias>
              
          <driver-url>jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.6)(PORT=1521)))(CONNECT_DATA=(SID=lzqdiy)(SERVER=DEDICATED)))
              
          </driver-url>
              
          <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
              
          <driver-properties>
                
          <property name="user" value="lzqdiy"/>
                
          <property name="password" value="lzqdiy"/>
              
          </driver-properties>
              
          <maximum-connection-count>120</maximum-connection-count>
              
          <minimum-connection-count>20</minimum-connection-count>
              
          <house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>
            
          </proxool>
          </something-else-entirely>

          通過語句:Connection con=DBConnection.getConnection();來獲得一個數據庫連接,當活動連接數變化時向控制臺輸出連接信息。

          posted on 2007-04-18 20:58 我為J狂 閱讀(3071) 評論(7)  編輯  收藏 所屬分類: 數據庫編程

          評論

          # re: 監控Proxool連接池的活動連接變化情況 2007-04-20 09:21 nanako

          我用了proxool后做了一下測試,沒想到速度竟然比hibernate自帶的連接池還要慢,不知道是什么原因  回復  更多評論   

          # re: 監控Proxool連接池的活動連接變化情況 2007-04-20 10:20 nanako

          為什么我的監控頁面里active的connection的數量總是0?  回復  更多評論   

          # re: 監控Proxool連接池的活動連接變化情況 2007-04-20 11:23 我為J狂

          @nanako
          proxool連接池的性能應該是最好的,如果不信,你可以去看看這篇文章http://hi.baidu.com/dburu/blog/item/7335892f6a8662391f3089be.html
          對于您提出的active的connection的數量為0的問題,我沒遇到過,不過我想應該是你的連接池配置的問題。  回復  更多評論   

          # re: 監控Proxool連接池的活動連接變化情況 2007-04-20 14:11 nanako

          @我為J狂
          連接數據為零的問題我解決了,但是性能確實沒有hibernate自帶的快,而且慢了很多,我也覺得很奇怪,不知道你自己做過測試沒有,還有想問問你的proxool的參數是怎么配的  回復  更多評論   

          # re: 監控Proxool連接池的活動連接變化情況 2007-04-20 14:20 我為J狂

          @nanako
          我們公司用的就是proxool連接池,感覺還不錯,hibernate自帶的連接池我沒用過。
            回復  更多評論   

          # re: 監控Proxool連接池的活動連接變化情況 2007-05-22 16:50 java_蟈蟈

          我配置后,能讀出數據,但會拋出如下異常,這是什么原因???
          org.logicalcobwebs.proxool.ShutdownHook] - Problem calling "get cause" on IllegalStateException.
          java.lang.reflect.InvocationTargetException   回復  更多評論   

          # re: active的connection的數量為0況 2007-12-15 00:26 kainsas

          我的也總是零,怎么回事啊??  回復  更多評論   

          <2007年4月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統計

          常用鏈接

          留言簿(11)

          隨筆分類(48)

          文章分類(29)

          常去逛逛

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 姜堰市| 金堂县| 航空| 阿鲁科尔沁旗| 隆尧县| 广元市| 台东县| 公主岭市| 新丰县| 井研县| 河池市| 富裕县| 乌恰县| 北流市| 桦甸市| 鸡西市| 德昌县| 梓潼县| 河西区| 栾川县| 祁连县| 高安市| 横山县| 固镇县| 三台县| 景洪市| 丰台区| 章丘市| 信阳市| 新和县| 凤城市| 郯城县| 息烽县| 乐业县| 鄱阳县| 梨树县| 镇坪县| 嵊泗县| 兰溪市| 明水县| 莫力|