"Something unusual has occured" error using PostgreSQL 8.2 with Apache Commons DBCP 1.2.2

Поиск
Список
Период
Сортировка
От Matthew Storer
Тема "Something unusual has occured" error using PostgreSQL 8.2 with Apache Commons DBCP 1.2.2
Дата
Msg-id 1193159536.9909.1217408695@webmail.messagingengine.com
обсуждение исходный текст
Ответы Re: "Something unusual has occured" error using PostgreSQL 8.2 with Apache Commons DBCP 1.2.2  ("Heikki Linnakangas" <heikki@enterprisedb.com>)
Re: "Something unusual has occured" error using PostgreSQL 8.2 with Apache Commons DBCP 1.2.2  ("Albe Laurenz" <laurenz.albe@wien.gv.at>)
Re: "Something unusual has occured" error using PostgreSQL 8.2 with Apache Commons DBCP 1.2.2  (Iván Velamazán González <ivan.velamazan@gtbi.net>)
Список pgsql-jdbc
Hi -

I'm getting a rather disturbing exception that I really hope someone can
help me out with.

To start, I'm putting together a Java client-server app, where the
server side talks to a PostgreSQL database via an Apache Commons DBCP
link for connection pooling.  Using the code I've included below, I'm
able to establish a connection, get database metadata, and execute
stored functions perfectly well PROVIDING I DON'T try to call
getConnection() again without closing the first connection beforehand.
(but it seems to me that doing that ought to work alright, because if I
call getConnection() a second time, shouldn't the DBCP code just pull a
new connection from the pool, and not, instead, throw this exception?)

To recap.  This works:

Connection conn = ConnectionPool.getConnection();    // this
ConnectionPool class is one I wrote, see below for details
// do stuff with this connection
ConnectionPool.close(conn);                          // simply closes
the connection, catching any exceptions
conn = ConnectionPool.getConnection();               // get another
connection.  this works just fine now that
                                                     // the the
                                                     connection has been
                                                     closed before this
                                                     call

But if I try this, all hell breaks loose on the second call to
getConnection():

Connection conn = ConnectionPool.getConnection();
// do stuff with this connection
Connection conn2 = ConnectionPool.getConnection();   // the exception
below would be thrown inside here


EXCEPTION:
----------
org.postgresql.util.PSQLException: Something unusual has occured to
cause the driver to fail. Please report this exception.
        at org.postgresql.Driver.connect(Driver.java:276)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at
        org.apache.commons.dbcp.DriverManagerConnectionFactory.createConnection(DriverManagerConnectionFactory.java:68)
        at
        org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:294)
        at
        org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:840)
        at
        org.apache.commons.dbcp.PoolingDriver.connect(PoolingDriver.java:176)

        at java.sql.DriverManager.getConnection(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at
        myproject.db.ConnectionPool.getConnection(ConnectionPool.java:136)


RELATED CODE:
-------------

This is the code I use to create the connection pool and register the
driver (in my ConnectionPool constructor) - note that this works insofar
as I can connect to the database and get metadata and do queries and
stuff, so I don't think this code is screwy, but who knows?):

    // some unrelated stuff up here
    ...
    GenericObjectPool pool = new GenericObjectPool(null);
    pool.setMinIdle(5);
    pool.setMaxIdle(10);
    pool.setMaxActive(30);
    pool.setWhenExhaustedAction(GenericObjectPool.WHEN_EXHAUSTED_BLOCK);
    pool.setMaxWait(1000 * 60 * 5);
    pool.setSoftMinEvictableIdleTimeMillis(1000 * 60 * 30);
    pool.setTimeBetweenEvictionRunsMillis(1000 * 60 * 10);

    Properties props = new Properties();
    props.setProperty("user", "testuser");
    props.setProperty("password", "testpass");

    ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(
        "jdbc:postgresql://localhost:5432/testdb", props);

    PoolableConnectionFactory poolableConnectionFactory =
        new PoolableConnectionFactory(connectionFactory,
        pool, null, null, false, false);

    PoolingDriver driver = new PoolingDriver();
    driver.registerPool("mydb", pool);
    ...

------------------------------------------------------------------------

Now, when I want to retrieve a connection, I call
ConnectionPool.getConnection(), which is where the problem occurs.  Note
that line 136 (from the stack trace above) is the "Connection conn =
DriverManager..." line in the code below:

    public static Connection getConnection() throws SQLException {
        try {
            Connection conn = DriverManager.getConnection(
                "jdbc:apache:commons:dbcp:mydb");
            return conn;
        } catch (SQLException sqle) {
            System.out.println(sqle.getMessage());
            sqle.printStackTrace();
            throw sqle;
        }
    }

------------------------------------

Lastly, here are the versions of the relevant software I'm using:
- PostgreSQL 8.2.4
- PostgreSQL JDBC driver 8.2-506.jdbc4
- Java 2 SE 1.6.0_02
- Jakarta Commons Pool 1.3
- Jakarta Commons DBCP 1.2.2
- Microsoft Windows XP SP2


On a possibly related note, I read in the Apache Commons DBCP README
that says:
"This release of JDBC compiles with and supports JDK 1.3 (JDBC 2.0) and
JDK 1.4-1.5 (JDBC 3.0). JDK 1.6 (JDBC 4.0) is not supported by this
release."  I'd like to try using PostgreSQL's JDBC3 drivers, but the
site says that if I'm using Java 1.6 I shouldn't use that, but should
use their JDBC4 drivers instead.  Any thoughts?

Thanks a lot for any help you can provide!

Regards,

Matt Storer

В списке pgsql-jdbc по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: Chinese database name in URL, can I ?
Следующее
От: "Heikki Linnakangas"
Дата:
Сообщение: Re: "Something unusual has occured" error using PostgreSQL 8.2 with Apache Commons DBCP 1.2.2