package com.github.windbender.service;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import javax.mail.MessagingException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.github.windbender.WLCDMServerConfiguration;
import com.yammer.dropwizard.lifecycle.Managed;
public class AsyncEmailSender implements MessageSender, Managed {
Logger log = LoggerFactory.getLogger(AsyncEmailSender.class);
ExecutorService executorService = null;
WLCDMServerConfiguration configuration;
private MessageSender messageSender;
public AsyncEmailSender(WLCDMServerConfiguration configuration, MessageSender messageSender) {
this.configuration = configuration;
this.messageSender = messageSender;
}
@Override
public void sendMessage(final MessageCreator mc) throws MessagingException {
if(executorService == null) throw new IllegalArgumentException("WHat, you didn't start the thread pool executor");
log.info("queueing message to send from "+mc);
executorService.execute(new Runnable() {
public void run() {
try {
messageSender.sendMessage(mc);
} catch (MessagingException e) {
log.error("Unable to send message",e);
}
}
});
log.info("message is queued");
}
@Override
public void start() throws Exception {
executorService = Executors.newFixedThreadPool(10);
}
@Override
public void stop() throws Exception {
executorService.shutdown();
}
}