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

WAR-файлы с приложением CUBA можно разворачивать на сервере WildFly. Рассмотрим пример сборки WAR-файлов для приложения, использующего PostgreSQL 9.6, и их развертывания на сервере WildFly версии 8.2 под 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.

    • Отредактируйте файл C:\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 (платформа обычно использует более свежую версию). Замените файл C:/wildfly/modules/system/layers/base/org/hibernate/validator/main/hibernate-validator-x.y.z-sometext.jar более новым файлом из каталога tomcat/shared/lib, например, hibernate-validator-5.4.1.Final.jar.

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

    • Зарегистрируйте драйвер PostgreSQL в WildFly, скопировав файл postgresql-9.4-1201-jdbc41.jar из каталога tomcat/lib в C:\wildfly\standalone\deployments.

      Tip

      Для WildFly 11 процедура установки драйвера PostgreSQL будет отличаться. Сначала вам необходимо отредактировать файл module.xml следующим образом:

      <module xmlns="urn:jboss:module:1.1" name="org.postgresql">
      
          <resources>
              <resource-root path="postgresql-9.4.1212.jar"/>
          </resources>
      
          <dependencies>
              <module name="javax.api"/>
              <module name="javax.transaction.api"/>
          </dependencies>
      </module>

      Затем из папки bin запустите jboss-cli и выполните следующую команду:

      /subsystem=datasources/jdbc-driver=postgresql:add(driver-name=postgresql, driver-module-name=org.postgresql, driver-class-name=org.postgresql.Driver)
  4. Создайте JDBC Datasource:

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

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

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

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

    • Включите флаг Include JDBC driver.

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

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

      task buildWar(type: CubaWarBuilding) {
          includeJdbcDriver = true
          appProperties = ['cuba.automaticDatabaseUpdate' : true]
          singleWar = false
          appHome = '${app.home}'
          doAfter = {
              copy {
                  from 'jboss-deployment-structure.xml'
                  into "${project.buildDir}/tmp/core/war/META-INF/"
              }
              copy {
                  from 'jboss-deployment-structure.xml'
                  into "${project.buildDir}/tmp/web/war/META-INF/"
              }
          }
      }
      Tip

      Для конфигурации singleWAR задача будет отличаться:

      task buildWar(type: CubaWarBuilding) {
          webXmlPath = 'modules/web/web/WEB-INF/single-war-web.xml'
          appProperties = ['cuba.automaticDatabaseUpdate' : true]
          includeJdbcDriver = true
          appHome = '${app.home}'
          doAfter = {
              copy {
                  from 'jboss-deployment-structure.xml'
                  into "${project.buildDir}/tmp/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 C:\wildfly\standalone\deployments.

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

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