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;
import org.apache.log4j.Logger;
-import com.datastax.driver.core.Session;
-
import compbio.cassandra.CassandraNativeConnector;
import compbio.cassandra.CassandraNewTableWriter;
import compbio.cassandra.JpredParserHTTP;
*/
@WebListener
public class ContextListener implements ServletContextListener {
- private ScheduledExecutorService webjob_scheduler;
- private ScheduledExecutorService localjob_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();
- static PropertyHelper ph = ProteoCachePropertyHelperManager.getPropertyHelper();
+ private static PropertyHelper ph = ProteoCachePropertyHelperManager.getPropertyHelper();
private static Logger log = Logger.getLogger(ContextListener.class);
public static boolean READ_WEB_JPRED = false;
public static boolean READ_LOCALFILE_JPRED = false;
+ public static boolean FILL_NEWTABLE = false;
+ public static boolean UPDATE_TABLE = false;
private static boolean initBooleanValue(String key) {
assert key != null;
System.out.println("ProteoCache session start......");
// connect to the db and create table if needed
db.Connect();
- CassandraNewTableWriter updater = new CassandraNewTableWriter();
-
- // updater.FillParameters();
- // updater.FillNewTable();
+ final CassandraNewTableWriter updater = new CassandraNewTableWriter();
READ_WEB_JPRED = initBooleanValue("cassandra.jpred.web.update");
READ_LOCALFILE_JPRED = initBooleanValue("cassandra.jpred.local.update");
+ FILL_NEWTABLE = initBooleanValue("cassandra.newtables.update");
+ UPDATE_TABLE = initBooleanValue("cassandra.version.update");
+
+ executor = Executors.newScheduledThreadPool(3);
+ if (UPDATE_TABLE) {
+ System.out.println("Initializating update version parameter");
+ //update_scheduler = Executors.newSingleThreadScheduledExecutor();
+ //update_scheduler.schedule(new Runnable() {
+ executor.schedule(new Runnable() {
+ @Override
+ public void run() {
+ updater.FillNewParameter();
+ }
+ }, 10, TimeUnit.SECONDS);
+ }
+ if (FILL_NEWTABLE) {
+ System.out.println("Initializating new table update scheduler");
+ //update_scheduler = Executors.newSingleThreadScheduledExecutor();
+ //update_scheduler.schedule(new Runnable() {
+ executor.schedule(new Runnable() {
+ @Override
+ public void run() {
+ updater.FillNewTable();
+ }
+ }, 10, TimeUnit.SECONDS);
+ }
if (READ_WEB_JPRED) {
// get data from real Jpred production server
- final String datasrc = "http://www.compbio.dundee.ac.uk/www-jpred/results/usage-new/alljobs.dat";
- final String prefix = "http://www.compbio.dundee.ac.uk/www-jpred/results";
+ String theprefix = ph.getProperty("cassandra.jpred.web.prefix");
+ if (null == theprefix) {
+ theprefix = "http://www.compbio.dundee.ac.uk/www-jpred/results";
+ }
+
+ final String datasrc = theprefix + "/usage-new/alljobs.dat";
+ final String prefix = theprefix;
final JpredParserHTTP parser = new JpredParserHTTP(prefix);
int initialdelay = 300;
}
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......");
if (READ_LOCALFILE_JPRED) {
localjob_scheduler.shutdownNow();
}
+ 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);
+ }
}
-
}