You'd better just close the "poolconnection" rather than the "connection". In the end of the programme,try to close the datasource..
On Fri, Jul 20, 2012 at 1:37 AM, rcoe <[email protected]> wrote: > I'm getting a whack of stack traces all at once that indicate my > connections are not getting closed; > > org.h2.message.DbException: The connection was not closed by the > application and is garbage collected [90018-167] > at org.h2.message.DbException.get(DbException.java:169) > at org.h2.message.DbException.get(DbException.java:146) > at org.h2.message.DbException.get(DbException.java:135) > at org.h2.jdbc.JdbcConnection.closeOld(JdbcConnection.java:174) > at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:121) > at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:94) > at org.h2.Driver.connect(Driver.java:72) > at org.h2.jdbcx.JdbcDataSource.getJdbcConnection(JdbcDataSource.java:181) > at org.h2.jdbcx.JdbcDataSource.getXAConnection(JdbcDataSource.java:315) > at org.h2.jdbcx.JdbcDataSource.getPooledConnection(JdbcDataSource.java:341) > > However, I am closing my connections in finally blocks wherever I am using > them: > > } finally { > DbUtils.closeQuietly( conn, pstmt, rs ); > } > > My conn object is retrieved from a datasource and I'm using a pooled > connection: > > conn = ( (JdbcDataSource)ds ).getPooledConnection().getConnection(); > > The code I'm running is scanning through a file and inserting records as > it goes. As each record is inserted, the connection should be getting > closed. I have verified the calls are made: > > 07-19 12:55:47 jdbc[55]: > /**/conn108.prepareStatement("INSERT INTO TABLE_X ( path, filename, > lastTouched, createdTime ) VALUES( ?, ?, ?, ? )", 1); > 07-19 12:55:47 jdbc[55]: > /**/PreparedStatement prep54 = conn108.prepareStatement("INSERT > INTO TABLE_X ( path, filename, lastTouched, createdTime ) VALUES( ?, ?, ?, > ? )"); > 07-19 12:55:47 jdbc[55]: > /**/prep54.setString(1, "/xxx"); > 07-19 12:55:47 jdbc[55]: > /**/prep54.setString(2, "xxxx.pdf"); > 07-19 12:55:47 jdbc[55]: > /**/prep54.setTimestamp(3, Timestamp.valueOf("2005-09-16 00:00:00.0")); > 07-19 12:55:47 jdbc[55]: > /**/prep54.setTimestamp(4, Timestamp.valueOf("2012-07-19 12:55:47.848")); > 07-19 12:55:47 jdbc[55]: > /**/prep54.executeUpdate(); > 07-19 12:55:47 lock: 55 exclusive write lock requesting for TABLE_X > 07-19 12:55:47 lock: 55 exclusive write lock added for TABLE_X > 07-19 12:55:47 index: TABLE_X add ( /* key:27 */ 27, '/xxx', 'xxxx.pdf', > TIMESTAMP '2005-09-16 00:00:00.0', TIMESTAMP '2012-07-19 12:55:47.848', > NULL) > 07-19 12:55:47 pageStore: log + s: 55 table: 15 row: ( /* key:27 */ 27, > '/xxx', 'xxxx.pdf', TIMESTAMP '2005-09-16 00:00:00.0', TIMESTAMP > '2012-07-19 12:55:47.848', NULL) > 07-19 12:55:47 index: IDX_PATH add ( /* key:27 */ 27, '/xxx', 'xxxx.pdf', > TIMESTAMP '2005-09-16 00:00:00.0', TIMESTAMP '2012-07-19 12:55:47.848', > NULL) > 07-19 12:55:47 index: IDX_FILENAME add ( /* key:27 */ 27, '/xxx', > 'xxxx.pdf', TIMESTAMP '2005-09-16 00:00:00.0', TIMESTAMP '2012-07-19 > 12:55:47.848', NULL) > 07-19 12:55:47 jdbc[55]: > /*SQL l:101 #:1 t:1*/INSERT INTO TABLE_X ( path, filename, lastTouched, > createdTime ) VALUES( ?, ?, ?, ? ) {1: '/xxx', 2: 'xxxx.pdf', 3: TIMESTAMP > '2005-09-16 00:00:00.0', 4: TIMESTAMP '2012-07-19 12:55:47.848'}; > 07-19 12:55:47 pageStore: log commit s: 55 > 07-19 12:55:47 lock: 55 exclusive write lock unlock TABLE_X > 07-19 12:55:47 jdbc[55]: > /**/ResultSet rs30 = prep54.getGeneratedKeys(); > 07-19 12:55:47 jdbc[55]: > /*SQL #:1*/SELECT SCOPE_IDENTITY() WHERE SCOPE_IDENTITY() IS NOT NULL; > 07-19 12:55:47 jdbc[55]: > /**/rs30.next(); > 07-19 12:55:47 jdbc[55]: > /**/rs30.getLong(1); > 07-19 12:55:48 pageStore: pageOut.storePage [12] stream data key:2 pos:175 > remaining:1873 > 07-19 13:31:49 jdbc[55]: > /**/rs30.close(); > 07-19 13:31:49 jdbc[55]: > /**/prep54.close(); > 07-19 13:31:49 jdbc[55]: > /**/conn108.rollback(); > 07-19 13:31:49 jdbc[55]: > /*SQL */ROLLBACK; > 07-19 13:31:49 jdbc[55]: > /**/conn108.setAutoCommit(true); > > So, it seems the connections are calling close(), yet they are not getting > closed. Anyone seen this when running in embedded mode with a connection > pool? > > Thanks. > > -- > You received this message because you are subscribed to the Google Groups > "H2 Database" group. > To view this discussion on the web visit > https://groups.google.com/d/msg/h2-database/-/hJ9e7d153jMJ. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/h2-database?hl=en. > -- You received this message because you are subscribed to the Google Groups "H2 Database" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/h2-database?hl=en.
