5.3.3. Развертывание WAR в WildFly

WAR-файлы с приложением CUBA можно разворачивать на сервере WildFly. Рассмотрим пример сборки WAR-файлов для приложения, использующего PostgreSQL, и их развертывания на сервере WildFly версии 18.0.1 под Windows.

  1. Откройте файл build.gradle на редактирование и добавьте зависимость для модуля global в секцию dependencies:

    runtime 'org.reactivestreams:reactive-streams:1.0.1'
  2. Соберите приложение и выполните CUBA > Build Tasks > Deploy, чтобы получить локальную инсталляцию Tomcat, в которой будут все необходимые зависимости для приложения.

  3. Подготовьте домашний каталог приложения:

    • Создайте каталог, который будет полностью доступен процессу сервера WildFly, например, C:\Users\UserName\app_home.

    • Скопируйте файл logback.xml из tomcat/conf в этот каталог и отредактируйте в нём свойство logDir следующим образом:

    <property name="logDir" value="${app.home}/logs"/>
  4. Настройте конфигурацию сервера 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.1.1.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>
  5. Создайте 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
  6. Соберите приложение:

    • Откройте диалог: дерево проектов CUBA > Project > Deployment > WAR Settings в Studio.

    • Включите флаг Build WAR.

    • Сохраните настройки.

    • Откройте файл build.gradle в IDE и добавьте свойство doAfter для копирования дескриптора развертывания WildFly в задачу buildWar:

      task buildWar(type: CubaWarBuilding) {
          appProperties = ['cuba.automaticDatabaseUpdate' : true]
          singleWar = false
          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]
          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.

  7. Скопируйте файлы app-core.war и app.war из каталога build\distributions\war в каталог WildFly \wildfly\standalone\deployments.

  8. Перезапустите WildFly.

  9. Приложение будет доступно по адресу http://localhost:8080/app. Логи записываются в домашний каталог приложения: C:\Users\UserName\app_home\logs.