Tutorial :c3p0 database pool errors



Question:

I'm getting the following exception after my program runs for 30 minutes or so with 3cp0 as my connection pool.

here's the error:

   [java]  INFO [Timer-0] (BasicResourcePool.java:1392) - A checked-out resource is overdue, and will be destroyed: com.mchange.v2.c3p0.impl.NewPooledConnection@eaecb09      [java] The last packet successfully received from the server was 375,017 milliseconds ago.  The last packet sent successfully to the server was 9 milliseconds ago.      [java] Exception in thread "main" java.lang.NullPointerException      [java]  at com.mytest.myorg.MyProg.MyProgRunner.main(MyProgRunner.java:104)  

and I'm setting up my pool like this:

ComboPooledDataSource cpds = new ComboPooledDataSource();  cpds.setDriverClass( "com.mysql.jdbc.Driver" ); //loads the jdbc driver              cpds.setJdbcUrl( "jdbc:mysql://"+hostname+"/"+database );  cpds.setUser(username);                                    cpds.setPassword(password);    cpds.setMinPoolSize(5);                                       cpds.setAcquireIncrement(5);  cpds.setMaxPoolSize(15);  cpds.setAutoCommitOnClose(true);  cpds.setIdleConnectionTestPeriod(300);  cpds.setMaxStatements(180);  cpds.setNumHelperThreads(20);  cpds.setUnreturnedConnectionTimeout(300);  

I have 100 threads that crawl a page then 15 DB threads that insert the results into my database. If a crawl task takes over 20 seconds I kill the thread. Any ideas why the db connection pool just dies?

thanks


Solution:1

While using c3p0, there are some properties that you need to initialize in c3p0.properties file. Out of them there is one property named c3p0.unreturnedConnectionTimeout.

Its value is in seconds. If some query did not return result within specified time period (as you specified for c3p0.unreturnedConnectionTimeout property in c3p0.properties file), then current session will be destroyed and new session will be pulled out from session pool, but your code is working on previous session that is already destroyed. So your code throws session is alredy closed Exception

So You have to find out max time that your query might take and set this property value according to that.

Cheers


Solution:2

this forum posting might help you: http://old.nabble.com/A-checked-out-resource-is-overdue--td20545738.html#a20575081

In the case of the killed threads, are the connections returned to the pool?


Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »