this.reapTable = reapTable;
this.reapColumn = reapColumn;
if (reapTable != null && reapColumn != null)
- new Reaper().start();
+ Main.cron.executeLater(1000 * REAPER_INTERVAL_SECONDS, new Reaper());
}
public static final int REAPER_INTERVAL_SECONDS = 60 * 60;
- private class Reaper extends Thread {
-
+ private class Reaper implements Runnable {
public void run() {
- while(true) {
- try {
- try { Thread.sleep(1000 * REAPER_INTERVAL_SECONDS); } catch (Exception e) { };
- Log.warn(Reaper.class, filename + " reaping...");
- long when = System.currentTimeMillis();
- when -= 5 * 24 * 60 * 60 * 1000;
- synchronized(SqliteTable.this) {
- PreparedStatement ps = conn.prepareStatement("select count(*) from "+reapTable+" where "+reapColumn+"<?");
- ps.setTimestamp(1, new Timestamp(when));
- ResultSet rs = ps.executeQuery();
- if (rs.next())
- Log.warn(Reaper.class, filename + " reaping " + rs.getInt(1) + " entries");
- Log.warn(Reaper.class, filename + ": " + "delete from "+reapTable+" where "+reapColumn+"<"+when);
- ps = conn.prepareStatement("delete from "+reapTable+" where "+reapColumn+"<?");
- ps.setTimestamp(1, new Timestamp(when));
- int rows = ps.executeUpdate();
- Log.warn(Reaper.class, filename + " done reaping; removed " + rows + " rows");
- }
- } catch (Exception e) { Log.error(Reaper.class, e); }
- }
+ try {
+ Log.warn(Reaper.class, filename + " reaping...");
+ long when = System.currentTimeMillis();
+ when -= 5 * 24 * 60 * 60 * 1000;
+ synchronized(SqliteTable.this) {
+ PreparedStatement ps =
+ conn.prepareStatement("select count(*) from "+reapTable+" where "+reapColumn+"<?");
+ ps.setTimestamp(1, new Timestamp(when));
+ ResultSet rs = ps.executeQuery();
+ if (rs.next())
+ Log.warn(Reaper.class, filename + " reaping " + rs.getInt(1) + " entries");
+ Log.warn(Reaper.class, filename + ": " + "delete from "+reapTable+" where "+reapColumn+"<"+when);
+ ps = conn.prepareStatement("delete from "+reapTable+" where "+reapColumn+"<?");
+ ps.setTimestamp(1, new Timestamp(when));
+ int rows = ps.executeUpdate();
+ Log.warn(Reaper.class, filename + " done reaping; removed " + rows + " rows");
+ }
+ } catch (Exception e) { Log.error(Reaper.class, e); }
+ Main.cron.executeLater(1000 * REAPER_INTERVAL_SECONDS, this);
}
}