Обсуждение: NullPointerException while closing connection with connectionpool

Поиск
Список
Период
Сортировка

NullPointerException while closing connection with connectionpool

От
Jani Virta
Дата:
I have multiple threads writing log to db and once a while I get this
error  message, with a result of one connection freezing to "idle in
transaction" state.

java.lang.NullPointerException
        at
org.postgresql.jdbc2.optional.PooledConnectionImpl$ConnectionHandler.invoke(PooledConnectionImpl.java:230)
        at $Proxy0.close(Unknown Source)
        at config.logadd(config.java:154)

driver is latest (7.3 jdbc3 build 109)
jvm is sun j2re 1.4.1_02  with redhat 9
code I'm using for writing logs. Line 154 is conn.close();

static public void logadd(String s) {
        try {
            Connection conn = datasource.getConnection();
            String insert="INSERT INTO log (time, entry) VALUES ((SELECT
CURRENT_TIMESTAMP), '"+s+"')";
            Statement logstmt = conn.createStatement();
            logstmt.executeUpdate(insert);
            logstmt.close();
            conn.close();
        } catch (SQLException e) {
            System.out.println("Tried to write : "+s+"\nlog write
failed. exception "+e);
        }
}

Any thoughts? Looks like a threading problem since this happens until I
have max number of connections open and all but one connection in "idle
in transaction" state.

-jani


Re: NullPointerException while closing connection with

От
Dave Cramer
Дата:
Well, In general I would recommend the following, which may or may not
solve your problem.


try
{
    do sql stuff
}catch ( SQLException )
{
}
finally
{
close connection
}

Because if you throw an exception in your create, or execute the
connection will not be returned to the pool. BTW this applies to
non-pooled connections too!

Dave

On Thu, 2003-05-08 at 04:05, Jani Virta wrote:
> I have multiple threads writing log to db and once a while I get this
> error  message, with a result of one connection freezing to "idle in
> transaction" state.
>
> java.lang.NullPointerException
>         at
> org.postgresql.jdbc2.optional.PooledConnectionImpl$ConnectionHandler.invoke(PooledConnectionImpl.java:230)
>         at $Proxy0.close(Unknown Source)
>         at config.logadd(config.java:154)
>
> driver is latest (7.3 jdbc3 build 109)
> jvm is sun j2re 1.4.1_02  with redhat 9
> code I'm using for writing logs. Line 154 is conn.close();
>
> static public void logadd(String s) {
>         try {
>             Connection conn = datasource.getConnection();
>             String insert="INSERT INTO log (time, entry) VALUES ((SELECT
> CURRENT_TIMESTAMP), '"+s+"')";
>             Statement logstmt = conn.createStatement();
>             logstmt.executeUpdate(insert);
>             logstmt.close();
>             conn.close();
>         } catch (SQLException e) {
>             System.out.println("Tried to write : "+s+"\nlog write
> failed. exception "+e);
>         }
> }
>
> Any thoughts? Looks like a threading problem since this happens until I
> have max number of connections open and all but one connection in "idle
> in transaction" state.
>
> -jani
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 6: Have you searched our list archives?
>
> http://archives.postgresql.org
--
Dave Cramer <Dave@micro-automation.net>


Re: NullPointerException while closing connection with

От
Aaron Mulder
Дата:
Jani,
    Can you put together a small test program that demonstrates the
problem?  Like, configures a pool and then launches 20 threads that all
try to execute the code below, and if you run it for a little bit you get
the problem?  It's hard to debug thread problems without a good example.

Thanks,
    Aaron

On Thu, 8 May 2003, Jani Virta wrote:
> I have multiple threads writing log to db and once a while I get this
> error  message, with a result of one connection freezing to "idle in
> transaction" state.
>
> java.lang.NullPointerException
>         at
> org.postgresql.jdbc2.optional.PooledConnectionImpl$ConnectionHandler.invoke(PooledConnectionImpl.java:230)
>         at $Proxy0.close(Unknown Source)
>         at config.logadd(config.java:154)
>
> driver is latest (7.3 jdbc3 build 109)
> jvm is sun j2re 1.4.1_02  with redhat 9
> code I'm using for writing logs. Line 154 is conn.close();
>
> static public void logadd(String s) {
>         try {
>             Connection conn = datasource.getConnection();
>             String insert="INSERT INTO log (time, entry) VALUES ((SELECT
> CURRENT_TIMESTAMP), '"+s+"')";
>             Statement logstmt = conn.createStatement();
>             logstmt.executeUpdate(insert);
>             logstmt.close();
>             conn.close();
>         } catch (SQLException e) {
>             System.out.println("Tried to write : "+s+"\nlog write
> failed. exception "+e);
>         }
> }
>
> Any thoughts? Looks like a threading problem since this happens until I
> have max number of connections open and all but one connection in "idle
> in transaction" state.
>
> -jani
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 6: Have you searched our list archives?
>
> http://archives.postgresql.org
>