inserted 2 columns: version and pragramme name
[proteocache.git] / server / compbio / listeners / ContextListener.java
1 package compbio.listeners;
2
3 import java.io.IOException;
4 import java.util.concurrent.Executors;
5 import java.util.concurrent.ScheduledExecutorService;
6 import java.util.concurrent.ScheduledFuture;
7 import java.util.concurrent.TimeUnit;
8
9 import javax.servlet.ServletContextEvent;
10 import javax.servlet.ServletContextListener;
11 import javax.servlet.annotation.WebListener;
12
13 import org.apache.log4j.Logger;
14
15 import compbio.cassandra.CassandraNativeConnector;
16 import compbio.cassandra.CassandraNewTableWriter;
17 import compbio.cassandra.JpredParserHTTP;
18 import compbio.cassandra.JpredParserLocalFile;
19 import compbio.engine.ProteoCachePropertyHelperManager;
20 import compbio.util.PropertyHelper;
21 import compbio.util.Util;
22
23 /**
24  * Application Lifecycle Listener implementation class ContextListener
25  * 
26  */
27 @WebListener
28 public class ContextListener implements ServletContextListener {
29         //private ScheduledExecutorService webjob_scheduler;
30         //private ScheduledExecutorService localjob_scheduler;
31         //private ScheduledExecutorService update_scheduler;
32         private ScheduledExecutorService executor;
33         private ScheduledFuture<?> webjobs;
34         private ScheduledFuture<?> localjobs;
35         private ScheduledFuture<?> updates;
36         CassandraNativeConnector db = new CassandraNativeConnector();
37         private static PropertyHelper ph = ProteoCachePropertyHelperManager.getPropertyHelper();
38         private static Logger log = Logger.getLogger(ContextListener.class);
39         public static boolean READ_WEB_JPRED = false;
40         public static boolean READ_LOCALFILE_JPRED = false;
41         public static boolean FILL_NEWTABLE = false;
42         public static boolean UPDATE_TABLE = false;
43
44         private static boolean initBooleanValue(String key) {
45                 assert key != null;
46                 String status = ph.getProperty(key);
47                 log.debug("Loading property: " + key + " with value: " + status);
48                 if (Util.isEmpty(status)) {
49                         return false;
50                 }
51                 return new Boolean(status.trim()).booleanValue();
52         }
53
54         /**
55          * @see ServletContextListener#contextInitialized(ServletContextEvent)
56          */
57         public void contextInitialized(ServletContextEvent arg0) {
58                 System.out.println("ProteoCache session start......");
59                 // connect to the db and create table if needed
60                 db.Connect();
61                 final CassandraNewTableWriter updater = new CassandraNewTableWriter();
62
63                 READ_WEB_JPRED = initBooleanValue("cassandra.jpred.web.update");
64                 READ_LOCALFILE_JPRED = initBooleanValue("cassandra.jpred.local.update");
65                 FILL_NEWTABLE = initBooleanValue("cassandra.newtables.update");
66                 UPDATE_TABLE = initBooleanValue("cassandra.version.update");
67
68                 executor = Executors.newScheduledThreadPool(3);
69                 if (UPDATE_TABLE) {
70                         System.out.println("Initializating update version parameter");
71                         //update_scheduler = Executors.newSingleThreadScheduledExecutor();
72                         //update_scheduler.schedule(new Runnable() {
73                         executor.schedule(new Runnable() {
74                                 @Override
75                                 public void run() {
76                                         updater.FillNewParameter();
77                                 }
78                         }, 10, TimeUnit.SECONDS);
79                 }
80                 if (FILL_NEWTABLE) {
81                         System.out.println("Initializating new table update scheduler");
82                         //update_scheduler = Executors.newSingleThreadScheduledExecutor();
83                         //update_scheduler.schedule(new Runnable() {
84                         executor.schedule(new Runnable() {
85                                 @Override
86                                 public void run() {
87                                         updater.FillNewTable();
88                                 }
89                         }, 10, TimeUnit.SECONDS);
90                 }
91
92                 if (READ_WEB_JPRED) {
93                         // get data from real Jpred production server
94                         final String datasrc = "http://www.compbio.dundee.ac.uk/www-jpred/results/usage-new/alljobs.dat";
95                         final String prefix = "http://www.compbio.dundee.ac.uk/www-jpred/results";
96                         final JpredParserHTTP parser = new JpredParserHTTP(prefix);
97
98                         int initialdelay = 300;
99                         int updaterate = 600;
100                         int newinitialdelay = ProteoCachePropertyHelperManager.getIntProperty(ph.getProperty("cassandra.jpred.web.inidelay"));
101                         if (0 <= newinitialdelay) {
102                                 initialdelay = newinitialdelay;
103                         }
104                         int newupdaterate = ProteoCachePropertyHelperManager.getIntProperty(ph.getProperty("cassandra.jpred.web.updaterate"));
105                         if (0 < newupdaterate) {
106                                 updaterate = newupdaterate;
107                         }
108                         final int updateperiod = ProteoCachePropertyHelperManager.getIntProperty(ph.getProperty("cassandra.jpred.web.period"));
109
110                         //webjob_scheduler = Executors.newSingleThreadScheduledExecutor();
111                         System.out.println("Initializating web job scheduler");
112                         System.out.println("    initial delay = " + initialdelay + " seconds");
113                         System.out.println("    update rate = " + updaterate + " seconds");
114                         if (0 < updateperiod)
115                                 System.out.println("    update period = " + updateperiod + " days");
116                         else
117                                 System.out.println("    update period = 5 days");
118
119                         //webjob_scheduler.scheduleAtFixedRate(new Runnable() {
120                         webjobs = executor.scheduleAtFixedRate(new Runnable() {
121                                 @Override
122                                 public void run() {
123                                         try {
124                                                 if (0 < updateperiod) {
125                                                         parser.Parsing(datasrc, updateperiod);
126                                                 } else {
127                                                         parser.Parsing(datasrc, 5);
128                                                 }
129                                         } catch (IOException e) {
130                                                 // TODO Auto-generated catch block
131                                                 e.printStackTrace();
132                                         }
133                                 }
134                         }, initialdelay, updaterate, TimeUnit.SECONDS);
135                 }
136
137                 if (READ_LOCALFILE_JPRED) {
138                         // get irtifical data generated for the DB stress tests
139                         final String datasrc = "/home/asherstnev/Projects/Java.projects/proteocache/data_stress_test/data.dat";
140                         final String prefix = "/home/asherstnev/Projects/Java.projects/proteocache/data_stress_test/Jpreddata";
141                         final JpredParserLocalFile parser = new JpredParserLocalFile(prefix);
142
143                         int initialdelay = 300;
144                         int updaterate = 600;
145                         int newinitialdelay = ProteoCachePropertyHelperManager.getIntProperty(ph.getProperty("cassandra.jpred.local.inidelay"));
146                         if (0 <= newinitialdelay) {
147                                 initialdelay = newinitialdelay;
148                         }
149                         int newupdaterate = ProteoCachePropertyHelperManager.getIntProperty(ph.getProperty("cassandra.jpred.local.updaterate"));
150                         if (0 < newupdaterate) {
151                                 updaterate = newupdaterate;
152                         }
153                         final int updateperiod = ProteoCachePropertyHelperManager.getIntProperty(ph.getProperty("cassandra.jpred.local.period"));
154
155                         //localjob_scheduler = Executors.newSingleThreadScheduledExecutor();
156                         System.out.println("Initializating local job scheduler");
157                         System.out.println("    initial delay = " + initialdelay + " seconds");
158                         System.out.println("    update rate = " + updaterate + " seconds");
159                         if (0 < updateperiod)
160                                 System.out.println("    update period = " + updateperiod + " days");
161                         else
162                                 System.out.println("    update period = 5 days");
163                         //localjob_scheduler.scheduleAtFixedRate(new Runnable() {
164                         localjobs = executor.scheduleAtFixedRate(new Runnable() {
165                                 @Override
166                                 public void run() {
167                                         try {
168                                                 if (0 < updateperiod) {
169                                                         parser.Parsing(datasrc, updateperiod);
170                                                 } else {
171                                                         parser.Parsing(datasrc, 100);
172                                                 }
173                                         } catch (IOException e) {
174                                                 // TODO Auto-generated catch block
175                                                 e.printStackTrace();
176                                         }
177                                 }
178                         }, initialdelay, updaterate, TimeUnit.SECONDS);
179                 }
180
181         }
182
183         /**
184          * @see ServletContextListener#contextDestroyed(ServletContextEvent)
185          */
186         /*
187         public void contextDestroyed(ServletContextEvent arg0) {
188                 db.Closing();
189                 System.out.println("Shut down ProteoCache......");
190                 if (READ_WEB_JPRED) {
191                         webjob_scheduler.shutdownNow();
192                 }
193                 if (READ_LOCALFILE_JPRED) {
194                         localjob_scheduler.shutdownNow();
195                 }
196                 update_scheduler.shutdownNow();
197         }
198         */
199         public void contextDestroyed(ServletContextEvent arg0) {
200                 db.Closing();
201         try {
202                 System.out.println("Shut down ProteoCache......");
203                 if (READ_WEB_JPRED) {
204                         webjobs.cancel(true);
205                 }
206                 if (READ_LOCALFILE_JPRED) {
207                         localjobs.cancel(true);
208                 }
209                 executor.shutdown();
210                 executor.awaitTermination(3, TimeUnit.SECONDS);
211         } catch (InterruptedException e) {
212                 log.warn(e.getMessage(), e);
213         }
214         }
215 }