Pessoal estive dando uma atualizada nos códigos fontes de minha aplicação e me deparei com a depreciação de InterceptorSequence no modelo antigo eu tinha :
@SuppressWarnings("deprecation")
@Intercepts
public class MySequenceInterceptor implements InterceptorSequence {
@SuppressWarnings("unchecked")
public Class<? extends Interceptor>[] getSequence() {
return new Class[] { ErrorInterceptor.class,
AuthenticationInterceptor.class, RestrictInterceptor.class };
}
}
e na documentação no modelo novo a transição ficaria
@Intercepts
public class ErrorInterceptor implements Interceptor {
private Result result;
private HttpServletRequest request;
private PainelEmailRepositoryImpl repositoryPainelEmail;
private PainelLogRepositoryImpl repositoryPainelLog;
private ConfiguracaoRepositoryImpl repositoryConfiguracao;
private static Logger logger = Logger.getLogger(ErrorInterceptor.class);
@Inject
public ErrorInterceptor(Result result, HttpServletRequest request,
PainelLogRepositoryImpl repositoryPainelLog,
ConfiguracaoRepositoryImpl repositoryConfiguracao,
PainelEmailRepositoryImpl repositoryPainelEmail) {
this.request = request;
this.result = result;
this.repositoryPainelEmail = repositoryPainelEmail;
this.repositoryPainelLog = repositoryPainelLog;
this.repositoryConfiguracao = repositoryConfiguracao;
}
public boolean accepts(ResourceMethod method) {
return true;
}
public void intercept(InterceptorStack stack, ResourceMethod method,
Object resourceInstance) {
try {
stack.next(method, resourceInstance);
} catch (InterceptionException i) {
if (i.getMessage().contains("ClientAbortException"))
logger.warn("ClientAbortException => "
+ request.getRequestURL() + " => " + i.getMessage());
else {
PrintWriter p = null;
try {
StringWriter w = new StringWriter();
p = new PrintWriter(w);
i.printStackTrace(p);
String requestedUrl = request.getRequestURL().toString();
String exception = w.toString();
StringBuilder params = new StringBuilder("{");
Enumeration<String> en = request.getParameterNames();
while (en.hasMoreElements()) {
String paramName = en.nextElement();
params.append("<br/> " + paramName + " : "
+ request.getParameter(paramName) + ",");
}
params.append("}");
repositoryPainelLog.saveLog(Sistema.SEGURANCA,exception, requestedUrl,
params.toString());
repositoryPainelEmail.sendMail(Sistema.SEGURANCA,repositoryConfiguracao
.getVariableValue(Sistema.SEGURANCA,"SYSTEM", "EMAIL_SUPPORT"),
"ERRO EXECUÇÃO SEGURANCA", "URL : " + requestedUrl
+ "<hr/>" + exception + "<hr/>" + params);
} catch (Exception e1) {
e1.printStackTrace();
} finally {
if (p != null)
p.close();
}
result.use(Results.logic()).redirectTo(AppController.class)
.error();
}
}
}
}
@Intercepts(after=ErrorInterceptor.class)
public class AuthenticationInterceptor implements Interceptor {
.
.
.
}
@Intercepts(after=AuthenticationInterceptor.class)
public class RestrictInterceptor implements Interceptor {
.
.
.
}
O primeiro interceptador é uma rotina pra tratamento de exception recuperavel de qualquer tipo que ocorrer no sistema , dai eu guardo isso em banco de dados e guardo numa fila de disparo de email tb em banco de dados .
Pelo que vi quando usava o mysequence interceptor ele se recuperava e guardava corretamente no banco tanto como o log quanto o email a disparar , só que trocando para esse novo modelo de interceptação ele parou de guardar , creio eu que tenha a ver com a sequencia , talvez eu esteja rodando depois do hibernate que sofre uma exception e faz um rollback no banco dai o problema que ele parou de guardar …
Não achei na documentação a sequencia de interceptors defaults que o vraptor executa e pra que servem (seria legal documentar isso se não houver) e não sei antes de quem o meu tem que rodar … alguma luz ?