@Override
  public void run() {
    logger.info("DailyCouponExpirationTask starting");

    CouponDAO couponDAO = new CouponDBDAO();
    Collection<Coupon> coupons;

    while (!quit) {
      try {
        coupons = couponDAO.getAllCoupons();
        // long millis = System.currentTimeMillis();
        // Date currentDate = new Date(millis);
        int nRemoved = 0;
        for (Coupon coupon : coupons) {
          // if (coupon.getEndDate().before(currentDate)) {
          if (coupon.isExpired()) {
            try {
              logger.info("removing expierd coupon : " + coupon);
              couponDAO.removeCoupon(coupon);
              nRemoved++;
            } catch (Exception e) {
              logger.error("remove expired coupon failed");
            }
          }
        }
        logger.info("DailyCouponExpirationTask removed " + nRemoved + " expierd coupons");
      } catch (SQLException e) {
        logger.error("DailyCouponExpirationTask run failed : " + e.toString());
      }

      try {
        // sleep(24 * Utils.houer);
        // sleep(15 * Utils.minute);
        sleep(sleepTime);
      } catch (InterruptedException e) {
        logger.error("DailyCouponExpirationTask interrupted");
      }
    }
    logger.info("DailyCouponExpirationTask finished");
  }