Проблема с Tomcat 10

Jmix version: 2.5.1; Jmix Studio plugin version: 2.5.1-242; IntelliJ version: IntelliJ IDEA 2024.2.3 (Community Edition); Gradle: 8.12.1; Java: 17.0.8.
Здравствуйте, на сервере Alt-Linux 10 пытаюсь развернуть war файл на tomcat 10.1.20, но приложение не запускается. Получаю следующую ошибку:

23-Apr-2025 08:49:54.377 SEVERE [catalina-exec-57] 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.manager.ManagerServlet.start(ManagerServlet.java:1315)
		at org.apache.catalina.manager.HTMLManagerServlet.start(HTMLManagerServlet.java:656)
		at org.apache.catalina.manager.HTMLManagerServlet.doPost(HTMLManagerServlet.java:205)
		at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)
		at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
		at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:206)
		at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:150)
		at org.apache.catalina.filters.CsrfPreventionFilter.doFilter(CsrfPreventionFilter.java:447)
		at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:175)
		at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:150)
		at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
		at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:175)
		at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:150)
		at org.apache.catalina.filters.HttpHeaderSecurityFilter.doFilter(HttpHeaderSecurityFilter.java:129)
		at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:175)
		at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:150)
		at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)
		at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
		at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:597)
		at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)
		at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
		at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:731)
		at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:673)
		at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
		at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)
		at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391)
		at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
		at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)
		at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1736)
		at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
		at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
		at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
		at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
		at java.base/java.lang.Thread.run(Thread.java:840)
23-Apr-2025 08:49:54.382 SEVERE [catalina-exec-57] org.apache.catalina.core.StandardContext.startInternal Context [/test2] startup failed due to previous errors

Здравствуйте,

Подскажите, как собираете war файл и как запускаете?

Есть очень похожее обсуждение на форуме vaadin, может быть полезен.

С уважением,
Михаил

Собираю командой: ./gradlew -Pvaadin.productionMode=true bootWar
Пытался через manager tomcat развернуть и напрямую переносить содержимое war файла в каталог webapps. С 1-ой версией jmix такой способ работал. Да, видел, не помогло.

Привет, попробовал воспроизвести на Ubuntu, имеющейся у меня версии tomcat 10.1.33 скачанной с сайта и Jmix 2.5.1, и все прошло успешно. Из изменений относительно шаблона только: унаследовал класс приложения от сервелет-инициализатора и добавил war плагин в build.gradle. Загрузил сервер и проект на Яндекс,Диск:

Насколько я помню, в альтлинуксе любят занимать стандартный для томкета порт 8080 своим веб-интерфейсом конфигурирования и вполне возможно, что ваш томкет не запускается на самом деле корректно. Этот интерфейс конфигурирования надо удалять или учитывать в своей конфигурации server.xml, т.е. менять HTTP порт с 8080 на какой-нибудь другой.

Если не получится решить проблему, загрузите пожалуйста код приложения на котором эта проблема воспроизводится и я попробую его развернуть у себя.

wbr, Aleksey

Не увидел в вашем проекте плагин war в блоке plugins в build.gradle и наследование класса SpringBootServletInitializer. Проекты идентичные у нас по настройкам кроме вышеописанного и у меня еще в application.properties прописано spring.jmx.enabled=false. Возможно, с Tomcat версии 10.1.20 что-то не так, просто у нас все ПО с репозитория Alt Linux берется, а там только такая версия. С других источников ставить запрещено.

проверил на 10.1.20 и тоже все в порядке (разве что команду сборки поменялась на ./gradlew -Pvaadin.productionMode=true --no-build-cache clean bootWar что-бы обойти ошибку с билдом фронта) в т.ч. с вашей настройкой, проект перезалил. Проверить на альте займет несколько больше времени. А Вам с занятым портом удалось проверить гипотезу?

wbr, Aleksey

Вобщем, я поставил AltServer10 и после того как я поменял порт томката на 8081 в /etc/tomcat/server.xml, а также сервер и приложение настроил на использование PostgreSQL вместо HSQL, все развернулось нормально. Делал это копированием war’ки в /var/lib/tomcat/webapps. Сервис томкета после копирования перезапускал, т.к. хотдеплоя там похоже нет.

VirtualBox_AltServer10_23_04_2025_20_49_44

wbr, Aleksey

Tomcat на другом порту работает. Разные варианты перепробовал: Tomcat версии 10.1.20 и ваш с диска локально развернул, JDK менял на 21, соединение менял на PostgreSQL, все-равно не работает.

И ошибка всегда та же самая как в вопросе? Проверьте все ли у вас корректно оказывается в подкаталоге приложения webapps. Я некоторое время боролся с тем, что у меня деплоилась старая war’ка например.

Если есть возможность сделайте пример-проект на котором у вас воспроизводится проблема и я его проверю у себя.

wbr, Aleksey

Да, ошибка все та же.
Test.zip (1.1 МБ)

поменял репозитории на стандартные, базу с HSQL на PostgreSQL(на сервере сделал пользователя и пустую) и приложение развернулось

У нас сеть изолированная, репозиторий свой подняли. С PostgreSQL пытался тоже, не работает. У вас какой версии vaadin, spring и spring boot?

Vaadin 24.6.3
Spring 6.2.5
Spring Boot: 3.4.4

Думаю версии не принципиальны. Я брал Jmix 2.5.1 и делал изменения на базе документации и проекта который был на 2.4, которая, а также какие-то предыдущие тоже разворачивались без особых проблем. Все это деплоилось на разные версии томкета вызывая ошибки только относящиеся к конфигурации датасорса, ну и моих собственных неправильных действий. Скорее всего, у вас похожая ситуация и надо проверить:

  1. Удаляете ли вы старые версии из webapps, перед деплоем новой версии
  2. Корректна ли настроена новая версия
  3. Не забываете ли делать рестарт сервера и правильно ли смотрите логи, я пользовался journalctl и сверял время сообщений с текущим

Добрый день. Разобрался в чем проблема была. В конфигурационном файле context.xml был следующий блок: <JarScanner><JarScanFilter defaultPluggabilityScan="false" defaultTldScan="false"/></JarScanner>. Закомментировал его и все заработало. Спасибо за помощь!

1 симпатия