package com.venky.swf.plugins.mail.core;
import java.util.LinkedList;
import org.codemonkey.simplejavamail.Email;
//import org.codemonkey.simplejavamail.Mailer;
//import org.codemonkey.simplejavamail.TransportStrategy;
import com.venky.swf.routing.Config;
public class AsyncMailer extends Thread{
private static AsyncMailer _mailer = null;
public static AsyncMailer instance(){
if (_mailer != null){
return _mailer;
}
synchronized (AsyncMailer.class){
if (_mailer == null){
_mailer = new AsyncMailer();
_mailer.start();
}
}
return _mailer;
}
private Mailer mailer = null;
private LinkedList<Email> emails = new LinkedList<Email>();
private AsyncMailer() {
mailer = MailerFactory.instance().getMailer(Config.instance().getProperty("swf.sendmail.protocol"));
setDaemon(false);
}
public void addEmail(Email email){
synchronized (emails) {
emails.add(email);
emails.notifyAll();
}
}
public Email next(){
synchronized (emails) {
waitIfQueueIsEmpty();
return emails.remove();
}
}
public void waitIfQueueIsEmpty(){
synchronized (emails) {
while (emails.isEmpty()){
try {
emails.wait();
}catch(InterruptedException ex){
//
}
}
}
}
public void run(){
Email email = null;
while ((email = next()) != null ){
mailer.sendMail(email);
}
}
}