[
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)