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

Phil Steitz commented on DBCP-412:
----------------------------------

The difference in behavior is likely due to the changes in DBCP-358.  The 
hashcodes you are examining are those of the DelegatingConnection instances 
returned by PoolingDataSource.  As of 2.0, DelegatingConnection instances 
wrapping the same underlying physical connection are not equal.  If you have a 
way to see the physical connections in the database, you should be able to 
verify that there is just one being used by the code (else there is a bug here).

> dbcp2.PoolableConnection.close raises NullPointerException
> ----------------------------------------------------------
>
>                 Key: DBCP-412
>                 URL: https://issues.apache.org/jira/browse/DBCP-412
>             Project: Commons Dbcp
>          Issue Type: Bug
>    Affects Versions: 2.0
>         Environment: Mac OSX, Java 7, SQLAzure
>            Reporter: Davide Caroselli
>            Priority: Critical
>              Labels: NullPointerException, PoolableConnection
>
> I found a critical error while closing a PoolableConnection.
> Here's the code to reproduce the bug (largely copied from the example shown 
> in the Apache DBCP site):
> {code:title=PoolingDataSourceExample2.java|borderStyle=solid}
> public static void main(String[] args) throws Throwable {
>     Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
>     DataSource dataSource = setupDataSource(jdbcUrl);
>     Connection connection = null;
>     PreparedStatement statement = null;
>     ResultSet result = null;
>     try {
>         connection = dataSource.getConnection();
>         statement = connection.prepareStatement("SELECT 1");
>         result = statement.executeQuery();
>     } finally {
>         result.close();
>         statement.close();
>         connection.close();
>     }
> }
> public static DataSource setupDataSource(String connectURI) {
>     ConnectionFactory connectionFactory = new 
> DriverManagerConnectionFactory(connectURI, null);
>     PoolableConnectionFactory poolableConnectionFactory = new 
> PoolableConnectionFactory(connectionFactory, null);
>     ObjectPool<PoolableConnection> connectionPool = new 
> GenericObjectPool<>(poolableConnectionFactory);
>     PoolingDataSource<PoolableConnection> dataSource = new 
> PoolingDataSource<>(connectionPool);
>     return dataSource;
> }
> {code}
> When the code tries to close the connection (in the final block), an 
> exception is raised:
> {code:title=PoolingDataSourceExample2.java|borderStyle=solid}
> Exception in thread "main" java.lang.NullPointerException
>       at 
> org.apache.commons.dbcp2.PoolableConnection.close(PoolableConnection.java:151)
>       at 
> org.apache.commons.dbcp2.DelegatingConnection.closeInternal(DelegatingConnection.java:235)
>       at 
> org.apache.commons.dbcp2.DelegatingConnection.close(DelegatingConnection.java:218)
>       at 
> org.apache.commons.dbcp2.PoolingDataSource$PoolGuardConnectionWrapper.close(PoolingDataSource.java:212)
>       at 
> dbcp.PoolingDataSourceExample2.closeQuietly(PoolingDataSourceExample2.java:64)
>       at 
> dbcp.PoolingDataSourceExample2.main(PoolingDataSourceExample2.java:43){code}
> As I can see, the problem is the "_pool" variable inside PoolableConnection 
> but I could not find any solution.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to