[ 
https://issues.apache.org/jira/browse/DBCP-590?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17679153#comment-17679153
 ] 

Gary D. Gregory commented on DBCP-590:
--------------------------------------

Would reimplementing the method as below make sense (all tests pass), or, is 
there an implementation that would be cleaner that you can think of?
{code:java}
    protected DataSource createDataSourceInstance() throws SQLException {
        if (!getAbandonedUsageTracking()) {
            final PoolingDataSource<PoolableConnection> pds = new 
PoolingDataSource<>(connectionPool);
            
pds.setAccessToUnderlyingConnectionAllowed(isAccessToUnderlyingConnectionAllowed());
            return pds;
        }
        // Workaround for https://issues.apache.org/jira/browse/DBCP-590
        final GenericObjectPool<PoolableConnection> connectionPool = 
getConnectionPool();
        final JdkProxySource<PoolableConnection> jdkProxySource = new 
JdkProxySource<>(getClass().getClassLoader(), new Class[] { Connection.class });
        final ProxiedObjectPool<PoolableConnection> proxiedConnectionPool = new 
ProxiedObjectPool<>(connectionPool, jdkProxySource);
        final PoolingDataSource<PoolableConnection> poolingDataSource = new 
PoolingDataSource<>(proxiedConnectionPool);
        
poolingDataSource.setAccessToUnderlyingConnectionAllowed(isAccessToUnderlyingConnectionAllowed());
        return poolingDataSource;
    }
{code}

> BasicDataSource#setAbandonedUsageTracking has no effect
> -------------------------------------------------------
>
>                 Key: DBCP-590
>                 URL: https://issues.apache.org/jira/browse/DBCP-590
>             Project: Commons DBCP
>          Issue Type: Bug
>    Affects Versions: 2.9.0
>            Reporter: RĂ©da Housni Alaoui
>            Priority: Major
>
> Passing {{true}} to {{BasicDataSource#setAbandonedUsageTracking(boolean 
> usageTracking)}} has no effect because {{UsageTracking#use}} is never called.
> From what I found, {{usageTracking}} can only work if the object pool is of 
> type {{ProxiedObjectPool}} . Alas, BasicDataSource enforces 
> {{GenericObjectPool}} concrete type preventing us from overriding 
> {{BasicDataSource#createObjectPool}} to return a {{ProxiedObjectPool}} .
> Is there something I missed or a workaround?



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to