Important Notice - Forums is archived
To simplify things and help our users to be more productive, we have archived the current forum and focus our efforts on helping developers on Stack Overflow. You can post new questions on Stack Overflow or join our Discord channel.

Vaadin lets you build secure, UX-first PWAs entirely in Java.
Free ebook & tutorial.
IllegalStateException when logging in after crash/Internal Error
Hello,
I have the following situation.
I have an application which is quite similar in design to the Roo generated application in chapter 14 of vaadin.com/book and running on Google App Engine using Objectify for data access. When the application experiences an Internal Error (a missing GAE index for example) the user is shown the standard error notification and is directed back to the login page. When the user tries to log in again an IllegalStateException (copied below) it thrown. After a /?restartApplication the user can log in successfully.
Any help would be much appreciated :)
com.vaadin.Application terminalError: Terminal error:
java.lang.IllegalStateException: Two paintables (NativeButton,NativeButton) have been assigned the same id: Calendar
at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.getPaintableId(AbstractCommunicationManager.java:2025)
at com.vaadin.terminal.gwt.server.JsonPaintTarget.startTag(JsonPaintTarget.java:693)
at com.vaadin.ui.AbstractComponent.paint(AbstractComponent.java:735)
at com.vaadin.ui.AbsoluteLayout.paintContent(AbsoluteLayout.java:587)
at com.vaadin.ui.AbstractComponent.paint(AbstractComponent.java:781)
at com.vaadin.ui.CssLayout.paintContent(CssLayout.java:203)
at com.vaadin.ui.AbstractComponent.paint(AbstractComponent.java:781)
at com.vaadin.ui.Panel.paintContent(Panel.java:269)
at com.vaadin.ui.AbstractComponent.paint(AbstractComponent.java:781)
at com.vaadin.ui.AbstractOrderedLayout.paintContent(AbstractOrderedLayout.java:187)
at com.vaadin.ui.AbstractComponent.paint(AbstractComponent.java:781)
at com.vaadin.ui.AbstractSplitPanel.paintContent(AbstractSplitPanel.java:235)
at com.vaadin.ui.AbstractComponent.paint(AbstractComponent.java:781)
at com.vaadin.ui.CustomComponent.paintContent(CustomComponent.java:133)
at com.vaadin.ui.AbstractComponent.paint(AbstractComponent.java:781)
at com.vaadin.ui.Panel.paintContent(Panel.java:269)
at com.vaadin.ui.Window.paintContent(Window.java:641)
at com.vaadin.ui.AbstractComponent.paint(AbstractComponent.java:781)
at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.writeUidlResponce(AbstractCommunicationManager.java:1046)
at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.paintAfterVariableChanges(AbstractCommunicationManager.java:927)
at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.doHandleUidlRequest(AbstractCommunicationManager.java:794)
at com.vaadin.terminal.gwt.server.CommunicationManager.handleUidlRequest(CommunicationManager.java:296)
at com.vaadin.terminal.gwt.server.AbstractApplicationServlet.service(AbstractApplicationServlet.java:501)
at com.vaadin.terminal.gwt.server.GAEApplicationServlet.service(GAEApplicationServlet.java:241)
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:102)
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:249)
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$RequestRunnable.run(JavaRuntime.java:446)
at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:449)
at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:455)
at com.google.tracing.TraceContext.runInContext(TraceContext.java:695)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:333)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:325)
at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:453)
at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251)
at java.lang.Thread.run(Thread.java:679)
david maccallum: I have an application which is quite similar in design to the Roo generated application in chapter 14 of vaadin.com/book and running on Google App Engine using Objectify for data access. When the application experiences an Internal Error (a missing GAE index for example) the user is shown the standard error notification and is directed back to the login page. When the user tries to log in again an IllegalStateException (copied below) it thrown. After a /?restartApplication the user can log in successfully.
Any help would be much appreciated :)
com.vaadin.Application terminalError: Terminal error:
java.lang.IllegalStateException: Two paintables (NativeButton,NativeButton) have been assigned the same id: Calendar
at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.getPaintableId(AbstractCommunicationManager.java:2025)
This is strange.
First check your calls to AbstractComponent.setDebugId(...), maybe you are assigning the same id for two components. If that is not the issue, maybe the problem is related to how sessions are serialized and deserialized in GAE, and whether different servers process consecutive requests without data having been propagated correctly.
Thanks Henri,
I appreciate the feedback. I will investigate and update the post once I have solved the issue.