import java.io.IOException;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import javax.servlet.ServletContextEvent;
*/
@WebListener
public class ContextListener implements ServletContextListener {
- private ScheduledExecutorService webjob_scheduler;
- private ScheduledExecutorService localjob_scheduler;
- private ScheduledExecutorService update_scheduler;
+ //private ScheduledExecutorService webjob_scheduler;
+ //private ScheduledExecutorService localjob_scheduler;
+ //private ScheduledExecutorService update_scheduler;
+ private ScheduledExecutorService executor;
+ private ScheduledFuture<?> webjobs;
+ private ScheduledFuture<?> localjobs;
+ private ScheduledFuture<?> updates;
CassandraNativeConnector db = new CassandraNativeConnector();
private static PropertyHelper ph = ProteoCachePropertyHelperManager.getPropertyHelper();
private static Logger log = Logger.getLogger(ContextListener.class);
READ_LOCALFILE_JPRED = initBooleanValue("cassandra.jpred.local.update");
FILL_NEWTABLE = initBooleanValue("cassandra.newtables.update");
+ executor = Executors.newScheduledThreadPool(3);
if (FILL_NEWTABLE) {
System.out.println("Initializating new table update scheduler");
- update_scheduler = Executors.newSingleThreadScheduledExecutor();
- update_scheduler.schedule(new Runnable() {
+ //update_scheduler = Executors.newSingleThreadScheduledExecutor();
+ //update_scheduler.schedule(new Runnable() {
+ executor.schedule(new Runnable() {
@Override
public void run() {
updater.FillNewTable();
}
final int updateperiod = ProteoCachePropertyHelperManager.getIntProperty(ph.getProperty("cassandra.jpred.web.period"));
- webjob_scheduler = Executors.newSingleThreadScheduledExecutor();
+ //webjob_scheduler = Executors.newSingleThreadScheduledExecutor();
System.out.println("Initializating web job scheduler");
System.out.println(" initial delay = " + initialdelay + " seconds");
System.out.println(" update rate = " + updaterate + " seconds");
else
System.out.println(" update period = 5 days");
- webjob_scheduler.scheduleAtFixedRate(new Runnable() {
+ //webjob_scheduler.scheduleAtFixedRate(new Runnable() {
+ webjobs = executor.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
try {
}
final int updateperiod = ProteoCachePropertyHelperManager.getIntProperty(ph.getProperty("cassandra.jpred.local.period"));
- localjob_scheduler = Executors.newSingleThreadScheduledExecutor();
+ //localjob_scheduler = Executors.newSingleThreadScheduledExecutor();
System.out.println("Initializating local job scheduler");
System.out.println(" initial delay = " + initialdelay + " seconds");
System.out.println(" update rate = " + updaterate + " seconds");
System.out.println(" update period = " + updateperiod + " days");
else
System.out.println(" update period = 5 days");
- localjob_scheduler.scheduleAtFixedRate(new Runnable() {
+ //localjob_scheduler.scheduleAtFixedRate(new Runnable() {
+ localjobs = executor.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
try {
/**
* @see ServletContextListener#contextDestroyed(ServletContextEvent)
*/
+ /*
public void contextDestroyed(ServletContextEvent arg0) {
db.Closing();
System.out.println("Shut down ProteoCache......");
}
update_scheduler.shutdownNow();
}
-
+ */
+ public void contextDestroyed(ServletContextEvent arg0) {
+ db.Closing();
+ try {
+ System.out.println("Shut down ProteoCache......");
+ if (READ_WEB_JPRED) {
+ webjobs.cancel(true);
+ }
+ if (READ_LOCALFILE_JPRED) {
+ localjobs.cancel(true);
+ }
+ executor.shutdown();
+ executor.awaitTermination(3, TimeUnit.SECONDS);
+ } catch (InterruptedException e) {
+ log.warn(e.getMessage(), e);
+ }
+ }
}