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

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

  1. Соберите приложение и выполните Run - Deploy, чтобы получить локальную инсталляцию Tomcat, в которой будут все необходимые зависимости для приложения.

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

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

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

    <property name="logDir" value="${app.home}/logs"/>
  3. Настройте конфигурацию сервера 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-5.4.2.Final.jar.

    • Обновите номер версии указанного JAR-файла в файле \wildfly\modules\system\layers\base\org\hibernate\validator\main\module.xml.

    • Зарегистрируйте драйвер PostgreSQL в WildFly, скопировав файл postgresql-9.4.1212.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:6.0">
          <add-logging-api-dependencies value="false"/>
          <use-deployment-logging-config value="false"/>
          . . .
      </subsystem>
  4. Создайте JDBC Datasource:

    • Запустите WildFly, выполнив standalone.bat.

    • Откройте консоль администратора по адресу http://localhost:9990. При первом входе потребуется создать пользователя и задать пароль.

    • Перейдите в раздел Configuration - Subsystems - Datasources and Drivers - Datasources и добавьте источник данных для вашего приложения:

    Name: Cuba
    JNDI Name: java:/jdbc/CubaDS
    JDBC Driver: postgresql-9.4.1212.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.

    • Активируйте источник данных.

  5. Соберите приложение:

    • Откройте вкладку Deployment settings > WAR в 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}/buildWar/core/war/META-INF/"
              }
              copy {
                  from 'jboss-deployment-structure.xml'
                  into "${project.buildDir}/buildWar/web/war/META-INF/"
              }
          }
      }
      Tip

      Для конфигурации 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}/buildWar/war/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.

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

  7. Перезапустите WildFLy.

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