package edu.sc.seis.sod;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Timer;
import java.util.TimerTask;
import edu.iris.Fissures.model.MicroSecondDate;
import edu.iris.Fissures.model.TimeInterval;
import edu.iris.Fissures.model.UnitImpl;
import edu.sc.seis.fissuresUtil.database.ConnMgr;
import edu.sc.seis.fissuresUtil.exceptionHandler.GlobalExceptionHandler;
/**
* does a checkpoint on the database every hour
*
* @author groves Created on May 9, 2005
*/
public class PeriodicCheckpointer extends TimerTask {
public PeriodicCheckpointer() {
if (ConnMgr.getDB_TYPE().equals(ConnMgr.HSQL)) {
Timer t = new Timer(true);
t.schedule(this,
new MicroSecondDate().add(new TimeInterval(1, UnitImpl.HOUR)),
ONE_HOUR);
} else {
logger.warn("Checkpointing only makes sense for HSQLDB, not "+ConnMgr.getDB_TYPE());
}
}
public void run() {
try {
Connection conn = ConnMgr.createConnection();
Statement stmt = conn.createStatement();
logger.info("Checkpointing db");
stmt.executeUpdate("CHECKPOINT");
logger.info("Done checkpointing db");
conn.close();
} catch(SQLException e) {
GlobalExceptionHandler.handle(e);
}
}
private static final int ONE_HOUR = 60 * 60 * 1000;
private static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(PeriodicCheckpointer.class);
}