diff --git a/RadarServer/com.raytheon.rcm.lib/src/com/raytheon/rcm/event/ConfigEvent.java b/RadarServer/com.raytheon.rcm.lib/src/com/raytheon/rcm/event/ConfigEvent.java index 7475d52aa8..e8e3d65d54 100755 --- a/RadarServer/com.raytheon.rcm.lib/src/com/raytheon/rcm/event/ConfigEvent.java +++ b/RadarServer/com.raytheon.rcm.lib/src/com/raytheon/rcm/event/ConfigEvent.java @@ -37,13 +37,16 @@ import com.raytheon.rcm.config.RadarConfig; * 2009-04-22 #1693 D. Friedman Initial checkin * ... * 2014-02-03 DR 14762 D. Friedman Add Category enum + * 2015-02-11 DR 17092 D. Friedman Handle NDM cronOTRs.xml updates. * * */ @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) public class ConfigEvent { - public static enum Category { GLOBAL_CONFIG, RADAR_CONFIG, PROD_DISTRIBUTION, NATIONAL_RPS_LISTS } + public static enum Category { + GLOBAL_CONFIG, RADAR_CONFIG, PROD_DISTRIBUTION, NATIONAL_RPS_LISTS, CRON_OTRS + } private String radarID; // null indicates global configuration change. private RadarConfig oldConfig; diff --git a/RadarServer/com.raytheon.rcm.server/src/com/raytheon/rcm/coll/RequestScheduler.java b/RadarServer/com.raytheon.rcm.server/src/com/raytheon/rcm/coll/RequestScheduler.java index c6623619bd..0eacd2223a 100644 --- a/RadarServer/com.raytheon.rcm.server/src/com/raytheon/rcm/coll/RequestScheduler.java +++ b/RadarServer/com.raytheon.rcm.server/src/com/raytheon/rcm/coll/RequestScheduler.java @@ -27,6 +27,7 @@ import org.quartz.impl.StdSchedulerFactory; import com.raytheon.rcm.config.Configuration; import com.raytheon.rcm.config.RadarConfig; import com.raytheon.rcm.config.Util; +import com.raytheon.rcm.event.ConfigEvent; import com.raytheon.rcm.event.OtrEvent; import com.raytheon.rcm.event.RadarEventAdapter; import com.raytheon.rcm.event.RadarEventListener; @@ -37,6 +38,19 @@ import com.raytheon.rcm.request.Request; import com.raytheon.rcm.server.Log; import com.raytheon.rcm.server.RadarServer; +/** + * Represents the standard configuration model of the AWIPS 2 RadarServer. + * + *
+ * + * SOFTWARE HISTORY + * Date Ticket# Engineer Description + * ------------ ---------- ----------- -------------------------- + * ... + * 2015-02-11 DR 17092 D. Friedman Handle NDM cronOTRs.xml updates. + *+ * + */ public class RequestScheduler extends RadarEventAdapter { // Quartz job detail properties @@ -46,8 +60,6 @@ public class RequestScheduler extends RadarEventAdapter { private RadarServer radarServer; private OTRManager otrManager; - private CronOTRConfiguration cronConfig; - private Scheduler scheduler; private Random random = new Random(); @@ -70,16 +82,29 @@ public class RequestScheduler extends RadarEventAdapter { OTRManager.class.getSimpleName()); return; } - + + loadConfiguration(); + } + + private synchronized void loadConfiguration() { + if (scheduler != null) { + try { + scheduler.shutdown(); + } catch (SchedulerException e) { + Log.errorf("Error stopping cron-OTR scheduler: %s", e); + } + } + try { scheduler = StdSchedulerFactory.getDefaultScheduler(); scheduler.start(); } catch (SchedulerException e) { - Log.errorf("Failed to start cron-OTR scheduler: %s", e); + Log.errorf("Failed to start cron-OTR scheduler: %s", e); scheduler = null; } - + if (scheduler != null) { + CronOTRConfiguration cronConfig = null; InputStream ins = null; try { ins = radarServer.getConfiguration().getDropInData("cronOTRs.xml"); @@ -91,7 +116,7 @@ public class RequestScheduler extends RadarEventAdapter { } catch (Exception e) { Log.errorf("Error loading cron-OTR configuration: %s", e); } - + if (cronConfig != null) { int jobIndex = 1; // Used to generate unique JobDetail names for (CronOTR cronOTR : cronConfig.cronOTRList) { @@ -104,7 +129,7 @@ public class RequestScheduler extends RadarEventAdapter { cronOTR.getCron(), e); continue; } - + JobDetail jd = new JobDetail(name, null, CronOTRJob.class); JobDataMap jdm = jd.getJobDataMap(); jdm.put(SCHEDULER, this); @@ -112,10 +137,10 @@ public class RequestScheduler extends RadarEventAdapter { try { scheduler.scheduleJob(jd, trigger); } catch (Exception e) { - Log.errorf("Error schedule cron \"%s\": %s", + Log.errorf("Error scheduling cron \"%s\": %s", cronOTR.getCron(), e); } - + jobIndex++; } } @@ -179,7 +204,13 @@ public class RequestScheduler extends RadarEventAdapter { runCron(cronOTR); } - + + public void handleConfigEvent(ConfigEvent event) { + if (event.getCategory() == ConfigEvent.Category.CRON_OTRS) { + loadConfiguration(); + } + } + /** * This class declared public only so that it can be instantiated by * Quartz. diff --git a/RadarServer/com.raytheon.rcm.server/src/com/raytheon/rcm/config/std/StandardConfigProvider.java b/RadarServer/com.raytheon.rcm.server/src/com/raytheon/rcm/config/std/StandardConfigProvider.java index 07a6ce68f1..2c5b05a584 100755 --- a/RadarServer/com.raytheon.rcm.server/src/com/raytheon/rcm/config/std/StandardConfigProvider.java +++ b/RadarServer/com.raytheon.rcm.server/src/com/raytheon/rcm/config/std/StandardConfigProvider.java @@ -40,6 +40,8 @@ import com.raytheon.rcm.config.LinkType; import com.raytheon.rcm.config.RadarConfig; import com.raytheon.rcm.config.StandardProductDistInfoDB; import com.raytheon.rcm.config.awips1.Awips1ConfigProvider; +import com.raytheon.rcm.event.ConfigEvent; +import com.raytheon.rcm.event.RadarEventListener; import com.raytheon.rcm.server.Log; @@ -54,6 +56,7 @@ import com.raytheon.rcm.server.Log; * ------------ ---------- ----------- -------------------------- * ... * 2014-02-03 DR 14762 D. Friedman Handle updated NDM config files. + * 2015-02-11 DR 17092 D. Friedman Handle NDM cronOTRs.xml updates. * * */ @@ -62,6 +65,7 @@ public class StandardConfigProvider implements ConfigurationProvider { private static String WSR_88D_PROD_LIST_NAME = "prodList.txt"; private static String TDWR__PROD_LIST_NAME = "tdwrProdList.txt"; private static String WMO_SITE_INFO_NAME = "wmoSiteInfo.txt"; + private static String CRON_OTRS_NAME = "cronOTRs.xml"; private static JAXBContext jaxbContext; private static Unmarshaller u; @@ -266,6 +270,12 @@ public class StandardConfigProvider implements ConfigurationProvider { loadProdListDB(); } else if (WMO_SITE_INFO_NAME.equals(name)) { updateRegionCode(); + } else if (CRON_OTRS_NAME.equals(name)) { + RadarEventListener target = config.getConfigurationEventTarget(); + if (target != null) { + ConfigEvent ev = new ConfigEvent(ConfigEvent.Category.CRON_OTRS); + target.handleConfigEvent(ev); + } } else if (Pattern.matches("^rps-.*OP.*$", name)) { config.notifyNationalRpsLists(); } else { diff --git a/edexOsgi/com.raytheon.edex.rpgenvdata/res/spring/rpgenvdata-spring.xml b/edexOsgi/com.raytheon.edex.rpgenvdata/res/spring/rpgenvdata-spring.xml index e61b917ac3..13088cf66f 100644 --- a/edexOsgi/com.raytheon.edex.rpgenvdata/res/spring/rpgenvdata-spring.xml +++ b/edexOsgi/com.raytheon.edex.rpgenvdata/res/spring/rpgenvdata-spring.xml @@ -32,6 +32,10 @@