В настоящее время мы разрабатываем новое веб-приложение 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 также не повлияло на ошибку.