[RESOLVIDO] Vraptor + envio de e-mails em thread separada

Olá,

Desenvolvi função de envio de e-mails usando a lib commons , no entanto preciso que o Envio de e-mails rode em outra thread, pois após a chamada de envio do e-mail a requisição demora a retornar, dando a impressão de estar lento.

Estou pensando em fazer uma fila , no entanto não sei que componente usar para ficar monitorando a fila de tempos e tempos ( em paralelo com os resources que já tenho ).

Gostaria de saber se o ideal é usar :
http://vraptor.caelum.com.br/pt/cookbook/job-scheduling-com-vraptor3-e-spring/

Ou tem alguma forma mais simples de fazer isto?

Preciso:
1- ao iniciar o vraptor , iniciar esta thread
2- mandar comandos para a thread para enviar e-mail ( durante um request )

dá uma olhada nesse plugin:

ele deve ser o suficiente pra vc.

Grande Lucas! No link tem toda a informação e exemplo que preciso, vou baixar o plugin.
Muito obrigado!

Só para complementar a solução, a quem precisar:

Pré-Requisito:

jar do plugin ( e suas dependências ), no caso precisei também do Quartz (http://quartz-scheduler.org/downloads/catalog)
https://github.com/wpivotto/vraptor-tasks/downloads

//classe para facilitar a utilização na fila

public class Email {
	
	private String mensagem;
	
	private String titulo;
	
	private List<Usuario> destinatario;
	
	private List<Usuario> responderA;
	
	private String assunto;
	
	public String getMensagem() {
		return mensagem;
	}
	public void setMensagem(String mensagem) {
		this.mensagem = mensagem;
	}
	public List<Usuario> getDestinatario() {
		return destinatario;
	}
	public void setDestinatario(List<Usuario> destinatario) {
		this.destinatario = destinatario;
	}
	public List<Usuario> getResponderA() {
		return responderA;
	}
	public void setResponderA(List<Usuario> responderA) {
		this.responderA = responderA;
	}

	public String getAssunto() {
		return assunto;
	}
	public void setAssunto(String assunto) {
		this.assunto = assunto;
	}
	public String getTitulo() {
		return titulo;
	}
	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}

}

Task simples para envio de emails:

//para iniciar junto com o vraptor
@ApplicationScoped
//taxa de verificação de pendencias na fila da task
@Scheduled(fixedRate = 80000)
public class EnviarEmails implements Task {

	private Queue<Email> filaEmail;

	public EnviarEmails() {
		filaEmail = new LinkedList<Email>();
	}

	public void execute() {
		try {
                        //envia emails enquanto tiver pendentes
			while(!filaEmail.isEmpty()) {
				// Remove email da fila
				Email email = filaEmail.poll();
                                //função estática de envio de emails, tenta enviar...
				EmailUtil.enviaEmail(email);
			}
		} catch (EmailException e) {
			e.printStackTrace();
		}
	}

         // função para incluir email na fila
	public void addEmail(Email novo) {
		this.filaEmail.add(novo);
	}
}

No controller:


@Resource
public class MeuController {

        //String retorna instancia quando necessário
	@Autowired
	private EnviarEmails taskEmail;

..


	@Get("/meu/finalizar/{idavaliacao}")
	public void finalizar(int idavaliacao) {
         ...
				Email novo = new Email();
				novo.setAssunto("Resultado enviado");
				novo.setTitulo("Resultado enviado para o coordenador:");
				novo.setDestinatario(destinos);
				novo.setMensagem(mensagem);

                                //adiciona na task o novo email
				taskEmail.addEmail(novo);
        }

Agradeço novamente ao Lucas, a solução é muito simples com este plugin e tem vários outros tipos de tasks bem uteis!