package org.sef4j.core.helpers.senders; import java.util.Collection; import org.sef4j.core.api.EventSender; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * immutable composite of EventSender<T> to send events to several EventSender * this class is immutable (so also thread-safe!) * * * <PRE> * new CompositeEventSender(targets) * * +------------+ * sendEvent(..) | | target[0].sendEvent(..) * ----------> | targets[] | ----------> * +------------+ target[1].sendEvent(..) * ----------> * ... * target[N-1].sendEvent(..) * ----------> * </PRE> * @param <T> */ public class MutableCompositeEventSender<T> implements EventSender<T> { private static final Logger LOG = LoggerFactory.getLogger(MutableCompositeEventSender.class); private final EventSender<T>[] targets; // ------------------------------------------------------------------------ public MutableCompositeEventSender(EventSender<T>[] targets) { this.targets = targets; } // ------------------------------------------------------------------------ public void sendEvent(T event) { final EventSender<T>[] to = targets; final int len = to.length; for (int i = 0; i < len; i++) { try { to[i].sendEvent(event); } catch(Exception ex) { LOG.error("Failed to sendEvent to " + to[i] + ", ex:" + ex.getMessage() + " ... ignore, no rethrow!"); } } } public void sendEvents(Collection<T> events) { final EventSender<T>[] to = targets; final int len = to.length; for (int i = 0; i < len; i++) { try { to[i].sendEvents(events); } catch(Exception ex) { LOG.error("Failed to sendEvents to " + to[i] + ", ex:" + ex.getMessage() + " ... ignore, no rethrow!"); } } } }