scaladin icon indicating copy to clipboard operation
scaladin copied to clipboard

ScaladinUIProvider.createScaladinUiInstance mistakenly called twice?

Open kermitas opened this issue 10 years ago • 0 comments

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>

kermitas avatar May 06 '14 10:05 kermitas