Problemas com envio de email Assincrono

2 respostas
khaleo

Pessoal,

Criei uma tela de cadastro onde ao ser finalizado, o usuario recebe um email de notificação para validar esse cadastro no sistema, funciona direitinho, o unico problema é q quando submete a pagina, a requisição demora um pouco pq tem q esperar o envio de email para ir pra outra tela.
Gostaria de enviar esse email de modo assincrono, onde o usuario nao precisasse esperar o envio pra ir pra outra tela, estou tentando usar o quartz.
Uso o jboss seam, segue uma parte do código:

@AutoCreate
@Scope(ScopeType.EVENT)
@Name(value = "emailService")
public class EmailService extends BaseService{
	
	private static final long serialVersionUID = 5244030103739409827L;
	@Asynchronous
	public void enviarEmail(@Duration long delay, String caminho) {
		try {
			renderer.render(caminho);
			FacesMessages.instance().add("Voce recebera um email de notificacao");			
		} catch (Exception e) {
			FacesMessages.instance().add("Falha ao enviar email: Mensagem: "+e.getMessage()+" Causa: "+e.getCause());
			
		}
	}
	

}

Na chamada eu faço o seguinte:

emailService.enviarEmail(500,"/faces/email/cadastroconfirmemail.xhtml");

Configurei meu components.xml

<async:quartz-dispatcher/>

Coloquei o jar do quartz na pasta lib
E o erro q me da é esse:

Caused by: java.lang.IllegalArgumentException: Group name cannot be empty.
	at org.quartz.JobDetail.setGroup(JobDetail.java:196)
	at org.quartz.JobDetail.<init>(JobDetail.java:122)
	at org.jboss.seam.async.QuartzDispatcher.scheduleWithQuartzService(QuartzDispatcher.java:132)
	at org.jboss.seam.async.QuartzDispatcher.scheduleWithQuartzServiceAndWrapExceptions(QuartzDispatcher.java:115)
	at org.jboss.seam.async.QuartzDispatcher.scheduleInvocation(QuartzDispatcher.java:101)
	at org.jboss.seam.async.QuartzDispatcher.scheduleInvocation(QuartzDispatcher.java:44)
	at org.jboss.seam.async.AsynchronousInterceptor.aroundInvoke(AsynchronousInterceptor.java:38)
	at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
	at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:107)
	at org.jboss.seam.intercept.JavaBeanInterceptor.interceptInvocation(JavaBeanInterceptor.java:166)
	at org.jboss.seam.intercept.JavaBeanInterceptor.invoke(JavaBeanInterceptor.java:102)
	at br.com.opengeo.eventus.servico.EmailService_$$_javassist_6.enviarEmail(EmailService_$$_javassist_6.java)
	at br.com.opengeo.eventus.acao.InscricaoBean.baixaInscricao(InscricaoBean.java:357)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:616)
	at org.jboss.seam.util.Reflections.invoke(Reflections.java:21)
	at org.jboss.seam.intercept.RootInvocationContext.proceed(RootInvocationContext.java:31)
	at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:56)
	at org.jboss.seam.transaction.RollbackInterceptor.aroundInvoke(RollbackInterceptor.java:31)
	at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
	at org.jboss.seam.core.BijectionInterceptor.aroundInvoke(BijectionInterceptor.java:46)
	at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
	at org.jboss.seam.core.ConversationInterceptor.aroundInvoke(ConversationInterceptor.java:56)
	at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
	at org.jboss.seam.core.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:42)
	at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
	at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:107)
	at org.jboss.seam.intercept.JavaBeanInterceptor.interceptInvocation(JavaBeanInterceptor.java:166)
	at org.jboss.seam.intercept.JavaBeanInterceptor.invoke(JavaBeanInterceptor.java:102)
	at br.com.opengeo.eventus.acao.InscricaoBean_$$_javassist_4.baixaInscricao(InscricaoBean_$$_javassist_4.java)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:616)
	at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:329)
	at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:274)
	at org.jboss.el.parser.AstMethodSuffix.getValue(AstMethodSuffix.java:59)
	at org.jboss.el.parser.AstMethodSuffix.invoke(AstMethodSuffix.java:65)
	at org.jboss.el.parser.AstValue.invoke(AstValue.java:96)
	at org.jboss.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
	at com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68)
	at com.sun.facelets.el.LegacyMethodBinding.invoke(LegacyMethodBinding.java:69)
	... 49 more

Será q é algum problema na configuração do quartz ?
Q grupo é esse q ele diz estar vazio?
Alguem teria um exemplo de envio de emails assincrono com o quartz?
Desde já agradeço a ajuda !
Valeu !

2 Respostas

khaleo

Só lembrando q se alguem tiver uma outra forma de envio de email de forma assincrona, a idéia tb será bem vinda…

educorso

Estou com o mesmo problema, mas nem usando uma thread simples, que é o default do seam quando se usa @Asynchronous, estou conseguindo.

Preciso desvincular o envio de email, pois alem da demora, se der algum erro no envio, a minha tela de finalização de compra abre com erros.

Se alguém tiver algum exemplo disso funcionando ou outra forma de envio de email de forma assincrona, por favor de um help.

Valeu

Criado 24 de setembro de 2009
Ultima resposta 22 de jul. de 2010
Respostas 2
Participantes 2