EIDSNotificationSender.java
- /*
- *
- */
- package gov.usgs.earthquake.distribution;
- import gov.usgs.earthquake.eidsutil.CorbaSender;
- import gov.usgs.util.Config;
- import gov.usgs.util.FileUtils;
- import java.io.File;
- import java.util.Date;
- import java.util.logging.Level;
- import java.util.logging.Logger;
- public class EIDSNotificationSender extends DefaultNotificationSender {
- /** Logging object. */
- private static final Logger LOGGER = Logger
- .getLogger(EIDSNotificationSender.class.getName());
- /** Property referencing directory where notifications are "sent". */
- public static final String EIDS_POLLDIR_PROPERTY = "serverPolldir";
- /** Default directory where notifications are sent. */
- public static final String EIDS_DEFAULT_POLLDIR = "polldir";
- /** Directory for Polldir send, in case CORBA send fails. */
- private File serverPolldir = null;
- /** CORBA sending object. */
- private CorbaSender corbaSender = null;
- @Override
- protected void sendNotification(final Notification notification) throws Exception {
- boolean sent = false;
- String message = URLNotificationXMLConverter.toXML((URLNotification) notification);
- if (serverHost != null && serverPort != null) {
- try {
- if (corbaSender == null) {
- // try to establish a connection
- corbaSender = new CorbaSender(serverHost, serverPort);
- }
- sent = corbaSender.sendMessage(message);
- if (sent) {
- LOGGER.fine("[" + getName()
- + "] sent notification to EIDS via CORBA");
- }
- } catch (Exception e) {
- LOGGER.log(Level.WARNING, "[" + getName()
- + "] unable to send notification using CORBA", e);
- }
- }
- if (!sent) {
- // when unable to send directly to corba service
- // send notification via EIDS polldir
- // create a uniqueish filename
- String filename = "out_" + new Date().getTime();
- File outFile = new File(serverPolldir, filename + ".xml");
- while (outFile.exists()) {
- filename = filename += "_1";
- outFile = new File(serverPolldir, filename + ".xml");
- }
- // is this atomic enough?, write then move may be better
- FileUtils.writeFile(outFile, message.getBytes());
- LOGGER.log(Level.INFO, "[" + getName()
- + "] sent notification to EIDS via " + outFile.getPath());
- }
- }
- public void configure(Config config) throws Exception {
- // let default notification sender configure itself
- super.configure(config);
- serverPolldir = new File(config.getProperty(EIDS_POLLDIR_PROPERTY,
- EIDS_DEFAULT_POLLDIR));
- LOGGER.config("[" + getName() + "] EIDS server polldir '"
- + serverPolldir + "'");
- }
- @Override
- public void shutdown() throws Exception {
- super.shutdown();
- if (corbaSender != null) {
- try {
- corbaSender.destroy();
- } catch (Exception e) {
- // ignore
- }
- corbaSender = null;
- }
- }
- @Override
- public void startup() throws Exception {
- if (serverHost != null && serverPort != null) {
- try {
- corbaSender = new CorbaSender(serverHost, serverPort);
- } catch (org.omg.CORBA.COMM_FAILURE e) {
- LOGGER.warning("[" + getName()
- + "] unable to connect to EIDS using CORBA");
- corbaSender = null;
- }
- }
- super.startup();
- }
- /** @return serverPolldir */
- public File getServerPolldir() {
- return serverPolldir;
- }
- /** @param serverPolldir file to set */
- public void setServerPolldir(File serverPolldir) {
- this.serverPolldir = serverPolldir;
- }
- }