Problema com interceptadores [Resolvido]

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 ?

se vc tem um interceptor de transação (ou usa o do VRaptor) vc precisa marcar o ErrorIntercpetor como after=TransactionInterceptor.

se vc estiver usando o do vraptor o nome é HibernateTransactionInterceptor ou JPATransactionINterceptor

a sequência não está muito bem documentada ainda =(

[quote=Lucas Cavalcanti]se vc tem um interceptor de transação (ou usa o do VRaptor) vc precisa marcar o ErrorIntercpetor como after=TransactionInterceptor.

se vc estiver usando o do vraptor o nome é HibernateTransactionInterceptor ou JPATransactionINterceptor[/quote]

Hum agora rolou , como uso o pacote do hibernate ficou depois do HibernateTransactionInterceptor