监控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狂 阅读(3043) 评论(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年5月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

统计

常用链接

留言簿(11)

随笔分类(48)

文章分类(29)

常去逛逛

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