code: public void run() {
  //    todo    if (logger.isDebugEnabled()) {
  //            logger.debug("start running PooledDataSourceCleaner");
  //        }
  
          state = STATE_CLEANER.RUNNING;
          while (state != STATE_CLEANER.SHUTDOWN) {
              try {
                  Thread.sleep(interval * 1000);
              } catch (InterruptedException e) {
  //              todo  if (logger.isDebugEnabled()) {
  //                    logger.debug("Get interrupted, shutdown the PooledDataSourceCleaner");
  //                }
                  break;//get out if anyone interrupt
              }
              this.manager.cleanDataSources();
  
              //if no pool at all, going to stop itself
              if (this.manager.getDbmsPoolSize() == 0) {
  //             todo   if (logger.isDebugEnabled()) {
  //                    logger.debug("Empty pools, shutdown the PooledDataSourceCleaner");
  //                }
                  state = STATE_CLEANER.SHUTDOWN;//stop spinning
                  break; //get out
              }
          }
      }
docs: wake up and clean the pools if the pool has empty connection table.