Romain Manni-Bucau created DBCP-464: ---------------------------------------
Summary: managed shared connections can lead to a NPE on close Key: DBCP-464 URL: https://issues.apache.org/jira/browse/DBCP-464 Project: Commons Dbcp Issue Type: Bug Reporter: Romain Manni-Bucau in CompletionListener the delegate will be set to false but the connection will not be closed so when calling close later and if the connection exited a transaction context then it will try to close it and lead to a NPE Here my workaround: {code} @Override protected DataSource createDataSourceInstance() throws SQLException { final TransactionRegistry transactionRegistry = getTransactionRegistry(); if (transactionRegistry == null) { throw new IllegalStateException("TransactionRegistry has not been set"); } if (getConnectionPool() == null) { throw new IllegalStateException("Pool has not been set"); } final PoolingDataSource<PoolableConnection> pds = new ManagedDataSource<PoolableConnection>(getConnectionPool(), transactionRegistry) { @Override public Connection getConnection() throws SQLException { return new ManagedConnection<PoolableConnection>(getPool(), transactionRegistry, isAccessToUnderlyingConnectionAllowed()) { @Override public void close() throws SQLException { // here is the additional check to do if (getDelegateInternal() == null) { return; } super.close(); } }; } }; pds.setAccessToUnderlyingConnectionAllowed(isAccessToUnderlyingConnectionAllowed()); return pds; } {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)