Hi Trenton,

I agree with you... it's quick enough to add.  Thanks for the response.  I
think I'm almost there.

First, where do I put the "if (config != null &&..." code to cleanup
abandoned connection?

Second, how do I tell the PoolingDriver to use the MySQL driver?  I think
I'm missing a step somewhere.

Below is how I've customized your code (basically, db parameters stored in
environment vars).  I'll run it once per tomcat session and from then
forward get a connection with
DriverManager.getConnection("jdbc:apache:commons:dbcp:" + name)... at least
that's how I think it'll work.

Thanks again,

Joe

          AbandonedConfig abandonedConfig;
        ObjectPool connectionPool;
        ConnectionFactory connectionFactory;
        PoolableConnectionFactory poolableConnectionFactory;
        PoolingDriver driver;

        // setup the abandoned configuration
        abandonedConfig = new AbandonedConfig();
        abandonedConfig.setLogAbandoned(true);
        abandonedConfig.setRemoveAbandoned(true);
        abandonedConfig.setRemoveAbandonedTimeout(60);

        // setup the AbandonedObjectPool
        connectionPool = new AbandonedObjectPool(null, abandonedConfig);
 
((GenericObjectPool)connectionPool).setMaxActive(((Integer)reger.Vars.getEnv
Var("DBMAXACTIVEDBPOOLCONNECTIONS")).intValue());
 
((GenericObjectPool)connectionPool).setMaxIdle(((Integer)reger.Vars.getEnvVa
r("DBMAXIDLEDBPOOLCONNECTIONS")).intValue());
        ((GenericObjectPool)connectionPool).setTestWhileIdle(false);
 
((GenericObjectPool)connectionPool).setWhenExhaustedAction(GenericObjectPool
.WHEN_EXHAUSTED_BLOCK);
 
((GenericObjectPool)connectionPool).setMaxWait(((Integer)reger.Vars.getEnvVa
r("DBMAXWAIT")).intValue());
        ((GenericObjectPool)connectionPool).setTestOnBorrow(false);
        ((GenericObjectPool)connectionPool).setTestOnReturn(false);

 
((GenericObjectPool)connectionPool).setTimeBetweenEvictionRunsMillis(10000);
        ((GenericObjectPool)connectionPool).setNumTestsPerEvictionRun(10);
 
((GenericObjectPool)connectionPool).setMinEvictableIdleTimeMillis(10);

        connectionFactory = new
DriverManagerConnectionFactory((String)reger.Vars.getEnvVar("DBCONNECTIONURL
"), (String)reger.Vars.getEnvVar("DBUSERNAME"),
(String)reger.Vars.getEnvVar("DBPASSWORD"));
        poolableConnectionFactory = new
PoolableConnectionFactory(connectionFactory,connectionPool,null,"SELECT
accountid FROM account",false,false,Connection.TRANSACTION_SERIALIZABLE,
null, abandonedConfig);
        try {
            Class.forName("org.apache.commons.dbcp.PoolingDriver");
            String dbcpURL = "jdbc:apache:commons:dbcp:" + name;
            driver = (PoolingDriver) DriverManager.getDriver(dbcpURL);
            driver.registerPool(name, connectionPool);
        } catch (Exception e){
            e.printStackTrace();
        }

-----Original Message-----
From: Trenton D. Adams [mailto:[EMAIL PROTECTED] 
Sent: Friday, February 25, 2005 4:57 PM
To: Jakarta Commons Users List
Subject: Re: [dbcp] abandoned connection removal and logging not working

Joe Reger, Jr. wrote:
> Hi,
> 
> The AbandonedConfig object appears to be deprecated.  In planning for 
> future versions of dbcp, should I remove all usages of 
> AbandonedConfig, AbandonedObjectPool, etc?  If I do remove these 
> usages, will my code not function properly?  When it's deprecated will it
be replaced with something?
> Or folded into one of the other classes?
> 
> Thanks for sharing your code... it's exactly what I was looking for.

I was told that it is deprecated until they can find a better way of doing
the abandoned connection code.  So yes it's being removed, but being kept at
the same time. :)

Personally, I'm leaving mine the way it is until they re-engineer it. 
It's really only a small section of code to change when they've finally got
their part done, so I figured, what the heck. :)

