Очень нужна возможность развертывать приложения 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 - запустил приложение
- все работает
Однако, если вы хотите вертикальное и горизонтальное расширение, посмотрите в сторону современных способов деплоймента.