title: How to re-deploy a hibernate-c3p0 project on tomcat 7 without getting strange c3p0 errors
body: <p>If the project is re-deployed through netbeans on tomcat 7 then I get errors like </p>
  
  <pre><code>java.lang.IllegalStateException
      at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1600)
      at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
      at com.mchange.v2.resourcepool.BasicResourcePool.checkIdleResources(BasicResourcePool.java:1481)
      at com.mchange.v2.resourcepool.BasicResourcePool.access$2000(BasicResourcePool.java:32)
      at com.mchange.v2.resourcepool.BasicResourcePool$CheckIdleResourcesTask.run(BasicResourcePool.java:1964)
      at java.util.TimerThread.mainLoop(Timer.java:512)
      at java.util.TimerThread.run(Timer.java:462)
  Exception in thread "Timer-5" java.lang.NoClassDefFoundError: com/mchange/v2/resourcepool/BasicResourcePool$AsyncTestIdleResourceTask
      at com.mchange.v2.resourcepool.BasicResourcePool.checkIdleResources(BasicResourcePool.java:1481)
      at com.mchange.v2.resourcepool.BasicResourcePool.access$2000(BasicResourcePool.java:32)
      at com.mchange.v2.resourcepool.BasicResourcePool$CheckIdleResourcesTask.run(BasicResourcePool.java:1964)
      at java.util.TimerThread.mainLoop(Timer.java:512)
      at java.util.TimerThread.run(Timer.java:462)
  Caused by: java.lang.ClassNotFoundException: com.mchange.v2.resourcepool.BasicResourcePool$AsyncTestIdleResourceTask
      at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
      at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
      ... 5 more
  </code></pre>
  
  <p>Today we got another strange error when we tried to re-deploy the project on tomcat 7</p>
  
  <pre><code>[5:07:02 PM] Nitin - Webscraper/Tester,Java/PHP developer: java.lang.NoClassDefFoundError: com/mchange/v2/lang/VersionUtils
   com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:104)
   com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:65)
   com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:62)
   com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:531)
   com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128)
   org.hibernate.connection.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:78)
   org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
   org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)
   org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:161)
   org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1700)
   org.hibernate.loader.Loader.doQuery(Loader.java:801)
   org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)
   org.hibernate.loader.Loader.doList(Loader.java:2542)
   org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)
   org.hibernate.loader.Loader.list(Loader.java:2271)
  </code></pre>
  
  <p>We have been getting such strange errors since quite some time now. When we try to debug, we find the classes already existing.</p>
  
  <p>What I can think of is dangling c3p0 connection-pooling threads, which are either not destroyed properly on re-deploying, or may be having some active-connection executing or something similar. </p>
  
  <p>Are there any best practices on how to re-deploy such a project which uses hibernate &amp; c3p0 ? Is there some code that I have to write on <code>contextDestroyed</code> for proper closing of c3p0 threads ?</p>