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

Réda Housni Alaoui commented on DBCP-590:
-----------------------------------------

Here is my workaround for now:
{code:java}
import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.commons.dbcp2.PoolableConnection;
import org.apache.commons.dbcp2.PoolingDataSource;
import org.apache.commons.pool2.impl.GenericObjectPool;
import org.apache.commons.pool2.proxy.JdkProxySource;
import org.apache.commons.pool2.proxy.ProxiedObjectPool;

class ExtendedBasicDataSource extends BasicDataSource {

  @Override
  protected DataSource createDataSourceInstance() throws SQLException {
    if (!getAbandonedUsageTracking()) {
      return super.createDataSourceInstance();
    }

    // Workaround for https://issues.apache.org/jira/browse/DBCP-590
    GenericObjectPool<PoolableConnection> connectionPool = getConnectionPool();

    JdkProxySource<PoolableConnection> jdkProxySource =
        new JdkProxySource<>(getClass().getClassLoader(), new Class[] 
{Connection.class});

    ProxiedObjectPool<PoolableConnection> proxiedConnectionPool =
        new ProxiedObjectPool<>(connectionPool, jdkProxySource);

    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