package com.hubspot.blazar.queue; import com.google.common.eventbus.EventBus; import com.google.common.eventbus.SubscriberExceptionContext; import com.google.common.eventbus.SubscriberExceptionHandler; import com.hubspot.blazar.data.dao.QueueItemDao; import com.hubspot.blazar.data.queue.QueueItem; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.inject.Inject; import javax.inject.Singleton; import java.util.Set; @Singleton public class SqlEventBus extends EventBus { private final QueueItemDao queueItemDao; @Inject public SqlEventBus(QueueItemDao queueItemDao, final Set<Object> erroredItems) { super(new SubscriberExceptionHandler() { private final Logger LOG = LoggerFactory.getLogger("SubscriberExceptionHandler"); @Override public void handleException(Throwable exception, SubscriberExceptionContext context) { String className = context.getSubscriber().getClass().getSimpleName(); String methodName = context.getSubscriberMethod().getName(); LOG.error("Error calling subscriber method {}.{}", className, methodName, exception); erroredItems.add(context.getEvent()); } }); this.queueItemDao = queueItemDao; } @Override public void post(Object event) { queueItemDao.insert(new QueueItem(event)); } public void dispatch(Object event) { super.post(event); } }