commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Davide Caroselli (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (DBCP-412) dbcp2.PoolableConnection.close raises NullPointerException
Date Fri, 04 Apr 2014 07:33:14 GMT

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

Davide Caroselli commented on DBCP-412:
---------------------------------------

Ok, I've modified the code but I found another issue (maybe). This is the example:

{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;

    // = EDITED ==============
    for (int i = 0; i < 100; i++)
        try {
            connection = dataSource.getConnection();
            System.out.println(connection.hashCode());
            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);

    // = EDITED ==============
    connectionPool.setMaxTotal(1);
    poolableConnectionFactory.setPool(connectionPool);

    PoolingDataSource<PoolableConnection> dataSource = new PoolingDataSource<>(connectionPool);
    return dataSource;
}
{code}

Now the code does not throw exceptions anymore, but it returns always a new connection.
I request 100 times, but every time the connection hashcode is different; I've made a similar
example but with DBCP v1.4 over Common Pool 1.6 and with these jars the hashcode is always
the same.

Is this normal or it really create new connection anytime?

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

Mime
View raw message