Vaadin 7.1 + GAE

Hi guys,

I am trying to deploy a simple app created with maven archetype in GAE. I tried to follow the book (https://vaadin.com/book/-/page/advanced.gae.html) and also read some messages in the forum but I am still getting an exception.

Seems to be something related with the VaadinSession fetching, but I am not sure .

VaadinSession ctx = getApplicationContext(request, memcache);

Can someone give me a hint?

The stacktrace:

com.vaadin.server.GAEVaadinServlet service: An exception occurred while servicing request.
java.lang.NullPointerException
	at com.vaadin.server.VaadinSession.refreshLock(VaadinSession.java:439)
	at com.vaadin.server.VaadinSession.storeInSession(VaadinSession.java:430)
	at com.vaadin.server.GAEVaadinServlet.getApplicationContext(GAEVaadinServlet.java:353)
	at com.vaadin.server.GAEVaadinServlet.service(GAEVaadinServlet.java:251)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
	at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:125)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
	at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:35)
	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:266)
	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:146)
	at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:439)
	at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:446)
	at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:453)
	at com.google.tracing.TraceContext.runInContext(TraceContext.java:740)
	at com.google.tracing.TraceContext$DoInTraceContext.runInContext(TraceContext.java:717)
	at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:308)
	at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:300)
	at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:450)
	at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251)
	at java.lang.Thread.run(Thread.java:722)

Thanks!
Mauro

The thing is that currently there are quite a few bugs related to Vaadin 7 + GAE. Mainly around the GAEVaadinServlet, Session management, …
Link to the ticket query for V7.1.1
(there you can browse through some of the tickets related to GAE).

That’s why now it’s not that easy to see if that’s a known problem with the gaeservlet, a not yet reported issue or if it is actually a problem from your code/setup which can be fixed.

You could try looking through the tickets to see if one sounds like your problem (might be because the servlet currently cleans the session after every request
#12209
). If not, chances are it’s another, not yet reported, bug. In that case either wait until someone with more knowledge on that topic stumbles over this forum thread and confirms that this is a bug or that it isn’t and can be fixed, or directly create a ticket.

As Marius said, GAE support is broken in 7.1.0 and there will be several fixes for it in 7.1.1. You should at least wait until it is out.

Excellent guys,
I was checking the ticket (http://dev.vaadin.com/ticket/12209) and seems to be related with that one. I will wait for the 7.1.1

Thanks for replying.
Mauro

Hi Guys,

Quick update, I changed the vaadin version on my POM file to point to the latest snapshot version and the problem on GAE with the session gone.

Is working properly now.

Thanks!

Vaadin 7.1.1 is also available since yesterday if you prefer it over snapshots.

I was getting the same error so I upgraded to 7.1.3. Now I seem to be stuck on a serialization problem a little further down the GAEVaadinServlet.service call. After inspecting the Vaadin source, it looks like it is trying to serialize a class loader somewhere inside the EventRouter and LegacyCommunicationManager in the VaadinSession. Any one have any thoughts on this?

Stack trace:


com.vaadin.server.GAEVaadinServlet service: Not serializable!
java.io.NotSerializableException: com.google.apphosting.runtime.security.UserClassLoader
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1197)
	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1545)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1510)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1433)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1191)
	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1545)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1510)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1433)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1191)
	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1545)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1510)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1433)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1191)
	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1545)
	at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:455)
	at com.vaadin.event.ListenerMethod.writeObject(ListenerMethod.java:88)
	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:601)
	at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:962)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1497)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1433)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1191)
	at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:363)
	at java.util.HashSet.writeObject(HashSet.java:284)
	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:601)
	at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:962)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1497)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1433)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1191)
	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1545)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1510)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1433)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1191)
	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1545)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1510)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1433)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1191)
	at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:363)
	at com.vaadin.server.GAEVaadinServlet.service(GAEVaadinServlet.java:260)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
	at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:125)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
	at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:35)
	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:266)
	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:146)
	at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:439)
	at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:435)
	at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:442)
	at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:186)
	at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:306)
	at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:298)
	at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:439)
	at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251)
	at java.lang.Thread.run(Thread.java:722)

Does anybody solved this issue?