5.3.2. Развертывание WAR в Jetty

Рассмотрим пример сборки WAR-файлов и их развертывания на сервере Jetty.

Мы будем использовать следующую структуру каталогов:

  • C:\work\jetty-home\ - дистрибутив Jetty;

  • C:\work\jetty-base\ - директория конфигурации Jetty, в ней хранятся конфигурационные файлы Jetty, дополнительные библиотеки и веб-приложения.

  • C:\work\app_home\ - домашний каталог CUBA приложения.

    1. Используйте диалог Дерево проектов CUBA > Project > Deployment > WAR Settings в Studio или вручную добавьте в конец build.gradle задачу сборки buildWar:

      task buildWar(type: CubaWarBuilding) {
          appHome = '${app.home}'
          appProperties = ['cuba.automaticDatabaseUpdate': 'true']
          singleWar = false
      }

      В данном случае собирается два WAR-файла, отдельно для блоков Middleware и Web Client.

    2. Запустите сборку, выбрав buildWar через командную строку (подразумевается что Gradle wrapper создан заранее):

      gradlew buildWar

      В результате в подкаталоге build\distributions\war проекта будут созданы файлы app-core.war и app.war.

    3. Создайте домашний каталог приложения на сервере, например, c:\work\app_home.

    4. Скопируйте файл logback.xml из локального сервера Tomcat (под-каталог проекта deploy/tomcat/conf) в домашний каталог приложения (c:\work\app_home) и отредактируйте свойство logDir в этом файле:

      <property name="logDir" value="${app.home}/logs"/>
    5. Загрузите и установите сервер Jetty, например в каталог c:\work\jetty-home. Данный пример тестировался на версии jetty-distribution-9.4.22.v20191022.zip.

    6. Создайте каталог c:\work\jetty-base, откройте в нем командную строку и выполните:

      java -jar c:\work\jetty-home\start.jar --add-to-start=http,jndi,deploy,plus,ext,resources
    7. Создайте файл c:\work\jetty-base\app-jetty.xml, содержащий определение пула соединений к базе данных. Содержимое файла для БД PostgreSQL должно основываться на следующем шаблоне:

      <?xml version="1.0"?>
      <!DOCTYPE Configure PUBLIC "-" "http://www.eclipse.org/jetty/configure_9_0.dtd">
      <Configure id="wac" class="org.eclipse.jetty.webapp.WebAppContext">
          <New id="CubaDS" class="org.eclipse.jetty.plus.jndi.Resource">
              <Arg/>
              <Arg>jdbc/CubaDS</Arg>
              <Arg>
                  <New class="org.apache.commons.dbcp2.BasicDataSource">
                      <Set name="driverClassName">org.postgresql.Driver</Set>
                      <Set name="url">jdbc:postgresql://localhost/db_name</Set>
                      <Set name="username">username</Set>
                      <Set name="password">password</Set>
                      <Set name="maxIdle">2</Set>
                      <Set name="maxTotal">20</Set>
                      <Set name="maxWaitMillis">5000</Set>
                  </New>
              </Arg>
          </New>
      </Configure>

      Файл app-jetty.xml для MS SQL должен соответствовать следующему шаблону:

      <?xml version="1.0"?>
      <!DOCTYPE Configure PUBLIC "-" "http://www.eclipse.org/jetty/configure_9_0.dtd">
      <Configure id="wac" class="org.eclipse.jetty.webapp.WebAppContext">
          <New id="CubaDS" class="org.eclipse.jetty.plus.jndi.Resource">
              <Arg/>
              <Arg>jdbc/CubaDS</Arg>
              <Arg>
                  <New class="org.apache.commons.dbcp2.BasicDataSource">
                      <Set name="driverClassName">com.microsoft.sqlserver.jdbc.SQLServerDriver</Set>
                      <Set name="url">jdbc:sqlserver://server_name;databaseName=db_name</Set>
                      <Set name="username">username</Set>
                      <Set name="password">password</Set>
                      <Set name="maxIdle">2</Set>
                      <Set name="maxTotal">20</Set>
                      <Set name="maxWaitMillis">5000</Set>
                  </New>
              </Arg>
          </New>
      </Configure>
    8. Скачайте следующие JAR-файлы, необходимые для функционирования пула соединений к БД и скопируйте их в папку c:\work\jetty-base\lib\ext. Два из них можно взять из проектного под-каталога deploy\tomcat\shared\lib:

      commons-pool2-2.6.2.jar
      commons-dbcp2-2.7.0.jar
      commons-logging-1.2.jar
    9. Скопируйте файл start.ini из дистрибутива Jetty в каталог c:\work\jetty-base. Добавьте следующий текст в начало файла c:\work\jetty-base\start.ini:

      --exec
      -Xdebug
      -agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n
      -Dapp.home=c:\work\app_home
      -Dlogback.configurationFile=c:\work\app_home\logback.xml
      app-jetty.xml
    10. Скопируйте JDBC-драйвер используемой базы данных в каталог c:\work\jetty-base\lib\ext. Файл драйвера можно взять из каталога deploy\tomcat\lib проекта. В случае PostgreSQL это файл postgresql-42.2.5.jar.

    11. Скопируйте файлы WAR в каталог c:\work\jetty-base\webapps.

    12. Откройте командную строку в каталоге c:\work\jetty-base и выполните:

      java -jar c:\work\jetty-home\start.jar
    13. Откройте http://localhost:8080/app в веб-браузере.