Очень нужна возможность развертывать приложения Jmix на сервере Jboss. Если возможно, посоветуйте какой сервер можно использовать для одновременного развертывания нескольких приложений на одном сервере. У нас не получилось использовать Tomcat.
Добрый день,
С теоретической точки зрения ваша задача вполне решаема, однако придется переписать много конфигурацией Spring
и VAADIN
.
Грубо говоря у нас используется Embedded Tomсat (SpringBoot)
и на нем крутится VAADIN servlet
, потому для решения вашей проблемы вам придется выпилить из Spring Web
сам веб через конфигурации.
Если углубиться в этот вопрос, и говорить о чистом VAADIN v24+
, то они НЕ советуют использовать спринг бут стартер в связке с WildFly, вместо для JBoss использовать чистый Java EE стартер, потому я тоже не советую делать то, для чего не рассчитывался ни VAADIN
, ни Jmix
, как минимум потому, что вам самим в будущем придется поддерживать ваш бридж между SpringBoot
+ Vaadin
и WildFly
.
С уважением,
Дмитрий
Какой тогда вы посоветуете использовать сервер приложений?
Мы пробовали tomcat - приложения в нем работают будто по очереди. Пока в одном работают - другие висят.
WildFly как вы говорите проблематичен.
Что нам использовать?
Современный вариант
Лучше всего оставаться на embedded tomcat
.
Если вас так сильно волнует архитектура - лучше всего почитать документацию Spring Boot.
Не могу взяться советовать как вам лучше делать, но могу сказать что для Spring Boot обычно используют Embedded сервера
, например, самые часто используемые - Tomcat( з коробки)
, Jetty
и Netty(Rx)
.
С учетом что у нас используется Vaadin
, самая стандартная схема деплоя - K8s
+ Application
:
- 1 приложение на 1
Pod
- Несколько приложений смотрят в 1 LoadBalancer.
Получается стандарные горизонтальные расширения приложения.
Так же делают отдельные performance тесты, после которых делают выводы о вертикальном масштабировании серверов / Pod
, хватает ли им ресурсов.
Внешние deployment сервера
Вы можете сделать war
файл приложения, который можно положить во внешний Tomcat или Netty. Щас спросил, у нас тестировали такой способ деплоя, он работает:
Alternatively, Spring Boot applications can be packaged as WAR files as well. Follow the instructions in Spring Boot documentation how to do this.
В отличии от JBoss, данные веб сервера не ищут какие то EE - файлы, вероятнее из за которых и падает приложение.
UPD 1:
Только что проверил деплой во внешний томкат:
-
Проект:
Jmix version: 2.0.1
Jmix Studio plugin version: 2.0.1-232
IntelliJ version: IntelliJ IDEA 2023.2 (Ultimate Edition) -
Окружение:
Tomcat 10 (for Jakarta EE)
Java JDK 20 -
Все что я добавил:
gradle -apply plugin: 'war'
иimplementation 'org.springframework.boot:spring-boot-starter-tomcat:3.0.0'
SpringBootApplication -extends SpringBootServletInitializer
-
Перенес
.war
вwebapps
- запустил приложение
- все работает
Однако, если вы хотите вертикальное и горизонтальное расширение, посмотрите в сторону современных способов деплоймента.