从 Vaadin 8 迁移到 14 后出现 Vaadin Flow 问题 - 找不到“PUSH”的路线
我最近被分配了一个 Vaadin 项目,该项目已从版本 8 迁移到 14,但是每当我们尝试将迁移的 .war 文件部署到生产环境中的 Tomcat 9 时,我们都会在日志中收到错误,这些错误每隔几秒就会出现一次,最终导致OutOfMemory 错误:
com.vaadin.flow.router.NotFoundException:找不到“HEARTBEAT/”的路由 com.vaadin.flow.router.NotFoundException:无法找到“PUSH”的路由
我无法使用相同的 Tomcat 和 .war 文件在本地重现它。任何关于去哪里/检查什么的建议将不胜感激。
这是我们使用 @Push 注释的主视图
@Route("")
@Theme(themeFolder = "mytheme")
@Push(value = PushMode.MANUAL)
@CssImport(value = "./styles/components/app-layout.css", themeFor = "vaadin-app-layout")
// other @CSSImport-s ...
public class MainView extends AppLayout implements BeforeEnterObserver, AfterNavigationObserver {
...
}
Atmosphere 框架似乎启动得很好:
org.atmosphere.cpr.AtmosphereFramework : Installed AtmosphereHandler com.vaadin.flow.server.communication.PushAtmosphereHandler mapped to context-path: /*
org.atmosphere.cpr.AtmosphereFramework : Installed the following AtmosphereInterceptor mapped to AtmosphereHandler com.vaadin.flow.server.communication.PushAtmosphereHandler
org.atmosphere.cpr.AtmosphereFramework : Adding class class org.atmosphere.inject.AtmosphereConfigInjectable as injectable
org.atmosphere.cpr.AtmosphereFramework : Adding class class org.atmosphere.inject.AtmosphereFrameworkInjectable as injectable
org.atmosphere.cpr.AtmosphereFramework : Adding class class org.atmosphere.inject.AtmosphereResourceFactoryInjectable as injectable
org.atmosphere.cpr.AtmosphereFramework : Adding class class org.atmosphere.inject.AtmosphereResourceSessionFactoryInjectable as injectable
org.atmosphere.cpr.AtmosphereFramework : Adding class class org.atmosphere.inject.BroadcasterFactoryInjectable as injectable
org.atmosphere.cpr.AtmosphereFramework : Adding class class org.atmosphere.inject.MetaBroadcasterInjectable as injectable
org.atmosphere.cpr.AtmosphereFramework : Adding class class org.atmosphere.inject.WebSocketFactoryInjectable as injectable
org.atmosphere.cpr.AtmosphereFramework : Adding class class org.atmosphere.inject.PostConstructIntrospector as injectable
org.atmosphere.cpr.AtmosphereFramework : Adding class class org.atmosphere.inject.BroadcasterIntrospector as injectable
org.atmosphere.cpr.AtmosphereFramework : Adding class class org.atmosphere.inject.AtmosphereResourceIntrospector as injectable
org.atmosphere.cpr.AtmosphereFramework : Adding class class org.atmosphere.inject.AtmosphereRequestIntrospector as injectable
org.atmosphere.cpr.AtmosphereFramework : Adding class class org.atmosphere.inject.AtmosphereResponseIntrospector as injectable
org.atmosphere.cpr.AtmosphereFramework : Adding class class org.atmosphere.inject.AtmosphereResourceEventIntrospector as injectable
org.atmosphere.cpr.AtmosphereFramework : Adding class class org.atmosphere.inject.PathParamIntrospector as injectable
org.atmosphere.cpr.AtmosphereFramework : Atmosphere is using org.atmosphere.util.VoidAnnotationProcessor for processing annotation
org.atmosphere.cpr.AtmosphereFramework : Scanning all classes on the classpath
org.atmosphere.util.ForkJoinPool : Using ForkJoinPool java.util.concurrent.ForkJoinPool. Set the org.atmosphere.cpr.broadcaster.maxAsyncWriteThreads to -1 to fully use its power.
org.atmosphere.cpr.AtmosphereFramework : Installed WebSocketProtocol org.atmosphere.websocket.protocol.SimpleHttpProtocol
o.a.cpr.DefaultAsyncSupportResolver : Found javax.servlet.AsyncListener
o.a.cpr.DefaultAsyncSupportResolver : Found javax.websocket.Endpoint
o.a.container.JSR356AsyncSupport : JSR 356 Mapping path /vaadinServlet
org.atmosphere.cpr.AtmosphereFramework : Installing Default AtmosphereInterceptors
org.atmosphere.cpr.AtmosphereFramework : org.atmosphere.interceptor.CorsInterceptor : CORS Interceptor Support
org.atmosphere.cpr.AtmosphereFramework : org.atmosphere.interceptor.CacheHeadersInterceptor : Default Response's Headers Interceptor
org.atmosphere.cpr.AtmosphereFramework : org.atmosphere.interceptor.PaddingAtmosphereInterceptor : Browser Padding Interceptor Support
org.atmosphere.cpr.AtmosphereFramework : org.atmosphere.interceptor.AndroidAtmosphereInterceptor : Android Interceptor Support
org.atmosphere.cpr.AtmosphereFramework : Dropping Interceptor org.atmosphere.interceptor.HeartbeatInterceptor
org.atmosphere.cpr.AtmosphereFramework : org.atmosphere.interceptor.SSEAtmosphereInterceptor : SSE Interceptor Support
org.atmosphere.cpr.AtmosphereFramework : org.atmosphere.interceptor.JSONPAtmosphereInterceptor : JSONP Interceptor Support
org.atmosphere.cpr.AtmosphereFramework : org.atmosphere.interceptor.JavaScriptProtocol : Atmosphere JavaScript Protocol
org.atmosphere.cpr.AtmosphereFramework : org.atmosphere.interceptor.WebSocketMessageSuspendInterceptor : org.atmosphere.interceptor.WebSocketMessageSuspendInterceptor
org.atmosphere.cpr.AtmosphereFramework : org.atmosphere.interceptor.OnDisconnectInterceptor : Browser disconnection detection
org.atmosphere.cpr.AtmosphereFramework : org.atmosphere.interceptor.IdleResourceInterceptor : org.atmosphere.interceptor.IdleResourceInterceptor
org.atmosphere.cpr.AtmosphereFramework : Set org.atmosphere.cpr.AtmosphereInterceptor.disableDefaults to disable them.
org.atmosphere.cpr.AtmosphereFramework : Installed AtmosphereInterceptor CORS Interceptor Support with priority FIRST_BEFORE_DEFAULT
org.atmosphere.cpr.AtmosphereFramework : Installed AtmosphereInterceptor Default Response's Headers Interceptor with priority AFTER_DEFAULT
org.atmosphere.cpr.AtmosphereFramework : Installed AtmosphereInterceptor Browser Padding Interceptor Support with priority AFTER_DEFAULT
org.atmosphere.cpr.AtmosphereFramework : Installed AtmosphereInterceptor Android Interceptor Support with priority AFTER_DEFAULT
org.atmosphere.cpr.AtmosphereFramework : Installed AtmosphereInterceptor SSE Interceptor Support with priority AFTER_DEFAULT
org.atmosphere.cpr.AtmosphereFramework : Installed AtmosphereInterceptor JSONP Interceptor Support with priority AFTER_DEFAULT
org.atmosphere.cpr.AtmosphereFramework : Installed AtmosphereInterceptor Atmosphere JavaScript Protocol with priority AFTER_DEFAULT
org.atmosphere.cpr.AtmosphereFramework : Installed AtmosphereInterceptor org.atmosphere.interceptor.WebSocketMessageSuspendInterceptor with priority AFTER_DEFAULT
org.atmosphere.cpr.AtmosphereFramework : Installed AtmosphereInterceptor Browser disconnection detection with priority AFTER_DEFAULT
org.atmosphere.cpr.AtmosphereFramework : Installed AtmosphereInterceptor org.atmosphere.interceptor.IdleResourceInterceptor with priority BEFORE_DEFAULT
org.atmosphere.cpr.AtmosphereFramework : Using EndpointMapper class org.atmosphere.util.DefaultEndpointMapper
org.atmosphere.cpr.AtmosphereFramework : Using BroadcasterCache: org.atmosphere.cache.UUIDBroadcasterCache
org.atmosphere.cpr.AtmosphereFramework : Default Broadcaster Class: org.atmosphere.cpr.DefaultBroadcaster
org.atmosphere.cpr.AtmosphereFramework : Broadcaster Shared List Resources: false
org.atmosphere.cpr.AtmosphereFramework : Broadcaster Polling Wait Time 100
org.atmosphere.cpr.AtmosphereFramework : Shared ExecutorService supported: true
org.atmosphere.cpr.AtmosphereFramework : Messaging ExecutorService Pool Size unavailable - Not instance of ThreadPoolExecutor
org.atmosphere.cpr.AtmosphereFramework : Async I/O Thread Pool Size: 200
org.atmosphere.cpr.AtmosphereFramework : Using BroadcasterFactory: org.atmosphere.cpr.DefaultBroadcasterFactory
org.atmosphere.cpr.AtmosphereFramework : Using AtmosphereResurceFactory: org.atmosphere.cpr.DefaultAtmosphereResourceFactory
org.atmosphere.cpr.AtmosphereFramework : Using WebSocketProcessor: org.atmosphere.websocket.DefaultWebSocketProcessor
org.atmosphere.cpr.AtmosphereFramework : Invoke AtmosphereInterceptor on WebSocket message true
org.atmosphere.cpr.AtmosphereFramework : HttpSession supported: true
org.atmosphere.cpr.AtmosphereFramework : Atmosphere is using org.atmosphere.inject.InjectableObjectFactory for dependency injection and object creation
org.atmosphere.cpr.AtmosphereFramework : Atmosphere is using async support: org.atmosphere.container.JSR356AsyncSupport running under container: Apache Tomcat/9.0.48 using javax.servlet/3.0 and jsr356/WebSocket API
org.atmosphere.cpr.AtmosphereFramework : Atmosphere Framework 2.4.30.slf4jvaadin1 started.
org.atmosphere.cpr.AtmosphereFramework : Installed AtmosphereInterceptor Track Message Size Interceptor using | with priority BEFORE_DEFAULT
DeferredRepositoryInitializationListener : Triggering deferred initialization of Spring Data repositories…
DeferredRepositoryInitializationListener : Spring Data repositories initialized!
com.app.npk.Application : Started Application in 267.707 seconds (JVM running for 276.059)
o.a.c.c.C.[Catalina].[localhost].[/] : Initializing AtmosphereFramework
c.v.flow.server.startup.ServletDeployer : Skipping automatic servlet registration because there is already a Vaadin servlet with the name springServlet
c.v.f.s.c.JSR356WebsocketInitializer : Atmosphere already initialized
org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [/app/tomcat-9/webapps/ROOT.war] has finished in [275,624] ms
org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
org.apache.catalina.startup.Catalina.start Server startup in [275752] milliseconds
o.a.c.c.C.[Catalina].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
o.s.web.servlet.DispatcherServlet : Completed initialization in 14 ms
c.v.f.s.DefaultDeploymentConfiguration : Vaadin is running in production mode.
c.vaadin.flow.spring.SpringInstantiator : The number of beans implementing 'I18NProvider' is 0. Cannot use Spring beans for I18N, falling back to the default behavior
c.vaadin.flow.router.RouteNotFoundError : Couldn't find route for 'HEARTBEAT/'
com.vaadin.flow.router.NotFoundException: Couldn't find route for 'HEARTBEAT/'
at com.vaadin.flow.router.Router.handleNavigation(Router.java:277) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.router.Router.navigate(Router.java:232) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.router.Router.navigate(Router.java:198) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.router.Router.initializeUI(Router.java:95) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.server.BootstrapHandler.initializeUIWithRouter(BootstrapHandler.java:1625) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.server.BootstrapHandler.createAndInitUI(BootstrapHandler.java:1618) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.server.BootstrapHandler.synchronizedHandleRequest(BootstrapHandler.java:508) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.server.VaadinService.handleRequest(VaadinService.java:1578) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.server.VaadinServlet.service(VaadinServlet.java:252) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.spring.SpringServlet.service(SpringServlet.java:111) ~[vaadin-spring-12.4.2.jar:na]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[servlet-api.jar:4.0.FR]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:228) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:711) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:459) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:353) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:313) ~[catalina.jar:9.0.48]
at org.springframework.web.servlet.mvc.ServletForwardingController.handleRequestInternal(ServletForwardingController.java:141) ~[spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177) ~[spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:52) ~[spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040) ~[spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) ~[spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:681) ~[servlet-api.jar:4.0.FR]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[servlet-api.jar:4.0.FR]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:228) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[catalina.jar:9.0.48]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-websocket.jar:9.0.48]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[catalina.jar:9.0.48]
at com.app.npk.servlet.filter.HeaderFilter.doFilter(HeaderFilter.java:28) ~[classes/:0.7.21]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[catalina.jar:9.0.48]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[catalina.jar:9.0.48]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[catalina.jar:9.0.48]
at org.springframework.boot.web.servlet.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:126) ~[spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE]
at org.springframework.boot.web.servlet.support.ErrorPageFilter.access$000(ErrorPageFilter.java:64) ~[spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE]
at org.springframework.boot.web.servlet.support.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:101) ~[spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.boot.web.servlet.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:119) ~[spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[catalina.jar:9.0.48]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[catalina.jar:9.0.48]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[catalina.jar:9.0.48]
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687) ~[catalina.jar:9.0.48]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[catalina.jar:9.0.48]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) ~[catalina.jar:9.0.48]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) ~[tomcat-coyote.jar:9.0.48]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-coyote.jar:9.0.48]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) ~[tomcat-coyote.jar:9.0.48]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1723) ~[tomcat-coyote.jar:9.0.48]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-coyote.jar:9.0.48]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-util.jar:9.0.48]
at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
2022-04-08 18:05:28.906 INFO 229632 --- [nio-8080-exec-3] c.vaadin.flow.router.RouteNotFoundError : Couldn't find route for 'PUSH'
com.vaadin.flow.router.NotFoundException: Couldn't find route for 'PUSH'
at com.vaadin.flow.router.Router.handleNavigation(Router.java:277) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.router.Router.navigate(Router.java:232) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.router.Router.navigate(Router.java:198) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.router.Router.initializeUI(Router.java:95) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.server.BootstrapHandler.initializeUIWithRouter(BootstrapHandler.java:1625) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.server.BootstrapHandler.createAndInitUI(BootstrapHandler.java:1618) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.server.BootstrapHandler.synchronizedHandleRequest(BootstrapHandler.java:508) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.server.VaadinService.handleRequest(VaadinService.java:1578) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.server.VaadinServlet.service(VaadinServlet.java:252) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.spring.SpringServlet.service(SpringServlet.java:111) ~[vaadin-spring-12.4.2.jar:na]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[servlet-api.jar:4.0.FR]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:228) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:711) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:459) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:353) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:313) ~[catalina.jar:9.0.48]
at org.springframework.web.servlet.mvc.ServletForwardingController.handleRequestInternal(ServletForwardingController.java:141) ~[spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177) ~[spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:52) ~[spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040) ~[spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) ~[spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:655) ~[servlet-api.jar:4.0.FR]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[servlet-api.jar:4.0.FR]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:228) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[catalina.jar:9.0.48]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-websocket.jar:9.0.48]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[catalina.jar:9.0.48]
at com.app.npk.servlet.filter.HeaderFilter.doFilter(HeaderFilter.java:28) ~[classes/:0.7.21]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[catalina.jar:9.0.48]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[catalina.jar:9.0.48]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[catalina.jar:9.0.48]
at org.springframework.boot.web.servlet.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:126) ~[spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE]
at org.springframework.boot.web.servlet.support.ErrorPageFilter.access$000(ErrorPageFilter.java:64) ~[spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE]
at org.springframework.boot.web.servlet.support.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:101) ~[spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.boot.web.servlet.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:119) ~[spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[catalina.jar:9.0.48]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[catalina.jar:9.0.48]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[catalina.jar:9.0.48]
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687) ~[catalina.jar:9.0.48]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[catalina.jar:9.0.48]
...
访问日志有这样的内容:
0:0:0:0:0:0:0:1 - - [08/Apr/2022:18:05:30 +0300] "POST /HEARTBEAT/?v-uiId=1 HTTP/1.1" 404 10199
0:0:0:0:0:0:0:1 - - [08/Apr/2022:18:05:30 +0300] "GET / HTTP/1.1" 200 10183
0:0:0:0:0:0:0:1 - - [08/Apr/2022:18:05:30 +0300] "HEAD / HTTP/1.1" 200 -
0:0:0:0:0:0:0:1 - - [08/Apr/2022:18:05:30 +0300] "GET /PUSH?v-uiId=0&v-csrfToken=0af47b6f-88c3-4158-9ca7-f5c97c8994ff&X-Atmosphere-tracking-id=ea2c5039-3d21-489b-8e98-599dd8dbae23&X-Atmosphere-Framework=2.2.13.vaadin3-jquery&X-Atmosphere-Transport=long-polling&X-Atmosphere-TrackMessageSize=true&Content-Type=application%2Fjson%3B%20charset%3DUTF-8&X-atmo-protocol=true&_=1649430058519 HTTP/1.1" 404 10184
从 IntelliJ 本地运行应用程序或直接在 Tomcat 中运行应用程序不会重现这些错误。他们在生产中使用 Apache 2.4,所以我认为问题可能就在那里,但 Vaadin 7 版本的应用程序运行正常,PUSH 和 HEARTBEAT 请求返回 200:
0:0:0:0:0:0:0:1 - - [08/Apr/2022:17:47:02 +0300] "POST /HEARTBEAT/?v-uiId=0 HTTP/1.1" 200 -
0:0:0:0:0:0:0:1 - - [08/Apr/2022:17:47:02 +0300] "POST /UIDL/?v-uiId=0 HTTP/1.1" 200 12008
0:0:0:0:0:0:0:1 - - [08/Apr/2022:17:47:02 +0300] "GET /PUSH?v-uiId=0&v-csrfToken=d239b23e-0921-4e74-8eaf-1242d384a79f&X-Atmosphere-tracking-id=0bd91e4e-72be-4af0-86c4-5bf812e5aab9&X-Atmosphere-Framework=2.2.13.vaadin3-jquery&X-Atmosphere-Transport=long-polling&X-Atmosphere-TrackMessageSize=true&Content-Type=application%2Fjson%3B%20charset%3DUTF-8&X-atmo-protocol=true&_=1649428917754 HTTP/1.1" 200 2061
0:0:0:0:0:0:0:1 - - [08/Apr/2022:17:47:17 +0300] "HEAD / HTTP/1.1" 200 -
I was recently assigned a Vaadin project that has been migrated from version 8 to 14 but whenever we try to deploy the migrated .war file to Tomcat 9 in production, we get errors in the log that keep appearing every few seconds and that eventually leads to OutOfMemory error:
com.vaadin.flow.router.NotFoundException: Couldn't find route for 'HEARTBEAT/'
com.vaadin.flow.router.NotFoundException: Couldn't find route for 'PUSH'
I can't reproduce it locally with the same Tomcat and .war file. Any advice about where to look/what to check would be highly appreciated.
Here's the main view where we use @Push annotation
@Route("")
@Theme(themeFolder = "mytheme")
@Push(value = PushMode.MANUAL)
@CssImport(value = "./styles/components/app-layout.css", themeFor = "vaadin-app-layout")
// other @CSSImport-s ...
public class MainView extends AppLayout implements BeforeEnterObserver, AfterNavigationObserver {
...
}
The Atmosphere framework seems to start up just fine:
org.atmosphere.cpr.AtmosphereFramework : Installed AtmosphereHandler com.vaadin.flow.server.communication.PushAtmosphereHandler mapped to context-path: /*
org.atmosphere.cpr.AtmosphereFramework : Installed the following AtmosphereInterceptor mapped to AtmosphereHandler com.vaadin.flow.server.communication.PushAtmosphereHandler
org.atmosphere.cpr.AtmosphereFramework : Adding class class org.atmosphere.inject.AtmosphereConfigInjectable as injectable
org.atmosphere.cpr.AtmosphereFramework : Adding class class org.atmosphere.inject.AtmosphereFrameworkInjectable as injectable
org.atmosphere.cpr.AtmosphereFramework : Adding class class org.atmosphere.inject.AtmosphereResourceFactoryInjectable as injectable
org.atmosphere.cpr.AtmosphereFramework : Adding class class org.atmosphere.inject.AtmosphereResourceSessionFactoryInjectable as injectable
org.atmosphere.cpr.AtmosphereFramework : Adding class class org.atmosphere.inject.BroadcasterFactoryInjectable as injectable
org.atmosphere.cpr.AtmosphereFramework : Adding class class org.atmosphere.inject.MetaBroadcasterInjectable as injectable
org.atmosphere.cpr.AtmosphereFramework : Adding class class org.atmosphere.inject.WebSocketFactoryInjectable as injectable
org.atmosphere.cpr.AtmosphereFramework : Adding class class org.atmosphere.inject.PostConstructIntrospector as injectable
org.atmosphere.cpr.AtmosphereFramework : Adding class class org.atmosphere.inject.BroadcasterIntrospector as injectable
org.atmosphere.cpr.AtmosphereFramework : Adding class class org.atmosphere.inject.AtmosphereResourceIntrospector as injectable
org.atmosphere.cpr.AtmosphereFramework : Adding class class org.atmosphere.inject.AtmosphereRequestIntrospector as injectable
org.atmosphere.cpr.AtmosphereFramework : Adding class class org.atmosphere.inject.AtmosphereResponseIntrospector as injectable
org.atmosphere.cpr.AtmosphereFramework : Adding class class org.atmosphere.inject.AtmosphereResourceEventIntrospector as injectable
org.atmosphere.cpr.AtmosphereFramework : Adding class class org.atmosphere.inject.PathParamIntrospector as injectable
org.atmosphere.cpr.AtmosphereFramework : Atmosphere is using org.atmosphere.util.VoidAnnotationProcessor for processing annotation
org.atmosphere.cpr.AtmosphereFramework : Scanning all classes on the classpath
org.atmosphere.util.ForkJoinPool : Using ForkJoinPool java.util.concurrent.ForkJoinPool. Set the org.atmosphere.cpr.broadcaster.maxAsyncWriteThreads to -1 to fully use its power.
org.atmosphere.cpr.AtmosphereFramework : Installed WebSocketProtocol org.atmosphere.websocket.protocol.SimpleHttpProtocol
o.a.cpr.DefaultAsyncSupportResolver : Found javax.servlet.AsyncListener
o.a.cpr.DefaultAsyncSupportResolver : Found javax.websocket.Endpoint
o.a.container.JSR356AsyncSupport : JSR 356 Mapping path /vaadinServlet
org.atmosphere.cpr.AtmosphereFramework : Installing Default AtmosphereInterceptors
org.atmosphere.cpr.AtmosphereFramework : org.atmosphere.interceptor.CorsInterceptor : CORS Interceptor Support
org.atmosphere.cpr.AtmosphereFramework : org.atmosphere.interceptor.CacheHeadersInterceptor : Default Response's Headers Interceptor
org.atmosphere.cpr.AtmosphereFramework : org.atmosphere.interceptor.PaddingAtmosphereInterceptor : Browser Padding Interceptor Support
org.atmosphere.cpr.AtmosphereFramework : org.atmosphere.interceptor.AndroidAtmosphereInterceptor : Android Interceptor Support
org.atmosphere.cpr.AtmosphereFramework : Dropping Interceptor org.atmosphere.interceptor.HeartbeatInterceptor
org.atmosphere.cpr.AtmosphereFramework : org.atmosphere.interceptor.SSEAtmosphereInterceptor : SSE Interceptor Support
org.atmosphere.cpr.AtmosphereFramework : org.atmosphere.interceptor.JSONPAtmosphereInterceptor : JSONP Interceptor Support
org.atmosphere.cpr.AtmosphereFramework : org.atmosphere.interceptor.JavaScriptProtocol : Atmosphere JavaScript Protocol
org.atmosphere.cpr.AtmosphereFramework : org.atmosphere.interceptor.WebSocketMessageSuspendInterceptor : org.atmosphere.interceptor.WebSocketMessageSuspendInterceptor
org.atmosphere.cpr.AtmosphereFramework : org.atmosphere.interceptor.OnDisconnectInterceptor : Browser disconnection detection
org.atmosphere.cpr.AtmosphereFramework : org.atmosphere.interceptor.IdleResourceInterceptor : org.atmosphere.interceptor.IdleResourceInterceptor
org.atmosphere.cpr.AtmosphereFramework : Set org.atmosphere.cpr.AtmosphereInterceptor.disableDefaults to disable them.
org.atmosphere.cpr.AtmosphereFramework : Installed AtmosphereInterceptor CORS Interceptor Support with priority FIRST_BEFORE_DEFAULT
org.atmosphere.cpr.AtmosphereFramework : Installed AtmosphereInterceptor Default Response's Headers Interceptor with priority AFTER_DEFAULT
org.atmosphere.cpr.AtmosphereFramework : Installed AtmosphereInterceptor Browser Padding Interceptor Support with priority AFTER_DEFAULT
org.atmosphere.cpr.AtmosphereFramework : Installed AtmosphereInterceptor Android Interceptor Support with priority AFTER_DEFAULT
org.atmosphere.cpr.AtmosphereFramework : Installed AtmosphereInterceptor SSE Interceptor Support with priority AFTER_DEFAULT
org.atmosphere.cpr.AtmosphereFramework : Installed AtmosphereInterceptor JSONP Interceptor Support with priority AFTER_DEFAULT
org.atmosphere.cpr.AtmosphereFramework : Installed AtmosphereInterceptor Atmosphere JavaScript Protocol with priority AFTER_DEFAULT
org.atmosphere.cpr.AtmosphereFramework : Installed AtmosphereInterceptor org.atmosphere.interceptor.WebSocketMessageSuspendInterceptor with priority AFTER_DEFAULT
org.atmosphere.cpr.AtmosphereFramework : Installed AtmosphereInterceptor Browser disconnection detection with priority AFTER_DEFAULT
org.atmosphere.cpr.AtmosphereFramework : Installed AtmosphereInterceptor org.atmosphere.interceptor.IdleResourceInterceptor with priority BEFORE_DEFAULT
org.atmosphere.cpr.AtmosphereFramework : Using EndpointMapper class org.atmosphere.util.DefaultEndpointMapper
org.atmosphere.cpr.AtmosphereFramework : Using BroadcasterCache: org.atmosphere.cache.UUIDBroadcasterCache
org.atmosphere.cpr.AtmosphereFramework : Default Broadcaster Class: org.atmosphere.cpr.DefaultBroadcaster
org.atmosphere.cpr.AtmosphereFramework : Broadcaster Shared List Resources: false
org.atmosphere.cpr.AtmosphereFramework : Broadcaster Polling Wait Time 100
org.atmosphere.cpr.AtmosphereFramework : Shared ExecutorService supported: true
org.atmosphere.cpr.AtmosphereFramework : Messaging ExecutorService Pool Size unavailable - Not instance of ThreadPoolExecutor
org.atmosphere.cpr.AtmosphereFramework : Async I/O Thread Pool Size: 200
org.atmosphere.cpr.AtmosphereFramework : Using BroadcasterFactory: org.atmosphere.cpr.DefaultBroadcasterFactory
org.atmosphere.cpr.AtmosphereFramework : Using AtmosphereResurceFactory: org.atmosphere.cpr.DefaultAtmosphereResourceFactory
org.atmosphere.cpr.AtmosphereFramework : Using WebSocketProcessor: org.atmosphere.websocket.DefaultWebSocketProcessor
org.atmosphere.cpr.AtmosphereFramework : Invoke AtmosphereInterceptor on WebSocket message true
org.atmosphere.cpr.AtmosphereFramework : HttpSession supported: true
org.atmosphere.cpr.AtmosphereFramework : Atmosphere is using org.atmosphere.inject.InjectableObjectFactory for dependency injection and object creation
org.atmosphere.cpr.AtmosphereFramework : Atmosphere is using async support: org.atmosphere.container.JSR356AsyncSupport running under container: Apache Tomcat/9.0.48 using javax.servlet/3.0 and jsr356/WebSocket API
org.atmosphere.cpr.AtmosphereFramework : Atmosphere Framework 2.4.30.slf4jvaadin1 started.
org.atmosphere.cpr.AtmosphereFramework : Installed AtmosphereInterceptor Track Message Size Interceptor using | with priority BEFORE_DEFAULT
DeferredRepositoryInitializationListener : Triggering deferred initialization of Spring Data repositories…
DeferredRepositoryInitializationListener : Spring Data repositories initialized!
com.app.npk.Application : Started Application in 267.707 seconds (JVM running for 276.059)
o.a.c.c.C.[Catalina].[localhost].[/] : Initializing AtmosphereFramework
c.v.flow.server.startup.ServletDeployer : Skipping automatic servlet registration because there is already a Vaadin servlet with the name springServlet
c.v.f.s.c.JSR356WebsocketInitializer : Atmosphere already initialized
org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [/app/tomcat-9/webapps/ROOT.war] has finished in [275,624] ms
org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
org.apache.catalina.startup.Catalina.start Server startup in [275752] milliseconds
o.a.c.c.C.[Catalina].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
o.s.web.servlet.DispatcherServlet : Completed initialization in 14 ms
c.v.f.s.DefaultDeploymentConfiguration : Vaadin is running in production mode.
c.vaadin.flow.spring.SpringInstantiator : The number of beans implementing 'I18NProvider' is 0. Cannot use Spring beans for I18N, falling back to the default behavior
c.vaadin.flow.router.RouteNotFoundError : Couldn't find route for 'HEARTBEAT/'
com.vaadin.flow.router.NotFoundException: Couldn't find route for 'HEARTBEAT/'
at com.vaadin.flow.router.Router.handleNavigation(Router.java:277) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.router.Router.navigate(Router.java:232) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.router.Router.navigate(Router.java:198) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.router.Router.initializeUI(Router.java:95) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.server.BootstrapHandler.initializeUIWithRouter(BootstrapHandler.java:1625) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.server.BootstrapHandler.createAndInitUI(BootstrapHandler.java:1618) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.server.BootstrapHandler.synchronizedHandleRequest(BootstrapHandler.java:508) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.server.VaadinService.handleRequest(VaadinService.java:1578) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.server.VaadinServlet.service(VaadinServlet.java:252) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.spring.SpringServlet.service(SpringServlet.java:111) ~[vaadin-spring-12.4.2.jar:na]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[servlet-api.jar:4.0.FR]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:228) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:711) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:459) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:353) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:313) ~[catalina.jar:9.0.48]
at org.springframework.web.servlet.mvc.ServletForwardingController.handleRequestInternal(ServletForwardingController.java:141) ~[spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177) ~[spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:52) ~[spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040) ~[spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) ~[spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:681) ~[servlet-api.jar:4.0.FR]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[servlet-api.jar:4.0.FR]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:228) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[catalina.jar:9.0.48]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-websocket.jar:9.0.48]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[catalina.jar:9.0.48]
at com.app.npk.servlet.filter.HeaderFilter.doFilter(HeaderFilter.java:28) ~[classes/:0.7.21]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[catalina.jar:9.0.48]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[catalina.jar:9.0.48]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[catalina.jar:9.0.48]
at org.springframework.boot.web.servlet.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:126) ~[spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE]
at org.springframework.boot.web.servlet.support.ErrorPageFilter.access$000(ErrorPageFilter.java:64) ~[spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE]
at org.springframework.boot.web.servlet.support.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:101) ~[spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.boot.web.servlet.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:119) ~[spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[catalina.jar:9.0.48]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[catalina.jar:9.0.48]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[catalina.jar:9.0.48]
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687) ~[catalina.jar:9.0.48]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[catalina.jar:9.0.48]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) ~[catalina.jar:9.0.48]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) ~[tomcat-coyote.jar:9.0.48]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-coyote.jar:9.0.48]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) ~[tomcat-coyote.jar:9.0.48]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1723) ~[tomcat-coyote.jar:9.0.48]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-coyote.jar:9.0.48]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-util.jar:9.0.48]
at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
2022-04-08 18:05:28.906 INFO 229632 --- [nio-8080-exec-3] c.vaadin.flow.router.RouteNotFoundError : Couldn't find route for 'PUSH'
com.vaadin.flow.router.NotFoundException: Couldn't find route for 'PUSH'
at com.vaadin.flow.router.Router.handleNavigation(Router.java:277) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.router.Router.navigate(Router.java:232) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.router.Router.navigate(Router.java:198) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.router.Router.initializeUI(Router.java:95) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.server.BootstrapHandler.initializeUIWithRouter(BootstrapHandler.java:1625) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.server.BootstrapHandler.createAndInitUI(BootstrapHandler.java:1618) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.server.BootstrapHandler.synchronizedHandleRequest(BootstrapHandler.java:508) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.server.VaadinService.handleRequest(VaadinService.java:1578) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.server.VaadinServlet.service(VaadinServlet.java:252) ~[flow-server-2.7.7.jar:2.7.7]
at com.vaadin.flow.spring.SpringServlet.service(SpringServlet.java:111) ~[vaadin-spring-12.4.2.jar:na]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[servlet-api.jar:4.0.FR]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:228) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:711) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:459) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:353) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:313) ~[catalina.jar:9.0.48]
at org.springframework.web.servlet.mvc.ServletForwardingController.handleRequestInternal(ServletForwardingController.java:141) ~[spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177) ~[spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:52) ~[spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040) ~[spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) ~[spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:655) ~[servlet-api.jar:4.0.FR]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[servlet-api.jar:4.0.FR]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:228) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[catalina.jar:9.0.48]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-websocket.jar:9.0.48]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[catalina.jar:9.0.48]
at com.app.npk.servlet.filter.HeaderFilter.doFilter(HeaderFilter.java:28) ~[classes/:0.7.21]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[catalina.jar:9.0.48]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[catalina.jar:9.0.48]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[catalina.jar:9.0.48]
at org.springframework.boot.web.servlet.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:126) ~[spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE]
at org.springframework.boot.web.servlet.support.ErrorPageFilter.access$000(ErrorPageFilter.java:64) ~[spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE]
at org.springframework.boot.web.servlet.support.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:101) ~[spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.boot.web.servlet.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:119) ~[spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[catalina.jar:9.0.48]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[catalina.jar:9.0.48]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[catalina.jar:9.0.48]
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687) ~[catalina.jar:9.0.48]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[catalina.jar:9.0.48]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[catalina.jar:9.0.48]
...
Access log has this:
0:0:0:0:0:0:0:1 - - [08/Apr/2022:18:05:30 +0300] "POST /HEARTBEAT/?v-uiId=1 HTTP/1.1" 404 10199
0:0:0:0:0:0:0:1 - - [08/Apr/2022:18:05:30 +0300] "GET / HTTP/1.1" 200 10183
0:0:0:0:0:0:0:1 - - [08/Apr/2022:18:05:30 +0300] "HEAD / HTTP/1.1" 200 -
0:0:0:0:0:0:0:1 - - [08/Apr/2022:18:05:30 +0300] "GET /PUSH?v-uiId=0&v-csrfToken=0af47b6f-88c3-4158-9ca7-f5c97c8994ff&X-Atmosphere-tracking-id=ea2c5039-3d21-489b-8e98-599dd8dbae23&X-Atmosphere-Framework=2.2.13.vaadin3-jquery&X-Atmosphere-Transport=long-polling&X-Atmosphere-TrackMessageSize=true&Content-Type=application%2Fjson%3B%20charset%3DUTF-8&X-atmo-protocol=true&_=1649430058519 HTTP/1.1" 404 10184
Running the app locally from IntelliJ or directly in Tomcat doesn't reproduce these errors. They use Apache 2.4 in production so I thought maybe the problem could be there but then again the Vaadin 7 version of the app run normally, PUSH and HEARTBEAT requests return 200:
0:0:0:0:0:0:0:1 - - [08/Apr/2022:17:47:02 +0300] "POST /HEARTBEAT/?v-uiId=0 HTTP/1.1" 200 -
0:0:0:0:0:0:0:1 - - [08/Apr/2022:17:47:02 +0300] "POST /UIDL/?v-uiId=0 HTTP/1.1" 200 12008
0:0:0:0:0:0:0:1 - - [08/Apr/2022:17:47:02 +0300] "GET /PUSH?v-uiId=0&v-csrfToken=d239b23e-0921-4e74-8eaf-1242d384a79f&X-Atmosphere-tracking-id=0bd91e4e-72be-4af0-86c4-5bf812e5aab9&X-Atmosphere-Framework=2.2.13.vaadin3-jquery&X-Atmosphere-Transport=long-polling&X-Atmosphere-TrackMessageSize=true&Content-Type=application%2Fjson%3B%20charset%3DUTF-8&X-atmo-protocol=true&_=1649428917754 HTTP/1.1" 200 2061
0:0:0:0:0:0:0:1 - - [08/Apr/2022:17:47:17 +0300] "HEAD / HTTP/1.1" 200 -
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论