Исключение потока Vaadin при вызове приложения - VaadinSession не может быть приведен к VaadinSession - PullRequest
0 голосов
/ 12 декабря 2018

В настоящее время мы разрабатываем новое веб-приложение Vaadin на основе пакета Vaadin Flow Starter.Он работает с сервером Jetty, который запускается через вызов maven.В последнее время довольно часто появляется ошибка, которая не позволяет мне получить доступ к приложению в браузере, в результате чего получается только трассировка стека исключений (в браузере, а также в бэкэнде), которая говорит com.vaadin.flow.server.VaadinSession cannot be cast to com.vaadin.flow.server.VaadinSession.Вот полная трассировка стека.

javax.servlet.ServletException: javax.servlet.ServletException: com.vaadin.flow.server.ServiceException: java.lang.ClassCastException: com.vaadin.flow.server.VaadinSession cannot be cast to com.vaadin.flow.server.VaadinSession
    at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
    at org.eclipse.jetty.server.Server.handle(Server.java:531)
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:352)
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:260)
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:281)
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:102)
    at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:333)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:310)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:126)
    at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:366)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:762)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:680)
    at java.lang.Thread.run(Thread.java:748)
Caused by: javax.servlet.ServletException: com.vaadin.flow.server.ServiceException: java.lang.ClassCastException: com.vaadin.flow.server.VaadinSession cannot be cast to com.vaadin.flow.server.VaadinSession
    at com.vaadin.flow.server.VaadinServlet.service(VaadinServlet.java:302)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:857)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:535)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:146)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1595)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1317)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1564)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1219)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:219)
    at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126)
    ... 15 more
Caused by: com.vaadin.flow.server.ServiceException: java.lang.ClassCastException: com.vaadin.flow.server.VaadinSession cannot be cast to com.vaadin.flow.server.VaadinSession
    at com.vaadin.flow.server.VaadinService.handleExceptionDuringRequest(VaadinService.java:1535)
    at com.vaadin.flow.server.VaadinService.handleRequest(VaadinService.java:1498)
    at com.vaadin.flow.server.VaadinServlet.service(VaadinServlet.java:300)
    ... 33 more
Caused by: java.lang.ClassCastException: com.vaadin.flow.server.VaadinSession cannot be cast to com.vaadin.flow.server.VaadinSession
    at com.vaadin.flow.server.VaadinService.readFromHttpSession(VaadinService.java:2071)
    at com.vaadin.flow.server.VaadinService.loadSession(VaadinService.java:2051)
    at com.vaadin.flow.server.VaadinService.getExistingSession(VaadinService.java:942)
    at com.vaadin.flow.server.VaadinService.doFindOrCreateVaadinSession(VaadinService.java:791)
    at com.vaadin.flow.server.VaadinService.findOrCreateVaadinSession(VaadinService.java:766)
    at com.vaadin.flow.server.VaadinService.findVaadinSession(VaadinService.java:624)
    at com.vaadin.flow.server.VaadinService.handleRequest(VaadinService.java:1480)
    ... 34 more

Теперь сама трассировка стека является единственной в своем роде, и я не видел ничего подобного раньше, потому что он говорит, что не может привести VaadinSession к VaadinSession, что вызывает сожаление.,Я почти уверен, что этот материал обрабатывается самим Vaadin, и я просто использую его как черный ящик, поэтому сейчас я не знаю, откуда возникли эти ошибки и как я могу их исправить.

Я расширяю VaadinServlet для подключения к сервлету и инициализации сеанса, хотя код довольно прост (хотя я должен сказать, что я не мастер инициализации сеанса, поэтому я просто сорвал его с какого-то другого учебника).Я не уверен, может ли это быть как-то связано с этим, вот код в любом случае.

@Override
protected void servletInitialized() throws ServletException {
    super.servletInitialized();
    getService().addSessionInitListener(this);
    getService().addSessionDestroyListener(this);
    logger.info("servlet initialized");
}

@Override
public void sessionInit(SessionInitEvent event) throws ServiceException {
    // Do session start stuff here
    logger.info("session initialized");
    SessionBean sessionBean = new SessionBean();
    sessionBean.setPlant(Config.getInstance().getPlant());
    // TODO Berechtigungen aus dem Nutzer auslesen
    sessionBean.setAuthorizations(AUTHS);
    event.getSession().setAttribute(SessionBean.class, sessionBean);
    event.getSession().setAttribute(BPService.class, new BPService());
}

@Override
public void sessionDestroy(SessionDestroyEvent event) {
    event.getSession().setAttribute(SessionBean.class, null);
    event.getSession().setAttribute(BPService.class, null);
}

Ошибка возникает при горячем развертывании, а также при новом запуске.Перезапуск сервера приложений не обязательно решает проблему.Как только ошибка возникает при вызове страницы (не имеет значения, какой браузер, у меня были эти ошибки в Chrome, Opera, Firefox и IE), она повторяется снова и снова, если я обновляю эту конкретную страницу или пытаюсь вызвать ее изновое окно того же браузера.Если я переключаюсь в окно в режиме инкогнито или переключаю браузер, в новом окне это не произойдет, но оно все равно будет всплывать в старом.

Текущая конфигурация

  • Vaadin 12.0.0 (тоже случилось с 11.0.2)
  • mvn jetty:run с причалом 9.4.11.v20180605
  • java 1.8

Я думаю, что я в настоящее времяиспользуя весь материал Vaadin Flow, я не уверен, как он управляет зависимостями, но сейчас это моя единственная зависимость для Vaadin:

<dependency>
    <groupId>com.vaadin</groupId>
    <artifactId>vaadin-bom</artifactId>
    <version>${vaadin.version}</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

Я попытался переключить сервер Jetty на другую версию безуспех.Обновление Vaadin до 12 из 11 также не повлияло на ошибку.

...