Merge "ASM #17092 - Add cronOTRs.xml to radar NDM files" into asm_14.4.1

Former-commit-id: 346fc7563a680155c286bcbbcdaea25ec12b30fc
This commit is contained in:
Juliya Dynina 2015-02-12 09:20:27 -05:00 committed by Gerrit Code Review
commit ea11991a31
4 changed files with 59 additions and 11 deletions

View file

@ -37,13 +37,16 @@ import com.raytheon.rcm.config.RadarConfig;
* 2009-04-22 #1693 D. Friedman Initial checkin * 2009-04-22 #1693 D. Friedman Initial checkin
* ... * ...
* 2014-02-03 DR 14762 D. Friedman Add Category enum * 2014-02-03 DR 14762 D. Friedman Add Category enum
* 2015-02-11 DR 17092 D. Friedman Handle NDM cronOTRs.xml updates.
* </pre> * </pre>
* *
*/ */
@XmlRootElement @XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD) @XmlAccessorType(XmlAccessType.FIELD)
public class ConfigEvent { 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 String radarID; // null indicates global configuration change.
private RadarConfig oldConfig; private RadarConfig oldConfig;

View file

@ -27,6 +27,7 @@ import org.quartz.impl.StdSchedulerFactory;
import com.raytheon.rcm.config.Configuration; import com.raytheon.rcm.config.Configuration;
import com.raytheon.rcm.config.RadarConfig; import com.raytheon.rcm.config.RadarConfig;
import com.raytheon.rcm.config.Util; import com.raytheon.rcm.config.Util;
import com.raytheon.rcm.event.ConfigEvent;
import com.raytheon.rcm.event.OtrEvent; import com.raytheon.rcm.event.OtrEvent;
import com.raytheon.rcm.event.RadarEventAdapter; import com.raytheon.rcm.event.RadarEventAdapter;
import com.raytheon.rcm.event.RadarEventListener; 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.Log;
import com.raytheon.rcm.server.RadarServer; import com.raytheon.rcm.server.RadarServer;
/**
* Represents the standard configuration model of the AWIPS 2 RadarServer.
*
* <pre>
*
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* ...
* 2015-02-11 DR 17092 D. Friedman Handle NDM cronOTRs.xml updates.
* </pre>
*
*/
public class RequestScheduler extends RadarEventAdapter { public class RequestScheduler extends RadarEventAdapter {
// Quartz job detail properties // Quartz job detail properties
@ -46,8 +60,6 @@ public class RequestScheduler extends RadarEventAdapter {
private RadarServer radarServer; private RadarServer radarServer;
private OTRManager otrManager; private OTRManager otrManager;
private CronOTRConfiguration cronConfig;
private Scheduler scheduler; private Scheduler scheduler;
private Random random = new Random(); private Random random = new Random();
@ -70,16 +82,29 @@ public class RequestScheduler extends RadarEventAdapter {
OTRManager.class.getSimpleName()); OTRManager.class.getSimpleName());
return; 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 { try {
scheduler = StdSchedulerFactory.getDefaultScheduler(); scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.start(); scheduler.start();
} catch (SchedulerException e) { } 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; scheduler = null;
} }
if (scheduler != null) { if (scheduler != null) {
CronOTRConfiguration cronConfig = null;
InputStream ins = null; InputStream ins = null;
try { try {
ins = radarServer.getConfiguration().getDropInData("cronOTRs.xml"); ins = radarServer.getConfiguration().getDropInData("cronOTRs.xml");
@ -91,7 +116,7 @@ public class RequestScheduler extends RadarEventAdapter {
} catch (Exception e) { } catch (Exception e) {
Log.errorf("Error loading cron-OTR configuration: %s", e); Log.errorf("Error loading cron-OTR configuration: %s", e);
} }
if (cronConfig != null) { if (cronConfig != null) {
int jobIndex = 1; // Used to generate unique JobDetail names int jobIndex = 1; // Used to generate unique JobDetail names
for (CronOTR cronOTR : cronConfig.cronOTRList) { for (CronOTR cronOTR : cronConfig.cronOTRList) {
@ -104,7 +129,7 @@ public class RequestScheduler extends RadarEventAdapter {
cronOTR.getCron(), e); cronOTR.getCron(), e);
continue; continue;
} }
JobDetail jd = new JobDetail(name, null, CronOTRJob.class); JobDetail jd = new JobDetail(name, null, CronOTRJob.class);
JobDataMap jdm = jd.getJobDataMap(); JobDataMap jdm = jd.getJobDataMap();
jdm.put(SCHEDULER, this); jdm.put(SCHEDULER, this);
@ -112,10 +137,10 @@ public class RequestScheduler extends RadarEventAdapter {
try { try {
scheduler.scheduleJob(jd, trigger); scheduler.scheduleJob(jd, trigger);
} catch (Exception e) { } catch (Exception e) {
Log.errorf("Error schedule cron \"%s\": %s", Log.errorf("Error scheduling cron \"%s\": %s",
cronOTR.getCron(), e); cronOTR.getCron(), e);
} }
jobIndex++; jobIndex++;
} }
} }
@ -179,7 +204,13 @@ public class RequestScheduler extends RadarEventAdapter {
runCron(cronOTR); 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 * This class declared public only so that it can be instantiated by
* Quartz. * Quartz.

View file

@ -40,6 +40,8 @@ import com.raytheon.rcm.config.LinkType;
import com.raytheon.rcm.config.RadarConfig; import com.raytheon.rcm.config.RadarConfig;
import com.raytheon.rcm.config.StandardProductDistInfoDB; import com.raytheon.rcm.config.StandardProductDistInfoDB;
import com.raytheon.rcm.config.awips1.Awips1ConfigProvider; 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; 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. * 2014-02-03 DR 14762 D. Friedman Handle updated NDM config files.
* 2015-02-11 DR 17092 D. Friedman Handle NDM cronOTRs.xml updates.
* </pre> * </pre>
* *
*/ */
@ -62,6 +65,7 @@ public class StandardConfigProvider implements ConfigurationProvider {
private static String WSR_88D_PROD_LIST_NAME = "prodList.txt"; private static String WSR_88D_PROD_LIST_NAME = "prodList.txt";
private static String TDWR__PROD_LIST_NAME = "tdwrProdList.txt"; private static String TDWR__PROD_LIST_NAME = "tdwrProdList.txt";
private static String WMO_SITE_INFO_NAME = "wmoSiteInfo.txt"; private static String WMO_SITE_INFO_NAME = "wmoSiteInfo.txt";
private static String CRON_OTRS_NAME = "cronOTRs.xml";
private static JAXBContext jaxbContext; private static JAXBContext jaxbContext;
private static Unmarshaller u; private static Unmarshaller u;
@ -266,6 +270,12 @@ public class StandardConfigProvider implements ConfigurationProvider {
loadProdListDB(); loadProdListDB();
} else if (WMO_SITE_INFO_NAME.equals(name)) { } else if (WMO_SITE_INFO_NAME.equals(name)) {
updateRegionCode(); 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)) { } else if (Pattern.matches("^rps-.*OP.*$", name)) {
config.notifyNationalRpsLists(); config.notifyNationalRpsLists();
} else { } else {

View file

@ -32,6 +32,10 @@
<constructor-arg value="wmoSiteInfo.txt" /> <constructor-arg value="wmoSiteInfo.txt" />
<constructor-arg ref="radarServerNdmListener" /> <constructor-arg ref="radarServerNdmListener" />
</bean> </bean>
<bean factory-bean="ndmProc" factory-method="registerListener">
<constructor-arg value="cronOTRs.xml" />
<constructor-arg ref="radarServerNdmListener" />
</bean>
<camelContext id="rpgenvdata-camel" xmlns="http://camel.apache.org/schema/spring" errorHandlerRef="errorHandler"> <camelContext id="rpgenvdata-camel" xmlns="http://camel.apache.org/schema/spring" errorHandlerRef="errorHandler">