Thread: NullPointerException while closing connection with connectionpool
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
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>
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 >