IndexerListenerCallable.java

  1. package gov.usgs.earthquake.indexer;

  2. import gov.usgs.earthquake.distribution.ProductTracker;

  3. import java.util.concurrent.Callable;
  4. import java.util.logging.Level;
  5. import java.util.logging.Logger;

  6. /**
  7.  * A Callable object for deferred indexer listener notification.
  8.  */
  9. public class IndexerListenerCallable implements Callable<Void> {

  10.     /** Logger object */
  11.     public static final Logger LOGGER = Logger
  12.             .getLogger(IndexerListenerCallable.class.getName());

  13.     private final IndexerListener listener;
  14.     private final IndexerEvent event;

  15.     /**
  16.      * Get a callable object for deferred listener notification.
  17.      *
  18.      * @param listener
  19.      *            the listener to notify
  20.      * @param event
  21.      *            the notification to send
  22.      */
  23.     public IndexerListenerCallable(final IndexerListener listener,
  24.             final IndexerEvent event) {
  25.         this.listener = listener;
  26.         this.event = event;
  27.     }

  28.     public Void call() throws Exception {
  29.         try {
  30.             listener.onIndexerEvent(event);
  31.             return null;
  32.         } catch (Exception e) {
  33.             ProductSummary summary = event.getSummary();

  34.             LOGGER.log(Level.WARNING, "["
  35.                     + event.getIndexer().getName()
  36.                     + "] listener ("
  37.                     + listener.getName()
  38.                     + ") threw exception"
  39.                     + (summary != null ? ", for product id="
  40.                             + summary.getId().toString() : ""), e);

  41.             // track exception
  42.             if (summary != null) {
  43.                 new ProductTracker(summary.getTrackerURL()).exception(listener
  44.                         .getClass().getCanonicalName(), summary.getId(), e);
  45.             }

  46.             // but rethrow for outside handling
  47.             throw e;
  48.         }
  49.     }

  50. }