5.3.6. Развертывание UberJAR

UberJAR - это простейший способ запустить приложение CUBA в режиме эксплуатации. Вы собираете единый all-in-one JAR-файл с помощью задачи Gradle buildUberJar (см. также вкладку Deployment > UberJAR Settings в Studio) и запускаете приложение из командной строки, используя команду java:

java -jar app.jar

Все параметры приложения определяются во время сборки, но могут быть переопределены при запуске (см. ниже). Порт веб-приложения по умолчанию - 8080, и оно доступно по адресу http://host:8080/app. Если в проекте есть Polymer UI, он будет доступен по умолчанию по адресу http://host:8080/app-front.

Можно также собрать отдельные JAR-файлы для Middleware и Web Client и запустить их аналогично:

java -jar app-core.jar

java -jar app.jar

Порт веб-клиента по умолчанию - 8080, он будет подключаться к middleware, использующему localhost:8079. Таким образом, выполнив эти две команды в двух разных терминалах Windows, вы сможете подключиться к веб-клиенту приложения по адресу http://localhost:8080/app.

Вы можете изменить параметры, определяемые во время сборки, передав свойства приложения через системные свойства Java. Кроме того, порты, имена контекстов и пути к конфигурационным файлам можно передавать в качестве аргументов командной строки.

Аргументы командной строки
  • port - задаёт порт, на котором будет работать встроенный HTTP-сервер. Например:

    java -jar app.jar -port 9090

    Следует учесть, что при указании порта для блока core необходимо также задать свойство приложения cuba.connectionUrlList для клиентских блоков, указав соответствующий адрес Middleware:

    java -jar app-core.jar -port 7070
    
    java -Dcuba.connectionUrlList=http://localhost:7070/app-core -jar app.jar
  • contextName - имя веб-контекста для данного блока приложения. Например, чтобы получить доступ к веб-клиенту по адресу http://localhost:8080/sales, выполните следующую команду:

    java -jar app.jar -contextName sales

    Чтобы подключиться к веб-клиенту по адресу http://localhost:8080, выполните команду:

    java -jar app.jar -contextName /
  • frontContextName - имя веб-контекста для Polymer UI (имеет смысл для единого, web или portal JAR файлов).

UberJAR не работает корректно с аргументами frontContextName, contextName для фронтенд клиентов на базе React.

  • portalContextName - имя веб-контекста для модуля portal, работающего в едином JAR.

  • jettyEnvPath - путь к файлу окружения Jetty, который переопределяет настройки, заданные внутри JAR параметром сборки coreJettyEnvPath. Может быть как абсолютным путём, так и относительным рабочего каталога.

  • jettyConfPath - путь к файлу конфигурации сервера Jetty, который переопределяет настройки, заданные внутри JAR параметром сборки webJettyConfPath/coreJettyConfPath/portalJettyConfPath. Может быть как абсолютным путём, так и относительным рабочего каталога.

Домашний каталог приложения

По умолчанию домашним каталогом является рабочий каталог приложения. Это означает, что каталоги приложения будут созданы в каталоге, из которого приложение запущено. Домашний каталог может быть также указан в системном свойстве app.home. Например, чтобы иметь домашний каталог в /opt/app_home, необходимо указать следующее в командной строке:

java -Dapp.home=/opt/app_home -jar app.jar
Логирование

Если необходимо изменить настройки логирования, заданные внутри JAR, то можно передать системное свойство Java logback.configurationFile с URL для загрузки внешнего конфигурационного файла, например:

java -Dlogback.configurationFile=file:./logback.xml -jar app.jar

Здесь подразумевается, что файл logback.xml расположен в папке, из которой запускается приложение.

Для правильного задания каталога логов убедитесь, что свойство logDir в logback.xml указывает на подкаталог logs домашнего каталога приложения:

<configuration debug="false">
    <property name="logDir" value="${app.home}/logs"/>
    <!-- ... -->
Задание свойств приложения на этапе развертывания

Возможен вариант задания свойств приложения уже в среде развертывания. Таким образом могут указываться значения, недоступные на момент сборки (например по соображениям безопасности).

Свойства приложения могут быть заданы в файле local.app.properties, через переменные окружения ОС или системные свойства Java, переданные в командной строке.

Файл local.app.properties должен находиться в домашнем каталоге приложения. Им является текущий рабочий каталог, если вы не задали иной путь в аргументе командной строки -Dapp.home=some_path. Например:

local.app.properties
cuba.web.loginDialogDefaultUser = <disabled>
cuba.web.loginDialogDefaultPassword = <disabled>

Если используются переменнные окружения ОС, то можно задавать имя свойства в верхнем регистре и с точками замененными на подчеркивания:

export CUBA_WEB_LOGINDIALOGDEFAULTUSER="<disabled>"
export CUBA_WEB_LOGINDIALOGDEFAULTPASSWORD="<disabled>"

Системные свойства Java должны быть указаны в командной строке (имейте в виду, что они будут видны в менеджерах задач и в выводе команды ps):

java -Dcuba.web.loginDialogDefaultUser=<disabled> -Dcuba.web.loginDialogDefaultPassword=<disabled> -jar app.jar

Переменнные окружения ОС переопределяют значения, заданные в файлах app.properties, системные свойства Java переопределяют и переменные окружения, и файлы.

Остановка приложения

Корректно остановить приложение можно следующими способами:

  • Нажав Ctrl+C в окне терминала, в котором работает приложение.

  • Выполнив kill <PID> в Unix-like системе.

  • Послав ключ (последовательность символов) остановки на порт, указанный в командной строке запущенного приложения. Следующие аргументы командной строки имеют отношение к остановке:

    • stopPort - порт прослушивания и посылки ключа остановки.

    • stopKey - ключ остановки. Если не указан, используется SHUTDOWN.

    • stop - остановить другой процесс отсылкой ключа.

Например:

# Start application 1 and listen to SHUTDOWN key on port 9090
java -jar app.jar -stopPort 9090

# Start application 2 and listen to MYKEY key on port 9090
java -jar app.jar -stopPort 9090 -stopKey MYKEY

# Shutdown application 1
java -jar app.jar -stop -stopPort 9090

# Shutdown application 2
java -jar app.jar -stop -stopPort 9090 -stopKey MYKEY