Switichin between different Jpred installations
[proteocache.git] / server / compbio / listeners / ContextListener.java
index ed15609..f862a2f 100644 (file)
@@ -3,6 +3,7 @@ package compbio.listeners;
 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;
@@ -11,8 +12,6 @@ import javax.servlet.annotation.WebListener;
 
 import org.apache.log4j.Logger;
 
-import com.datastax.driver.core.Session;
-
 import compbio.cassandra.CassandraNativeConnector;
 import compbio.cassandra.CassandraNewTableWriter;
 import compbio.cassandra.JpredParserHTTP;
@@ -27,15 +26,20 @@ import compbio.util.Util;
  */
 @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();
-       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;
@@ -59,11 +63,25 @@ public class ContextListener implements ServletContextListener {
                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() {
+                       //update_scheduler = Executors.newSingleThreadScheduledExecutor();
+                       //update_scheduler.schedule(new Runnable() {
+                       executor.schedule(new Runnable() {
                                @Override
                                public void run() {
                                        updater.FillNewTable();
@@ -73,8 +91,13 @@ public class ContextListener implements ServletContextListener {
 
                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;
@@ -89,7 +112,7 @@ public class ContextListener implements ServletContextListener {
                        }
                        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");
@@ -98,7 +121,8 @@ public class ContextListener implements ServletContextListener {
                        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 {
@@ -133,7 +157,7 @@ public class ContextListener implements ServletContextListener {
                        }
                        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");
@@ -141,7 +165,8 @@ public class ContextListener implements ServletContextListener {
                                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 {
@@ -163,6 +188,7 @@ public class ContextListener implements ServletContextListener {
        /**
         * @see ServletContextListener#contextDestroyed(ServletContextEvent)
         */
+       /*
        public void contextDestroyed(ServletContextEvent arg0) {
                db.Closing();
                System.out.println("Shut down ProteoCache......");
@@ -174,5 +200,21 @@ public class ContextListener implements ServletContextListener {
                }
                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);
+       }
+       }
 }