5.3.3. Развертывание WAR в WildFly
WAR-файлы с приложением CUBA можно разворачивать на сервере WildFly. Рассмотрим пример сборки WAR-файлов для приложения, использующего PostgreSQL, и их развертывания на сервере WildFly версии 18.0.0 под Windows.
-
Откройте файл
build.gradle
на редактирование и добавьте зависимость для модуля global в секциюdependencies
:runtime 'org.reactivestreams:reactive-streams:1.0.1'
-
Соберите приложение и выполните CUBA > Build Tasks > Deploy, чтобы получить локальную инсталляцию Tomcat, в которой будут все необходимые зависимости для приложения.
-
Подготовьте домашний каталог приложения:
-
Создайте каталог, который будет полностью доступен процессу сервера WildFly, например,
C:\Users\UserName\app_home
. -
Скопируйте файл
logback.xml
изtomcat/conf
в этот каталог и отредактируйте в нём свойствоlogDir
следующим образом:
<property name="logDir" value="${app.home}/logs"/>
-
-
Настройте конфигурацию сервера WildFly:
-
Установите WildFly, например, в каталог
C:\wildfly
. -
Отредактируйте файл
\wildfly\bin\standalone.conf.bat
, добавив в конец следующую строку:
set "JAVA_OPTS=%JAVA_OPTS% -Dapp.home=%USERPROFILE%/app_home -Dlogback.configurationFile=%USERPROFILE%/app_home/logback.xml"
Здесь мы задаём системное свойство
app.home
, содержащее домашний каталог приложения, и указываем, где находится конфигурационный файлlogback.xml
. Вместо переменной%USERPROFILE%
можно использовать абсолютный путь.-
Сравните версии Hibernate Validator в WildFly и приложении CUBA. Если платформа использует более свежую версию, замените файл
\wildfly\modules\system\layers\base\org\hibernate\validator\main\hibernate-validator-x.y.z-sometext.jar
более новым файлом из каталогаtomcat\shared\lib
, например,hibernate-validator-6.0.16.Final.jar
. -
Обновите номер версии указанного JAR-файла в файле
\wildfly\modules\system\layers\base\org\hibernate\validator\main\module.xml
. -
Зарегистрируйте драйвер PostgreSQL в WildFly, скопировав файл
postgresql-42.2.5.jar
из каталогаtomcat\lib
в\wildfly\standalone\deployments
. -
Настройте логирование WildFly: отредактируйте файл
\wildfly\standalone\configuration\standalone.xml
, добавив две строки в блок<subsystem xmlns="urn:jboss:domain:logging:{version}"
:<subsystem xmlns="urn:jboss:domain:logging:8.0"> <add-logging-api-dependencies value="false"/> <use-deployment-logging-config value="false"/> . . . </subsystem>
-
-
Создайте JDBC Datasource:
-
Запустите WildFly, выполнив
standalone.bat
. -
Откройте консоль администратора по адресу
http://localhost:9990
. При первом входе потребуется создать пользователя и задать пароль. -
Перейдите в раздел Configuration - Subsystems - Datasources and Drivers - Datasources и добавьте источник данных для вашего приложения:
Name: Cuba JNDI Name: java:/jdbc/CubaDS JDBC Driver: postgresql-42.2.5.jar Driver Module Name: org.postgresql Driver Class Name: org.postgresql.Driver Connection URL: URL вашей БД Username: имя пользователя БД Password: пароль БД
Драйвер JDBC будет доступен в списке обнаруженных драйверов, если вы скопировали файл
postgresql-x.y.z.jar
на предыдущем шаге.Выполните проверку соединения, нажав кнопку Test connection.
-
Активируйте источник данных.
-
Как вариант, вы можете также создать JDBC Datasource используя утилиту командной строки
bin/jboss-cli.bat
:[disconnected /] connect [standalone@localhost:9990 /] data-source add --name=Cuba --jndi-name="java:/jdbc/CubaDS" --driver-name=postgresql-42.2.5.jar --user-name=dblogin --password=dbpassword --connection-url="jdbc:postgresql://dbhost/dbname" [standalone@localhost:9990 /] quit
-
-
Соберите приложение:
-
Откройте диалог: дерево проектов CUBA > Project > Deployment > WAR Settings в Studio.
-
Включите флаг Build WAR.
-
Задайте значение
${app.home}
в поле Application home directory. -
Сохраните настройки.
-
Откройте файл build.gradle в IDE и добавьте свойство
doAfter
для копирования дескриптора развертывания WildFly в задачу buildWar:task buildWar(type: CubaWarBuilding) { appProperties = ['cuba.automaticDatabaseUpdate' : true] singleWar = false appHome = '${app.home}' doAfter = { copy { from 'jboss-deployment-structure.xml' into "${project.buildDir}/tmp/buildWar/core/war/META-INF/" } copy { from 'jboss-deployment-structure.xml' into "${project.buildDir}/tmp/buildWar/web/war/META-INF/" } } }
Для конфигурации singleWAR задача будет отличаться:
task buildWar(type: CubaWarBuilding) { webXmlPath = 'modules/web/web/WEB-INF/single-war-web.xml' appProperties = ['cuba.automaticDatabaseUpdate' : true] appHome = '${app.home}' doAfter = { copy { from 'jboss-deployment-structure.xml' into "${project.buildDir}/tmp/buildWar/META-INF/" } } }
Если ваш проект также содержит модуль Polymer, нужно добавить в файл
single-war-web.xml
следующую конфигурацию:<servlet> <servlet-name>default</servlet-name> <init-param> <param-name>resolve-against-context-root</param-name> <param-value>true</param-value> </init-param> </servlet>
-
В корневом каталоге проекта создайте файл
jboss-deployment-structure.xml
и добавьте в него дескриптор развертывания WildFly:
<?xml version="1.0" encoding="UTF-8"?> <jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0"> <deployment> <exclusions> <module name="org.apache.commons.logging" /> <module name="org.apache.log4j" /> <module name="org.jboss.logging" /> <module name="org.jboss.logging.jul-to-slf4j-stub" /> <module name="org.jboss.logmanager" /> <module name="org.jboss.logmanager.log4j" /> <module name="org.slf4j" /> <module name="org.slf4j.impl" /> <module name="org.slf4j.jcl-over-slf4j" /> </exclusions> </deployment> </jboss-deployment-structure>
-
Запустите сборку WAR-файлов с помощью задачи
buildWar
.
-
-
Скопируйте файлы
app-core.war
иapp.war
из каталогаbuild\distributions\war
в каталог WildFly\wildfly\standalone\deployments
. -
Перезапустите WildFLy.
-
Приложение будет доступно по адресу
http://localhost:8080/app
. Логи записываются в домашний каталог приложения:C:\Users\UserName\app_home\logs
.