Ola pessoal, existe alguma maneira de capturar as exeptions geradas pela aplicacao usando seam 2.2 e enviar estas exceptions “descricao” por email?
Resolvi assim:
Um componente seam para interceptar as exception
package br.com.inferno.mbean;
import java.io.Serializable;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Observer;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.contexts.Contexts;
import org.jboss.seam.exception.Exceptions;
import org.jboss.seam.faces.FacesMessages;
import org.jboss.seam.faces.Renderer;
@SuppressWarnings("serial")
@Name("error")
@Scope(ScopeType.APPLICATION)
public class ErrorAction extends Exceptions implements Serializable {
@In
private Renderer renderer;
@In(value = "org.jboss.seam.handledException", required = false)
public Exception exception;
@In
FacesMessages facesMessages;
@Observer(value = "org.jboss.seam.exceptionHandled")
public void sendMail() {
sendErrorMail(exception, "Exception no ambiente de produção.");
facesMessages.add("Ocorreram erros ao executar a operação.");
}
public void sendErrorMail(Throwable throwable, String message) {
StringBuffer err = new StringBuffer();
if (throwable != null) {
err.append(throwable.getLocalizedMessage()).append("\n");
err.append(throwable.getMessage()).append("\n");
for (StackTraceElement elem : throwable.getStackTrace()) {
err.append(elem.getFileName()).append(":")
.append(elem.getLineNumber()).append(":")
.append(elem.getClassName()).append(":")
.append(elem.getMethodName()).append("\n");
}
}
Contexts.getEventContext().set("subject", message);
Contexts.getEventContext().set("body", err.toString());
Contexts.getEventContext().set("to", "leandrog@inferno.com.br");
renderer.render("/acaoMail.xhtml");
}
}
e a pagina para envio de email
<?xml version="1.0" encoding="ISO-8859-1" ?>
<m:message xmlns="http://www.w3.org/1999/xhtml"
xmlns:m="http://jboss.com/products/seam/mail"
xmlns:h="http://java.sun.com/jsf/html">
<m:subject>
#{subject}
</m:subject>
<p>
<m:body>
#{body}
</m:body>
</p>
</m:message>