> 
> Best,
> 
> Joe Reger
> 
> -----Original Message-----
> From: Trenton D. Adams [mailto:[EMAIL PROTECTED]
> Sent: Thursday, February 24, 2005 2:03 PM
> To: Jakarta Commons Users List
> Subject: Re: abandoned connection removal and logging not working
> 
> I looked in the AbandonedObjectPool code and found the following.
> 
>         if (config != null
>                  && config.getRemoveAbandoned()
>                  && (getNumIdle() < 2)
>                  && (getNumActive() > getMaxActive() - 3) ) {
>              removeAbandoned();
> 
> So, I never came close to the abandoned connections being removed 
> because my max active was set to 20 or something, and I had only a 
> couple of dangling connections.  I thought this would be done in a 
> background thread, but I guess not.
> 
> Trenton D. Adams wrote:
> 
>>I have the following code, and it doesn't clean up abandoned 
>>connections.  Anybody have an idea of what I am doing wrong?
>>
>>    AbandonedConfig abandonedConfig;
>>    ObjectPool connectionPool;
>>    ConnectionFactory connectionFactory;
>>    PoolableConnectionFactory poolableConnectionFactory;
>>    PoolingDriver driver;
>>
>>    // setup the abandoned configuration
>>    abandonedConfig = new AbandonedConfig();
>>    abandonedConfig.setLogAbandoned(true);
>>    abandonedConfig.setRemoveAbandoned(true);
>>    abandonedConfig.setRemoveAbandonedTimeout(60);
>>
>>    // setup the AbandonedObjectPool
>>    connectionPool = new AbandonedObjectPool(null, abandonedConfig);
>>    ((GenericObjectPool)connectionPool).setMaxActive(maxConn);
>>    ((GenericObjectPool)connectionPool).setMaxIdle(maxFree);
>>    ((GenericObjectPool)connectionPool).setTestWhileIdle(true);
>>    ((GenericObjectPool)connectionPool).setWhenExhaustedAction(
>>        GenericObjectPool.WHEN_EXHAUSTED_BLOCK);
>>    ((GenericObjectPool)connectionPool).setMaxWait(30);
>>    ((GenericObjectPool)connectionPool).setTestOnBorrow(true);
>>    ((GenericObjectPool)connectionPool).setTestOnReturn(true);
>>
>>((GenericObjectPool)connectionPool).setTimeBetweenEvictionRunsMillis(1
>>0000);
>>
>>    ((GenericObjectPool)connectionPool).setNumTestsPerEvictionRun(10);
>>    
>>((GenericObjectPool)connectionPool).setMinEvictableIdleTimeMillis(10);
>>
>>    connectionFactory = new DriverManagerConnectionFactory(url, user, 
>>password);
>>    poolableConnectionFactory = new PoolableConnectionFactory(
>>        connectionFactory,connectionPool,null,
>>        "SELECT 'ping' FROM dual",false,false,
>>        Connection.TRANSACTION_SERIALIZABLE, null, abandonedConfig);
>>    try
>>    {
>>      Class.forName("org.apache.commons.dbcp.PoolingDriver");
>>      dbcpURL = "jdbc:apache:commons:dbcp:" + name;
>>      driver = (PoolingDriver) DriverManager.getDriver(dbcpURL);
>>      driver.registerPool(name, connectionPool);
>>    }
>>    catch (Exception exception)
>>    {
>>      RemoteBannerServer.log(exception, "error creating DBCP 
>>connection pool");
>>    }
> 
> 
> 
> --
> Trenton D. Adams
> Web Programmer Analyst
> Navy Penguins at your service!
> Athabasca University
> (780) 675-6195
> 
> __ 
>     This communication is intended for the use of the recipient to whom it
>     is addressed, and may contain confidential, personal, and or
privileged
>     information. Please contact us immediately if you are not the intended
>     recipient of this communication, and do not copy, distribute, or take
>     action relying on it. Any communications received in error, or
>     subsequent reply, should be deleted or destroyed.
> ---
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 


--
Trenton D. Adams
Web Programmer Analyst
Navy Penguins at your service!
Athabasca University
(780) 675-6195
:wq!

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to