Adding license place holder, adding NightlyDefragement.java
This commit is contained in:
parent
5951f16be0
commit
f3064fcf23
2 changed files with 82 additions and 0 deletions
|
@ -1,3 +1,5 @@
|
||||||
|
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||||
|
|
||||||
package edu.cornell.mannlib.vitro.webapp.servlet.setup;
|
package edu.cornell.mannlib.vitro.webapp.servlet.setup;
|
||||||
|
|
||||||
import javax.servlet.ServletContextEvent;
|
import javax.servlet.ServletContextEvent;
|
||||||
|
|
|
@ -0,0 +1,80 @@
|
||||||
|
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||||
|
|
||||||
|
package edu.cornell.mannlib.vitro.webapp.servlet.setup;
|
||||||
|
|
||||||
|
import javax.servlet.ServletContextEvent;
|
||||||
|
import javax.servlet.ServletContextListener;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.joda.time.DateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This will attempt to run System.gc() once a night.
|
||||||
|
*
|
||||||
|
* @author bdc34
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class NightlyDefragement implements ServletContextListener, Runnable {
|
||||||
|
|
||||||
|
private static NightlyDefragement nightlyDefragement = null;
|
||||||
|
private static boolean stop = false;
|
||||||
|
private static final Log log = LogFactory.getLog(NightlyDefragement.class);
|
||||||
|
|
||||||
|
protected DateTime lastRun;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
while( ! stop ){
|
||||||
|
DateTime now = new DateTime();
|
||||||
|
|
||||||
|
if( now.hourOfDay().get() > 0
|
||||||
|
&& now.hourOfDay().get() < 2
|
||||||
|
&& lastRun.isBefore( now.minusHours(22) ) ){
|
||||||
|
|
||||||
|
log.info("running defragement");
|
||||||
|
long start = System.currentTimeMillis();
|
||||||
|
System.gc();
|
||||||
|
log.info("Finished defragement, " + (start - System.currentTimeMillis()) + "msec");
|
||||||
|
lastRun = now;
|
||||||
|
}
|
||||||
|
|
||||||
|
try{
|
||||||
|
synchronized( nightlyDefragement ){
|
||||||
|
this.wait(30*60*1000); //30 min;
|
||||||
|
}
|
||||||
|
}catch( InterruptedException ex){
|
||||||
|
log.debug("woken up");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log.info(" Stopping NightlyDefragement thread.");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void stopNicely(){
|
||||||
|
stop = true;
|
||||||
|
synchronized( nightlyDefragement ){
|
||||||
|
nightlyDefragement.notifyAll();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void contextInitialized(ServletContextEvent arg0) {
|
||||||
|
lastRun = new DateTime().minusHours( 400 );
|
||||||
|
if( nightlyDefragement != null ){
|
||||||
|
log.warn("NightlyDefragement listener has already been setup. Check your web.xml for duplicate listeners.");
|
||||||
|
}else{
|
||||||
|
nightlyDefragement = this;
|
||||||
|
Thread thread = new Thread(this , "nightlyDefragementThread");
|
||||||
|
thread.start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void contextDestroyed(ServletContextEvent arg0) {
|
||||||
|
nightlyDefragement.stopNicely();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue