Attempt to resolve the problem with java on cluster...
authorSasha Sherstnev <a.sherstnev@dundee.ac.uk>
Fri, 10 Jan 2014 15:01:02 +0000 (15:01 +0000)
committerSasha Sherstnev <a.sherstnev@dundee.ac.uk>
Fri, 10 Jan 2014 15:01:02 +0000 (15:01 +0000)
server/compbio/listeners/ContextListener.java

index c3109a7..356828c 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;
@@ -25,9 +26,13 @@ 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();
        private static PropertyHelper ph = ProteoCachePropertyHelperManager.getPropertyHelper();
        private static Logger log = Logger.getLogger(ContextListener.class);
@@ -58,10 +63,12 @@ public class ContextListener implements ServletContextListener {
                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();
@@ -87,7 +94,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");
@@ -96,7 +103,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 {
@@ -131,7 +139,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");
@@ -139,7 +147,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 {
@@ -161,6 +170,7 @@ public class ContextListener implements ServletContextListener {
        /**
         * @see ServletContextListener#contextDestroyed(ServletContextEvent)
         */
+       /*
        public void contextDestroyed(ServletContextEvent arg0) {
                db.Closing();
                System.out.println("Shut down ProteoCache......");
@@ -172,5 +182,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);
+       }
+       }
 }