Estou tentando fazer uma aplicação básica (CRUD) com VRaptor 3 na estrutura do Google App Engine.
Meu problema está quando tento salvar uma entidade a partir de dados de um form.
Acho que o VRaptor não está conseguindo instanciar e popular as propriedades da entidade em questão.
E isso só acontece se a aplicação estiver na App Engine.
Se eu instanciar e setar as propriedades manualmente funciona sem problemas.
Se alguém tiver alguma idéia ou enxergar algo que eu esteja fazendo de errado, por favor, dê uma luz.
Como você está compilando e empacotando a aplicação para enviar ao GAE?
Note que o vraptor3 usa o paranamer para saber o nome dos parametros para injeção dos valores. Se você compilar sem a opção de debug o paranamer não consegue saber o nome dos atributos do método e consecutivamente ele não consegue popular os valores.
Paulo, será que pode ser proposto uma alternativa a isso? Por exemplo uma annotation opcional como tinha a @Logic(parameters=“foo”) no vraptor2? No meu caso como minha app é comercial envio os fontes sem opções de debug.
Oi Garcia! é uma boa… mas lembre-se que a opcao de debug mode já é default de todas as principais IDEs e não tem custo de performance pra aplicação, alem de te livrar de mais anotacoes :). Mas realmente precisamos. nao quer colocar a issue pra gente no github?
Continuo tomando uma meia dúzia de tocos com estes meus testes.
Tenho conseguido resolver alguns…
Porém, o problema da vez já tá me enervando.
Tenho um controller: PersonsController.
Tenho um método list() neste controller.
Se eu fizer acesso direto à url do método (/persons/list), tudo funciona em paz.
Contudo, ao tentar fazer um redirecionamento para este mesmo método através de um Result recebo uma página em branco e no log uma exceção.
Código de redirecionamento:
Exceção:
javax.servlet.ServletException: java.lang.RuntimeException: java.lang.ClassNotFoundException: PersonsController$list$1545341940$2
at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:240)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
at org.mortbay.jetty.Server.handle(Server.java:313)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:506)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:830)
at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381)
at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:139)
at com.google.apphosting.runtime.JavaRuntime.handleRequest(JavaRuntime.java:239)
at com.google.apphosting.base.RuntimePb$EvaluationRuntime$6.handleBlockingRequest(RuntimePb.java:5135)
at com.google.apphosting.base.RuntimePb$EvaluationRuntime$6.handleBlockingRequest(RuntimePb.java:5133)
at com.google.net.rpc.impl.BlockingApplicationHandler.handleRequest(BlockingApplicationHandler.java:24)
at com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java:363)
at com.google.net.rpc.impl.Server$2.run(Server.java:814)
at com.google.tracing.LocalTraceSpanRunnable.run(LocalTraceSpanRunnable.java:56)
at com.google.tracing.LocalTraceSpanBuilder.internalContinueSpan(LocalTraceSpanBuilder.java:516)
at com.google.net.rpc.impl.Server.startRpc(Server.java:769)
at com.google.net.rpc.impl.Server.processRequest(Server.java:351)
at com.google.net.rpc.impl.ServerConnection.messageReceived(ServerConnection.java:437)
at com.google.net.rpc.impl.RpcConnection.parseMessages(RpcConnection.java:319)
at com.google.net.rpc.impl.RpcConnection.dataReceived(RpcConnection.java:290)
at com.google.net.async.Connection.handleReadEvent(Connection.java:436)
at com.google.net.async.EventDispatcher.processNetworkEvents(EventDispatcher.java:762)
at com.google.net.async.EventDispatcher.internalLoop(EventDispatcher.java:207)
at com.google.net.async.EventDispatcher.loop(EventDispatcher.java:101)
at com.google.net.rpc.RpcService.runUntilServerShutdown(RpcService.java:251)
at com.google.apphosting.runtime.JavaRuntime$RpcRunnable.run(JavaRuntime.java:396)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: PersonsController$list$1545341940$2
at com.google.apphosting.runtime.jetty.SessionManager.deserialize(SessionManager.java:389)
at com.google.apphosting.runtime.jetty.SessionManager.loadSession(SessionManager.java:307)
at com.google.apphosting.runtime.jetty.SessionManager.getSession(SessionManager.java:282)
at org.mortbay.jetty.servlet.AbstractSessionManager.getHttpSession(AbstractSessionManager.java:237)
at org.mortbay.jetty.Request.getSession(Request.java:998)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:192)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:238)
... 27 more
Caused by: java.lang.ClassNotFoundException: PersonsController$list$1545341940$2
at com.google.appengine.runtime.Request.process-260731df5c3104a8(Request.java)
at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at java.util.HashMap.readObject(Unknown Source)
at sun.reflect.GeneratedMethodAccessor14.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at com.google.apphosting.runtime.jetty.SessionManager.deserialize(SessionManager.java:385)
... 35 more
Alguma idéia para ajudar um cidadão desesperado como eu?
Dessa forma que o Lucas falou, voce ajuda a gente a descobrir esse possivel bug. Engracado que estamos rodando varias aplicacoes no GAE sem problemas… mas cloud ainda é uma caixinha de supresas nao?
Paulo, cadastro sim. Chegando em casa crio uma conta lá e adiciono a issue.
Como minha aplicação é comercial, para evitar engenharia reversa (ou pelo menos dificultar) os fontes irão para o cliente ofuscados. Sendo assim eu vou perder todos os nomes de atributos. Por isso minha sugestão.