scaladin
scaladin copied to clipboard
ScaladinUIProvider.createScaladinUiInstance mistakenly called twice?
Hi, can somebody help me?
Is there a possibility that ScaladinUIProvider.createScaladinUiInstance is mistakenly called twice? (by Vaadin or by Scaladin)
My setup is Scaladin 3.0.0, Vaadin 7.1.14, Jetty 8.1.15.v20140411, Atmosphere 2.1.3, Scala 2.10.4.
Here is how I produce stack trace from my class ScaladinUIProvider
(that extends vaadin.scala.server.ScaladinUIProvider
):
protected override def createScaladinUiInstance(e: UIProviderEvent): UI = {
new Exception().printStackTrace
prepareTestUI(e)
}
Surprisely I discovered that this method is called twice, this is first stack trace:
java.lang.Exception
at bd.nexus.monitoring.core.ui.ScaladinUIProvider.createScaladinUiInstance(ScaladinUIProvider.scala:40)
at vaadin.scala.server.ScaladinUIProvider$$anonfun$getConfigurationUiInstance$1.apply(ScaladinUIProvider.scala:26)
at vaadin.scala.server.ScaladinUIProvider$$anonfun$getConfigurationUiInstance$1.apply(ScaladinUIProvider.scala:26)
at scala.collection.mutable.MapLike$class.getOrElseUpdate(MapLike.scala:189)
at scala.collection.mutable.AbstractMap.getOrElseUpdate(Map.scala:91)
at vaadin.scala.server.ScaladinUIProvider.getConfigurationUiInstance(ScaladinUIProvider.scala:26)
at vaadin.scala.server.ScaladinUIProvider.vaadin$scala$server$ScaladinUIProvider$$loadConfigValue(ScaladinUIProvider.scala:33)
at vaadin.scala.server.ScaladinUIProvider$$anonfun$getConfigurationValue$1.apply(ScaladinUIProvider.scala:28)
at scala.collection.mutable.MapLike$class.getOrElseUpdate(MapLike.scala:189)
at scala.collection.mutable.AbstractMap.getOrElseUpdate(Map.scala:91)
at vaadin.scala.server.ScaladinUIProvider.getConfigurationValue(ScaladinUIProvider.scala:28)
at vaadin.scala.server.ScaladinUIProvider.getTheme(ScaladinUIProvider.scala:51)
at com.vaadin.server.BootstrapHandler.getThemeName(BootstrapHandler.java:575)
at com.vaadin.server.communication.ServletBootstrapHandler.getThemeName(ServletBootstrapHandler.java:44)
at com.vaadin.server.BootstrapHandler.findAndEscapeThemeName(BootstrapHandler.java:585)
at com.vaadin.server.BootstrapHandler$BootstrapContext.getThemeName(BootstrapHandler.java:105)
at com.vaadin.server.BootstrapHandler.setupMainDiv(BootstrapHandler.java:366)
at com.vaadin.server.BootstrapHandler.synchronizedHandleRequest(BootstrapHandler.java:188)
at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:37)
at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1387)
at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:238)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:684)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:503)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:429)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
at org.eclipse.jetty.server.Server.handle(Server.java:366)
at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:494)
at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:971)
at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1033)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:644)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:696)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:53)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
and this is second one:
java.lang.Exception
at bd.nexus.monitoring.core.ui.ScaladinUIProvider.createScaladinUiInstance(ScaladinUIProvider.scala:40)
at vaadin.scala.server.ScaladinUIProvider$$anonfun$getConfigurationUiInstance$1.apply(ScaladinUIProvider.scala:26)
at vaadin.scala.server.ScaladinUIProvider$$anonfun$getConfigurationUiInstance$1.apply(ScaladinUIProvider.scala:26)
at scala.collection.mutable.MapLike$class.getOrElseUpdate(MapLike.scala:189)
at scala.collection.mutable.AbstractMap.getOrElseUpdate(Map.scala:91)
at vaadin.scala.server.ScaladinUIProvider.getConfigurationUiInstance(ScaladinUIProvider.scala:26)
at vaadin.scala.server.ScaladinUIProvider.vaadin$scala$server$ScaladinUIProvider$$loadConfigValue(ScaladinUIProvider.scala:34)
at vaadin.scala.server.ScaladinUIProvider$$anonfun$getConfigurationValue$1.apply(ScaladinUIProvider.scala:28)
at scala.collection.mutable.MapLike$class.getOrElseUpdate(MapLike.scala:189)
at scala.collection.mutable.AbstractMap.getOrElseUpdate(Map.scala:91)
at vaadin.scala.server.ScaladinUIProvider.getConfigurationValue(ScaladinUIProvider.scala:28)
at vaadin.scala.server.ScaladinUIProvider.isPreservedOnRefresh(ScaladinUIProvider.scala:53)
at com.vaadin.server.VaadinService.preserveUIOnRefresh(VaadinService.java:997)
at com.vaadin.server.communication.UIInitHandler.getBrowserDetailsUI(UIInitHandler.java:228)
at com.vaadin.server.communication.UIInitHandler.synchronizedHandleRequest(UIInitHandler.java:73)
at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:37)
at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1387)
at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:238)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:684)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:503)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:429)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
at org.eclipse.jetty.server.Server.handle(Server.java:366)
at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:494)
at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:971)
at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1033)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:644)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:696)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:53)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
There is a small difference between those two stack traces, first one has something related with BootstrapHandler
:
at vaadin.scala.server.ScaladinUIProvider.getConfigurationValue(ScaladinUIProvider.scala:28)
at vaadin.scala.server.ScaladinUIProvider.getTheme(ScaladinUIProvider.scala:51)
at com.vaadin.server.BootstrapHandler.getThemeName(BootstrapHandler.java:575)
at com.vaadin.server.communication.ServletBootstrapHandler.getThemeName(ServletBootstrapHandler.java:44)
at com.vaadin.server.BootstrapHandler.findAndEscapeThemeName(BootstrapHandler.java:585)
at com.vaadin.server.BootstrapHandler$BootstrapContext.getThemeName(BootstrapHandler.java:105)
at com.vaadin.server.BootstrapHandler.setupMainDiv(BootstrapHandler.java:366)
at com.vaadin.server.BootstrapHandler.synchronizedHandleRequest(BootstrapHandler.java:188)
at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:37)
and second one not:
at vaadin.scala.server.ScaladinUIProvider.getConfigurationValue(ScaladinUIProvider.scala:28)
at vaadin.scala.server.ScaladinUIProvider.isPreservedOnRefresh(ScaladinUIProvider.scala:53)
at com.vaadin.server.VaadinService.preserveUIOnRefresh(VaadinService.java:997)
at com.vaadin.server.communication.UIInitHandler.getBrowserDetailsUI(UIInitHandler.java:228)
at com.vaadin.server.communication.UIInitHandler.synchronizedHandleRequest(UIInitHandler.java:73)
at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:37)
I thought that this is only I start new session (open the page) for the first time but not. When I will not shutdown server and wait for session expiration entering page again produce again two stack traces.
Can somebody help me? What is going on? Thanks, Arthur.
PS 1: temporary my workaround is to close this one session thats UI was not attached for some period of time (for example: for 20 seconds).
PS 2: this is part of my web.xml
<servlet>
<servlet-name>ProductName</servlet-name>
<servlet-class>vaadin.scala.server.ScaladinServlet</servlet-class>
<init-param>
<param-name>ScaladinUIProvider</param-name>
<param-value>bd.nexus.monitoring.core.ui.ScaladinUIProvider</param-value>
</init-param>
<init-param>
<description>Application widgetset</description>
<param-name>widgetset</param-name>
<param-value>ProductNameWidgetset</param-value>
</init-param>
<init-param>
<param-name>pushmode</param-name>
<param-value>automatic</param-value>
</init-param>
<async-supported>true</async-supported>
<init-param>
<param-name>heartbeatInterval</param-name>
<param-value>2</param-value> <!-- value in seconds -->
</init-param>
<init-param>
<param-name>closeIdleSessions</param-name>
<param-value>true</param-value>
</init-param>
</servlet>