NotificationListenerCallable.java
package gov.usgs.earthquake.distribution;
import java.util.concurrent.Callable;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* A Callable object for deferred listener notification.
*/
public class NotificationListenerCallable implements Callable<Void> {
private static final Logger LOGGER = Logger.getLogger(NotificationListenerCallable.class.getName());
private final NotificationListener listener;
private final NotificationEvent event;
/**
* Create an ExecutorListenerNotifierCallable.
*
* @param listener the listener to notify
* @param event the notification to send
*/
public NotificationListenerCallable(final NotificationListener listener, final NotificationEvent event) {
this.listener = listener;
this.event = event;
}
public Void call() throws Exception {
try {
listener.onNotification(event);
return null;
} catch (Exception e) {
LOGGER.log(Level.WARNING, "[" + event.getNotificationReceiver().getName() + "] listener (" + listener.getName()
+ ") threw exception, for product id = " + event.getNotification().getProductId(), e);
// but rethrow for outside handling
throw e;
}
}
}