Thread: Connection pool problem
Hello, I've create a connection pool with dbcp end another with Jdbc3PoolingDatasource, it seems to work well but : My pool is a eight connections pool, the problem is when i get some database exception (for example "constraint violation", "duplicate key on unique index"...) the connection didn't released to the pool. After eight exception my application wait for a connection from the pool which nerver give one because of the PSQLException thrown. Does somebody know about this?? Hope it's understandable Thanks -- No virus found in this outgoing message. Checked by AVG Anti-Virus. Version: 7.0.300 / Virus Database: 266.5.2 - Release Date: 28/02/2005
Stéphane RIFF wrote: > I've create a connection pool with dbcp end another with > Jdbc3PoolingDatasource, > it seems to work well but : > My pool is a eight connections pool, the problem is when i get some > database exception (for example > "constraint violation", "duplicate key on unique index"...) the > connection didn't released to the pool. > After eight exception my application wait for a connection from the pool > which nerver give one because > of the PSQLException thrown. Perhaps your code does not release the connection to the pool correctly when handling the exception? The usual way to deal with this is to put connection releasing in a finally block, so it's sure to be run however you exit the try{} block. If it's not that, I'd need to see your code to debug this further. -O
You're right i forgot to call close() function in the catch block Thanks But know i sometimes get null connections from the datasource with exception like this : 2005-03-01 12:23:44,156 : [WARN] ConnectionPool - org.postgresql.util.PSQLException: The connection attempt failed because Exception: java.net.BindException: Address already in use: connect Stack Trace: java.net.BindException: Address already in use: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:171) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:158) at java.net.Socket.connect(Socket.java:452) at java.net.Socket.connect(Socket.java:402) at java.net.Socket.<init>(Socket.java:309) at java.net.Socket.<init>(Socket.java:124) at org.postgresql.core.PGStream.<init>(PGStream.java:47) at org.postgresql.jdbc1.AbstractJdbc1Connection.openConnection(AbstractJdbc1Connection.java:197) at org.postgresql.Driver.connect(Driver.java:139) at java.sql.DriverManager.getConnection(DriverManager.java:512) at java.sql.DriverManager.getConnection(DriverManager.java:171) at org.apache.commons.dbcp.DriverManagerConnectionFactory.createConnection(DriverManagerConnectionFactory.java:48) at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:290) at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:771) at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:95) at fr.cerene.geosiara.gprs.receiver.ConnectionPool.getConnection(ConnectionPool.java:97) at fr.cerene.geosiara.gprs.receiver.SQLoader.saveTrame(SQLoader.java:122) at fr.cerene.geosiara.gprs.receiver.SQLoader$1.run(SQLoader.java:219) at java.lang.Thread.run(Thread.java:534) End of Stack Trace 2005-03-01 12:23:44,156 : [WARN] SQLoader - java.lang.NullPointerException I saw on the web that this can happened when the max number of connection is reach but in my case postgresql is configure with 100 connections, in the process list i had ~50 connections. Don't know what i can do... Oliver Jowett wrote: > Stéphane RIFF wrote: > >> I've create a connection pool with dbcp end another with >> Jdbc3PoolingDatasource, >> it seems to work well but : >> My pool is a eight connections pool, the problem is when i get some >> database exception (for example >> "constraint violation", "duplicate key on unique index"...) the >> connection didn't released to the pool. >> After eight exception my application wait for a connection from the >> pool which nerver give one because >> of the PSQLException thrown. > > > Perhaps your code does not release the connection to the pool > correctly when handling the exception? > > The usual way to deal with this is to put connection releasing in a > finally block, so it's sure to be run however you exit the try{} block. > > If it's not that, I'd need to see your code to debug this further. > > -O > > -- No virus found in this outgoing message. Checked by AVG Anti-Virus. Version: 7.0.300 / Virus Database: 266.5.2 - Release Date: 28/02/2005
Stephane, You didn't read his email carefully enough. Close your connections in a FINALLY block. That way they are guaranteed to be closed as far as your exception below, that is very strange. If you are out of connections on the server then you should get that error not a bind exception ??? Dave Stéphane RIFF wrote: > You're right i forgot to call close() function in the catch block > Thanks > > But know i sometimes get null connections from the datasource with > exception like this : > 2005-03-01 12:23:44,156 : [WARN] ConnectionPool - > org.postgresql.util.PSQLException: The connection attempt failed > because Exception: java.net.BindException: Address already in use: > connect > Stack Trace: > > java.net.BindException: Address already in use: connect > at java.net.PlainSocketImpl.socketConnect(Native Method) > at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305) > at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:171) > at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:158) > at java.net.Socket.connect(Socket.java:452) > at java.net.Socket.connect(Socket.java:402) > at java.net.Socket.<init>(Socket.java:309) > at java.net.Socket.<init>(Socket.java:124) > at org.postgresql.core.PGStream.<init>(PGStream.java:47) > at > org.postgresql.jdbc1.AbstractJdbc1Connection.openConnection(AbstractJdbc1Connection.java:197) > > at org.postgresql.Driver.connect(Driver.java:139) > at java.sql.DriverManager.getConnection(DriverManager.java:512) > at java.sql.DriverManager.getConnection(DriverManager.java:171) > at > org.apache.commons.dbcp.DriverManagerConnectionFactory.createConnection(DriverManagerConnectionFactory.java:48) > > at > org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:290) > > at > org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:771) > > at > org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:95) > > at > fr.cerene.geosiara.gprs.receiver.ConnectionPool.getConnection(ConnectionPool.java:97) > > at > fr.cerene.geosiara.gprs.receiver.SQLoader.saveTrame(SQLoader.java:122) > at fr.cerene.geosiara.gprs.receiver.SQLoader$1.run(SQLoader.java:219) > at java.lang.Thread.run(Thread.java:534) > End of Stack Trace > > 2005-03-01 12:23:44,156 : [WARN] SQLoader - > java.lang.NullPointerException > > I saw on the web that this can happened when the max number of connection > is reach but in my case postgresql is configure with 100 connections, in > the process list i had ~50 connections. > > Don't know what i can do... > > Oliver Jowett wrote: > >> Stéphane RIFF wrote: >> >>> I've create a connection pool with dbcp end another with >>> Jdbc3PoolingDatasource, >>> it seems to work well but : >>> My pool is a eight connections pool, the problem is when i get some >>> database exception (for example >>> "constraint violation", "duplicate key on unique index"...) the >>> connection didn't released to the pool. >>> After eight exception my application wait for a connection from the >>> pool which nerver give one because >>> of the PSQLException thrown. >> >> >> >> Perhaps your code does not release the connection to the pool >> correctly when handling the exception? >> >> The usual way to deal with this is to put connection releasing in a >> finally block, so it's sure to be run however you exit the try{} block. >> >> If it's not that, I'd need to see your code to debug this further. >> >> -O >> >> > > > -- Dave Cramer http://www.postgresintl.com 519 939 0336 ICQ#14675561
Yes sorry that's what i want to say "finally" blocks and that's what i did. For the exception i don"t have any more idea yet Dave Cramer wrote: > Stephane, > > You didn't read his email carefully enough. Close your connections in > a FINALLY block. That way they are guaranteed to be closed > > as far as your exception below, that is very strange. If you are out > of connections on the server then you should get that error > not a bind exception ??? > > Dave > > > Stéphane RIFF wrote: > >> You're right i forgot to call close() function in the catch block >> Thanks >> >> But know i sometimes get null connections from the datasource with >> exception like this : >> 2005-03-01 12:23:44,156 : [WARN] ConnectionPool - >> org.postgresql.util.PSQLException: The connection attempt failed >> because Exception: java.net.BindException: Address already in use: >> connect >> Stack Trace: >> >> java.net.BindException: Address already in use: connect >> at java.net.PlainSocketImpl.socketConnect(Native Method) >> at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305) >> at >> java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:171) >> at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:158) >> at java.net.Socket.connect(Socket.java:452) >> at java.net.Socket.connect(Socket.java:402) >> at java.net.Socket.<init>(Socket.java:309) >> at java.net.Socket.<init>(Socket.java:124) >> at org.postgresql.core.PGStream.<init>(PGStream.java:47) >> at >> org.postgresql.jdbc1.AbstractJdbc1Connection.openConnection(AbstractJdbc1Connection.java:197) >> >> at org.postgresql.Driver.connect(Driver.java:139) >> at java.sql.DriverManager.getConnection(DriverManager.java:512) >> at java.sql.DriverManager.getConnection(DriverManager.java:171) >> at >> org.apache.commons.dbcp.DriverManagerConnectionFactory.createConnection(DriverManagerConnectionFactory.java:48) >> >> at >> org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:290) >> >> at >> org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:771) >> >> at >> org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:95) >> >> at >> fr.cerene.geosiara.gprs.receiver.ConnectionPool.getConnection(ConnectionPool.java:97) >> >> at >> fr.cerene.geosiara.gprs.receiver.SQLoader.saveTrame(SQLoader.java:122) >> at fr.cerene.geosiara.gprs.receiver.SQLoader$1.run(SQLoader.java:219) >> at java.lang.Thread.run(Thread.java:534) >> End of Stack Trace >> >> 2005-03-01 12:23:44,156 : [WARN] SQLoader - >> java.lang.NullPointerException >> >> I saw on the web that this can happened when the max number of >> connection >> is reach but in my case postgresql is configure with 100 connections, in >> the process list i had ~50 connections. >> >> Don't know what i can do... >> >> Oliver Jowett wrote: >> >>> Stéphane RIFF wrote: >>> >>>> I've create a connection pool with dbcp end another with >>>> Jdbc3PoolingDatasource, >>>> it seems to work well but : >>>> My pool is a eight connections pool, the problem is when i get some >>>> database exception (for example >>>> "constraint violation", "duplicate key on unique index"...) the >>>> connection didn't released to the pool. >>>> After eight exception my application wait for a connection from the >>>> pool which nerver give one because >>>> of the PSQLException thrown. >>> >>> >>> >>> >>> Perhaps your code does not release the connection to the pool >>> correctly when handling the exception? >>> >>> The usual way to deal with this is to put connection releasing in a >>> finally block, so it's sure to be run however you exit the try{} block. >>> >>> If it's not that, I'd need to see your code to debug this further. >>> >>> -O >>> >>> >> >> >> > -- No virus found in this outgoing message. Checked by AVG Anti-Virus. Version: 7.0.300 / Virus Database: 266.5.2 - Release Date: 28/02/2005
Stéphane RIFF wrote: > 2005-03-01 12:23:44,156 : [WARN] SQLoader - java.lang.NullPointerException Can you get a stack trace for this exception? (the NPE, not the earlier one) -O
Oliver Jowett <oliver 'at' opencloud.com> writes: > Stéphane RIFF wrote: > > > 2005-03-01 12:23:44,156 : [WARN] SQLoader - java.lang.NullPointerException > > Can you get a stack trace for this exception? (the NPE, not the earlier one) Stephan - in case, here's a method to get a human readable stacktrace given an Exception object, if you don't use java 1.5: public static String backtrace( Exception e ) { StackTraceElement[] trace = e.getStackTrace(); StringBuffer sb = new StringBuffer(); for ( int i = 2; i < trace.length; i++ ) { sb.append( "\t" ).append( trace[i].toString() ).append( "\n" ); } return sb.toString(); } -- Guillaume Cottenceau
Here is the NullPointerExceptionStack trace java.lang.NullPointerException at fr.cerene.geosiara.gprs.receiver.SQLoader.saveTrame(SQLoader.java:139) at fr.cerene.geosiara.gprs.receiver.SQLoader$1.run(SQLoader.java:229) at java.lang.Thread.run(Thread.java:534) fr.cerene.geosiara.gprs.receiver.SQLoader.saveTrame(SQLoader.java:139) fr.cerene.geosiara.gprs.receiver.SQLoader$1.run(SQLoader.java:229) java.lang.Thread.run(Thread.java:534) but it didn't give more information on the last exception ........ Thanks Guillaume Cottenceau wrote: >Oliver Jowett <oliver 'at' opencloud.com> writes: > > > >>Stéphane RIFF wrote: >> >> >> >>>2005-03-01 12:23:44,156 : [WARN] SQLoader - java.lang.NullPointerException >>> >>> >>Can you get a stack trace for this exception? (the NPE, not the earlier one) >> >> > >Stephan - in case, here's a method to get a human readable >stacktrace given an Exception object, if you don't use java 1.5: > > public static String backtrace( Exception e ) { > StackTraceElement[] trace = e.getStackTrace(); > StringBuffer sb = new StringBuffer(); > for ( int i = 2; i < trace.length; i++ ) { > sb.append( "\t" ).append( trace[i].toString() ).append( "\n" ); > } > return sb.toString(); > } > > > -- No virus found in this outgoing message. Checked by AVG Anti-Virus. Version: 7.0.300 / Virus Database: 266.5.7 - Release Date: 01/03/2005
Here is another Stack trace, i got when doing DriverManager.setLogWriter() : DriverManager.getConnection("jdbc:postgresql://200.200.200.34:5432/geosiaradev") trying driver[className=org.postgresql.Driver,org.postgresql.Driver@11ddcde] org.postgresql.util.PSQLException at org.postgresql.jdbc1.AbstractJdbc1Connection.openConnection(AbstractJdbc1Connection.java:208) at org.postgresql.Driver.connect(Driver.java:139) at java.sql.DriverManager.getConnection(DriverManager.java:512) at java.sql.DriverManager.getConnection(DriverManager.java:171) at org.apache.commons.dbcp.DriverManagerConnectionFactory.createConnection(DriverManagerConnectionFactory.java:48) at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:290) at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:771) at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:95) at fr.cerene.geosiara.gprs.receiver.ConnectionPool.getConnection(ConnectionPool.java:101) at fr.cerene.geosiara.gprs.receiver.SQLoader.saveTrame2(SQLoader.java:210) at fr.cerene.geosiara.gprs.receiver.SQLoader$1.run(SQLoader.java:317) at java.lang.Thread.run(Thread.java:534) getConnection failed: org.postgresql.util.PSQLException: The connection attempt failed because Exception: java.net.BindException: Address already in use: connect Stack Trace: java.net.BindException: Address already in use: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:171) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:158) at java.net.Socket.connect(Socket.java:452) at java.net.Socket.connect(Socket.java:402) at java.net.Socket.<init>(Socket.java:309) at java.net.Socket.<init>(Socket.java:124) at org.postgresql.core.PGStream.<init>(PGStream.java:47) at org.postgresql.jdbc1.AbstractJdbc1Connection.openConnection(AbstractJdbc1Connection.java:197) at org.postgresql.Driver.connect(Driver.java:139) at java.sql.DriverManager.getConnection(DriverManager.java:512) at java.sql.DriverManager.getConnection(DriverManager.java:171) at org.apache.commons.dbcp.DriverManagerConnectionFactory.createConnection(DriverManagerConnectionFactory.java:48) at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:290) at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:771) at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:95) at fr.cerene.geosiara.gprs.receiver.ConnectionPool.getConnection(ConnectionPool.java:101) at fr.cerene.geosiara.gprs.receiver.SQLoader.saveTrame2(SQLoader.java:210) at fr.cerene.geosiara.gprs.receiver.SQLoader$1.run(SQLoader.java:317) at java.lang.Thread.run(Thread.java:534) End of Stack Trace java.lang.NullPointerException at fr.cerene.geosiara.gprs.receiver.SQLoader.saveTrame2(SQLoader.java:227) at fr.cerene.geosiara.gprs.receiver.SQLoader$1.run(SQLoader.java:317) at java.lang.Thread.run(Thread.java:534) Stéphane RIFF wrote: > Here is the NullPointerExceptionStack trace > java.lang.NullPointerException > at > fr.cerene.geosiara.gprs.receiver.SQLoader.saveTrame(SQLoader.java:139) > at > fr.cerene.geosiara.gprs.receiver.SQLoader$1.run(SQLoader.java:229) > at java.lang.Thread.run(Thread.java:534) > > fr.cerene.geosiara.gprs.receiver.SQLoader.saveTrame(SQLoader.java:139) > fr.cerene.geosiara.gprs.receiver.SQLoader$1.run(SQLoader.java:229) > java.lang.Thread.run(Thread.java:534) > > but it didn't give more information on the last exception > ........ > Thanks > > Guillaume Cottenceau wrote: > >> Oliver Jowett <oliver 'at' opencloud.com> writes: >> >> >> >>> Stéphane RIFF wrote: >>> >>> >>> >>>> 2005-03-01 12:23:44,156 : [WARN] SQLoader - >>>> java.lang.NullPointerException >>>> >>> >>> Can you get a stack trace for this exception? (the NPE, not the >>> earlier one) >>> >> >> >> Stephan - in case, here's a method to get a human readable >> stacktrace given an Exception object, if you don't use java 1.5: >> >> public static String backtrace( Exception e ) { >> StackTraceElement[] trace = e.getStackTrace(); >> StringBuffer sb = new StringBuffer(); >> for ( int i = 2; i < trace.length; i++ ) { >> sb.append( "\t" ).append( trace[i].toString() ).append( >> "\n" ); >> } >> return sb.toString(); >> } >> >> >> > > > -- No virus found in this outgoing message. Checked by AVG Anti-Virus. Version: 7.0.300 / Virus Database: 266.5.7 - Release Date: 01/03/2005
I finally get it to work. The problem doesn't come from jdbc nor dbcp, it's because i use cygwin to connect to gnome on the linux box. It seems that there are conflict between cygwyn ports and jdbc ports Don't have a real explanation but if cygwin not running everything works in jdbc & dbcp Bye Stéphane RIFF wrote: > Here is another Stack trace, i got when > doing DriverManager.setLogWriter() : > > DriverManager.getConnection("jdbc:postgresql://200.200.200.34:5432/geosiaradev") > > trying > driver[className=org.postgresql.Driver,org.postgresql.Driver@11ddcde] > org.postgresql.util.PSQLException > at > org.postgresql.jdbc1.AbstractJdbc1Connection.openConnection(AbstractJdbc1Connection.java:208) > > at org.postgresql.Driver.connect(Driver.java:139) > at java.sql.DriverManager.getConnection(DriverManager.java:512) > at java.sql.DriverManager.getConnection(DriverManager.java:171) > at > org.apache.commons.dbcp.DriverManagerConnectionFactory.createConnection(DriverManagerConnectionFactory.java:48) > > at > org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:290) > > at > org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:771) > > at > org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:95) > > at > fr.cerene.geosiara.gprs.receiver.ConnectionPool.getConnection(ConnectionPool.java:101) > > at > fr.cerene.geosiara.gprs.receiver.SQLoader.saveTrame2(SQLoader.java:210) > at > fr.cerene.geosiara.gprs.receiver.SQLoader$1.run(SQLoader.java:317) > at java.lang.Thread.run(Thread.java:534) > getConnection failed: org.postgresql.util.PSQLException: The > connection attempt failed because Exception: java.net.BindException: > Address already in use: connect > Stack Trace: > > java.net.BindException: Address already in use: connect > at java.net.PlainSocketImpl.socketConnect(Native Method) > at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305) > at > java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:171) > at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:158) > at java.net.Socket.connect(Socket.java:452) > at java.net.Socket.connect(Socket.java:402) > at java.net.Socket.<init>(Socket.java:309) > at java.net.Socket.<init>(Socket.java:124) > at org.postgresql.core.PGStream.<init>(PGStream.java:47) > at > org.postgresql.jdbc1.AbstractJdbc1Connection.openConnection(AbstractJdbc1Connection.java:197) > > at org.postgresql.Driver.connect(Driver.java:139) > at java.sql.DriverManager.getConnection(DriverManager.java:512) > at java.sql.DriverManager.getConnection(DriverManager.java:171) > at > org.apache.commons.dbcp.DriverManagerConnectionFactory.createConnection(DriverManagerConnectionFactory.java:48) > > at > org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:290) > > at > org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:771) > > at > org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:95) > > at > fr.cerene.geosiara.gprs.receiver.ConnectionPool.getConnection(ConnectionPool.java:101) > > at > fr.cerene.geosiara.gprs.receiver.SQLoader.saveTrame2(SQLoader.java:210) > at > fr.cerene.geosiara.gprs.receiver.SQLoader$1.run(SQLoader.java:317) > at java.lang.Thread.run(Thread.java:534) > End of Stack Trace > > java.lang.NullPointerException > at > fr.cerene.geosiara.gprs.receiver.SQLoader.saveTrame2(SQLoader.java:227) > at > fr.cerene.geosiara.gprs.receiver.SQLoader$1.run(SQLoader.java:317) > at java.lang.Thread.run(Thread.java:534) > > > Stéphane RIFF wrote: > >> Here is the NullPointerExceptionStack trace >> java.lang.NullPointerException >> at >> fr.cerene.geosiara.gprs.receiver.SQLoader.saveTrame(SQLoader.java:139) >> at >> fr.cerene.geosiara.gprs.receiver.SQLoader$1.run(SQLoader.java:229) >> at java.lang.Thread.run(Thread.java:534) >> >> fr.cerene.geosiara.gprs.receiver.SQLoader.saveTrame(SQLoader.java:139) >> >> fr.cerene.geosiara.gprs.receiver.SQLoader$1.run(SQLoader.java:229) >> java.lang.Thread.run(Thread.java:534) >> >> but it didn't give more information on the last exception >> ........ >> Thanks >> >> Guillaume Cottenceau wrote: >> >>> Oliver Jowett <oliver 'at' opencloud.com> writes: >>> >>> >>> >>>> Stéphane RIFF wrote: >>>> >>>> >>>> >>>>> 2005-03-01 12:23:44,156 : [WARN] SQLoader - >>>>> java.lang.NullPointerException >>>>> >>>> >>>> >>>> Can you get a stack trace for this exception? (the NPE, not the >>>> earlier one) >>>> >>> >>> >>> >>> Stephan - in case, here's a method to get a human readable >>> stacktrace given an Exception object, if you don't use java 1.5: >>> >>> public static String backtrace( Exception e ) { >>> StackTraceElement[] trace = e.getStackTrace(); >>> StringBuffer sb = new StringBuffer(); >>> for ( int i = 2; i < trace.length; i++ ) { >>> sb.append( "\t" ).append( trace[i].toString() ).append( >>> "\n" ); >>> } >>> return sb.toString(); >>> } >>> >>> >>> >> >> >> > > >