Vaadin 24 application deployed to a Tomcat 10 container

Hello all,

I’m trying to deploy a Vaadin 24 application (+ Spring Boot 3, Java 17), packaged as a WAR into a Tomcat 10 container.

Even if SpringBootServletInitializer seems to be used correctly:

@SpringBootApplication
@PWA(name = "Project Base for Vaadin with Spring", shortName = "Project Base")
@Theme(value = "simple")
public class Application extends SpringBootServletInitializer implements AppShellConfigurator {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

When I’m trying to deploy and to start my application, I’m getting a nasty error:

2024-04-21T01:01:07.807+03:00  INFO 10299 --- [alina-utility-2] org.myworkflows.Application              : Started Application in 8.32 seconds (process running for 3544.848)
21-Apr-2024 01:01:08.158 SEVERE [Catalina-utility-2] org.apache.catalina.core.StandardContext.startInternal Error during ServletContainerInitializer processing
        jakarta.servlet.ServletException: ServletContainerInitializer is called but the provided set of classes is 'null'. class com.vaadin.flow.di.LookupInitializer should always be present and has to be passed to the 'onStartup' method as an argument in the set of classes if the servlet container supports Servlet 5.0 specification. The project configuration is broken or you are using a Servlet 5.0 incompatible container.
                at com.vaadin.flow.server.startup.LookupServletContainerInitializer.process(LookupServletContainerInitializer.java:71)
                at com.vaadin.flow.server.startup.ClassLoaderAwareServletContainerInitializer.lambda$onStartup$2(ClassLoaderAwareServletContainerInitializer.java:81)
                at com.vaadin.flow.server.startup.ClassLoaderAwareServletContainerInitializer.onStartup(ClassLoaderAwareServletContainerInitializer.java:122)
                at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4880)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)
                at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:683)
                at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:658)
                at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:712)
                at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:969)
                at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1911)
                at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
                at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
                at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
                at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:123)
                at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:771)
                at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:423)
                at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1678)
                at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:299)
                at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:114)
                at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1098)
                at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1301)
                at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1305)
                at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1283)
                at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
                at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)
                at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
                at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
                at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
                at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
                at java.base/java.lang.Thread.run(Thread.java:840)
21-Apr-2024 01:01:08.160 SEVERE [Catalina-utility-2] org.apache.catalina.core.StandardContext.startInternal Context [/myworkflows-app] startup failed due to previous errors

Can somebody help me with this error?

Thanks a lot.

Looking at the Spring documentation linked here, it seems your SpringBootServletInitializer is missing the configure method.