Deploy GAE problema com SessionManager

Olá galera, estou tendo o seguinte problema:

Localmente em desenvolvimento eu não estou tento problema na execução da aplicação, mais quando faço o deploy da aplicação para o GAE, estou tendo o seguinte erro:

/login
java.lang.RuntimeException: java.io.NotSerializableException: com.google.apphosting.runtime.jetty.SessionManager
	at com.google.apphosting.runtime.jetty.SessionManager.serialize(SessionManager.java:387)
	at com.google.apphosting.runtime.jetty.SessionManager.createEntityForSession(SessionManager.java:364)
	at com.google.apphosting.runtime.jetty.SessionManager$AppEngineSession.save(SessionManager.java:164)
	at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:41)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
	at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
	at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:238)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
	at org.mortbay.jetty.Server.handle(Server.java:326)
	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
	at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
	at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76)
	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
	at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:135)
	at com.google.apphosting.runtime.JavaRuntime.handleRequest(JavaRuntime.java:261)
	at com.google.apphosting.base.RuntimePb$EvaluationRuntime$6.handleBlockingRequest(RuntimePb.java:8483)
	at com.google.apphosting.base.RuntimePb$EvaluationRuntime$6.handleBlockingRequest(RuntimePb.java:8481)
	at com.google.net.rpc.impl.BlockingApplicationHandler.handleRequest(BlockingApplicationHandler.java:24)
	at com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java:418)
	at com.google.net.rpc.impl.Server$RpcTask.runInContext(Server.java:572)
	at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:448)
	at com.google.tracing.TraceContext.runInContext(TraceContext.java:688)
	at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:326)
	at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:318)
	at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:446)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
	at java.lang.Thread.run(Thread.java:636)
Caused by: java.io.NotSerializableException: com.google.apphosting.runtime.jetty.SessionManager
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1173)
	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1526)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1491)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1409)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1167)
	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1526)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1491)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1409)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1167)
	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1526)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1491)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1409)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1167)
	at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:343)
	at java.util.ArrayList.writeObject(ArrayList.java:673)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:616)
	at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:962)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1478)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1409)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1167)
	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1526)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1491)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1409)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1167)
	at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:343)
	at java.util.HashMap.writeObject(HashMap.java:1018)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:616)
	at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:962)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1478)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1409)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1167)
	at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:343)
	at com.google.apphosting.runtime.jetty.SessionManager.serialize(SessionManager.java:384)

Alguém tem idéia do que pode ser?

Lendo a Excessão, vc provavelmente tá jogando um objeto na Session que não é serializável. Verifique se seus objetos que deseja colocar na sessão são implementam Serializable.

Precisando de curso no GAE, confira a Nuccitec.

Pois, troquei a classe que eu coloco na session, mais ainda assim continua com a mesma excessão.

@Component
@SessionScoped
public class SessionUser implements Serializable {

	private static final long serialVersionUID = -6463336570582686836L;
	private Long userId;
	private String userName;
	private Perfil userPerfil;
	private String userEmail;
	private Long empresaId;
	
	public SessionUser(HttpSession session){
		session.setAttribute("sessionUser", this);
	}

Não tem nada de mais nessa classe, e é a unica que eu coloco na session, bizarro =)

Um curso até que seria interessante, mais como eu moro em SC, fica meio dificil, :wink:

E esse tipo Perfil aí que está como atributo, é Serializible?

[]s

É um enum.

Eu tenho um projeto que também serializava um enum. Só que o projeto está em casa. Agora não estou lembrado se a enum tinha que implementar Serializable tb. Na dúvida, implementa na Enum pra ver o que acontece. Chegando em casa eu dou uma olhada no projeto mencionado.

[]s

Enum já é serializable.

davisnog, aparentemente tem algum problema de infra no GAE/J. Pelo stacktrace não aparece nenhuma classe da tua aplicação, apenas classe do GAE/J. Você está rodando localmente ou remoto?

garcia-jj, localmente funciona sem problemas, quando eu faço o deploy e tento acessar a aplicação que da o erro.

Eu pensei que fosse alguma coisa que eu estivesse jogando na Session, mais pela classe que eu postei anteriormente não tem nada de mais, então eu não faço idéia do que pode ser.

Pelo que eu ví isso realmente é um erro no GAE/J.

http://code.google.com/p/gwtupload/issues/detail?id=7

puts, e olha que eu estou usando a ultima versão do SDK 1.3.8.

Você pode disponibilizar o código do que está dando erro? Fiz uma busca no google e tem alguns comentários sobre esse erro acontecer por você esquecer de fechar algum objeto estilo entity-manager, jdo session, etc.

Bom, não sei se isso é bom ou é ruim, eu troquei o provider de Container do VRaptor para Spring, eu tinha testado isso com o Guice e com o PicoContainer, e os dois deu o mesmo erro.

Nesse caso eu tenho um objeto na Session, que setava ele conforme o codigo abaixo:

@SessionScoped @Component public class SessionUser{ public SessionUser(HttpSession session){ session.setAttribute("sessionUser", this); } }

Até onde eu sei, pico e guice não fazem da mesma forma que o Spring faz para manter os objetos na Session, dai comentei isso num tópico que foi até vc mesmo garcia-jj que abriu no google groups: http://groups.google.com/group/caelum-vraptor-dev/browse_thread/thread/bc70d9777a524401.

Dai o Lucas, deu a idéia de fazer como o codigo ai acima, jogar o objeto na session “na mão”.

A unica coisa que eu fiz até agora, foi tirar o contrutor da classe acima, e trocar o container pelo Spring. E funcionou.

:frowning: estou passando por esse mesmo agora.
já conseguiu algo davisnog?

obrigado.