Preciso gerar uns diagramas de sequencia e vou usar o MaintainJ. Já utilizei em outra situação e gostei bastante.
Porém, agora está dando erro junto com o VRaptor. Se inicio o servidor sem o MaintainJ, funciona perfeito. Quando inicio o servidor com o MaintainJ, me da o seguinte erro onde existe result.redirectTo(QualquerClasse.class).algumMetodo();:
br.com.caelum.vraptor.InterceptionException: an exception was raised while executing resource method
br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:86)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:77)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.util.hibernate.HibernateTransactionInterceptor.intercept(HibernateTransactionInterceptor.java:45)
br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:81)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70)
br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56)
br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
root cause
java.lang.VerifyError: (class: sigo/controller/OrcamentoController$$EnhancerByCGLIB$$edff75f3, method: init$_aroundBody16 signature: (Lsigo/controller/OrcamentoController$$EnhancerByCGLIB$$edff75f3;Lsigo/model/SessionInfo;Lsigo/model/ApplicationInfo;Lbr/com/caelum/vraptor/Result;Lorg/aspectj/lang/JoinPoint;)V) Unable to pop operand off an empty stack
sun.reflect.GeneratedSerializationConstructorAccessor27.newInstance(Unknown Source)
java.lang.reflect.Constructor.newInstance(Unknown Source)
org.objenesis.instantiator.sun.SunReflectionFactoryInstantiator.newInstance(SunReflectionFactoryInstantiator.java:40)
org.objenesis.ObjenesisBase.newInstance(ObjenesisBase.java:58)
br.com.caelum.vraptor.proxy.ObjenesisProxifier.proxify(ObjenesisProxifier.java:32)
br.com.caelum.vraptor.view.DefaultLogicResult.redirectTo(DefaultLogicResult.java:108)
br.com.caelum.vraptor.core.AbstractResult.redirectTo(AbstractResult.java:31)
sigo.controller.LoginController.login_aroundBody4(LoginController.java:43)
sigo.controller.LoginController$AjcClosure5.run(LoginController.java:1)
com.maintainj.aspect.ExecutionAspect.ajc$around$com_maintainj_aspect_ExecutionAspect$1$a6875b6bproceed(ExecutionAspect.aj:1)
com.maintainj.aspect.ExecutionAspect.ajc$around$com_maintainj_aspect_ExecutionAspect$1$a6875b6b(ExecutionAspect.aj:42)
sigo.controller.LoginController.login(LoginController.java:33)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:57)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:77)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.util.hibernate.HibernateTransactionInterceptor.intercept(HibernateTransactionInterceptor.java:45)
br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:81)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70)
br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56)
br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
Na verdade, acho que o problema está no meu interceptor. Porém é simples, segue minha classe:
RequestInterceptor.java
package sigo.interceptor;
import org.hibernate.Session;
import sigo.controller.LoginController;
import sigo.model.ApplicationInfo;
import sigo.model.SessionInfo;
import sigo.model.gestao.PerfilAcesso;
import sigo.model.orcamento.Orcamento;
import sigo.utils.HibernateUtils;
import br.com.caelum.vraptor.InterceptionException;
import br.com.caelum.vraptor.Intercepts;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.core.InterceptorStack;
import br.com.caelum.vraptor.interceptor.Interceptor;
import br.com.caelum.vraptor.ioc.RequestScoped;
import br.com.caelum.vraptor.resource.ResourceMethod;
@RequestScoped
@Intercepts
public class RequestInterceptor implements Interceptor
{
private final Result result;
private final ApplicationInfo applicationInfo;
private final SessionInfo sessionInfo;
public RequestInterceptor(Session session, ApplicationInfo applicationInfo, Result result, SessionInfo sessionInfo)
{
this.applicationInfo = applicationInfo;
this.result = result;
this.sessionInfo = sessionInfo;
HibernateUtils.setCurrentSession(session);
}
@Override
public boolean accepts(ResourceMethod arg0)
{
return !(arg0.getMethod().isAnnotationPresent(NotToIntercept.class));
}
@Override
public void intercept(InterceptorStack stack, ResourceMethod method,
Object instance) throws InterceptionException
{
if(sessionInfo.getUsuario() == null)
{
result.redirectTo(LoginController.class).index();
}
else
{
result.include("methodName", method.getMethod().getName());
result.include("className", method.getResource().getType().getSimpleName());
result.include("DIRETOR_OPERACOES", PerfilAcesso.DIRETOR_OPERACOES);
result.include("DIRETOR_PROJETO", PerfilAcesso.DIRETOR_PROJETO);
result.include("DIRETOR_FINANCEIRO", PerfilAcesso.DIRETOR_FINANCEIRO);
result.include("GERENTE_PROJETO", PerfilAcesso.GERENTE_PROJETO);
result.include("FUNCIONARIO", Orcamento.FUNCIONARIO);
result.include("CARGO", Orcamento.CARGO);
result.include("applicationInfo", applicationInfo);
stack.next(method, instance);
}
}
}
Estou fazendo uns testes pra tentar descobrir o que é, mas se alguém tiver alguma sugestão é muito bem-vinda =)
abs.
EDITADO***
Acabei de testar que dessa forma fuciona:
Ou seja, se tentar dar redirectTo apontando a classe e depois o método, dá algum conflito com o MaintainJ. Se colocar string, funciona.
Sugestões?