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 -  
frontContextName- имя веб-контекста для Polymer UI (имеет смысл для единого, web или portal JAR файлов). -  
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"/> <!-- ... --> - Задание свойств приложения на этапе развертывания
 -  
    
Возможен вариант задания свойств приложения уже в среде развертывания. Таким образом могут указываться значения, недоступные на момент сборки (например по соображениям безопасности). Примеры ниже представлены для проекта с названием "sample" и префиксом модулей по умолчанию "app".
1) Проделать изменения в файлах
web.xmlдля всех веб-приложений проекта. Изменить третью строчку в servlet context параметреappPropertiesConfig. Указать путь к файлуlocal.app.propertiesотносительно домашнего каталога приложения в следующем формате:"file:${app.home}/web-application-name/conf/local.app.properties"Например, для модуля
app-coreнужно отредактировать файлmodules/core/web/WEB-INF/web.xmlи проставить следующее содержимое вappPropertiesConfig:<!-- Application properties config files --> <context-param> <param-name>appPropertiesConfig</param-name> <param-value> classpath:com/company/sample/app.properties /WEB-INF/local.app.properties "file:${app.home}/app-core/conf/local.app.properties" </param-value> </context-param>2) Создать файлы
local.app.propertiesв домашнем каталоге приложения и заполнить их необходимыми значениями:admin@server:/opt/app_home$ cat app/conf/local.app.properties cuba.web.loginDialogDefaultUser=<disabled> cuba.web.loginDialogDefaultPassword=<disabled> admin@server:/opt/app_home$ cat app-core/conf/local.app.properties cuba.userSessionExpirationTimeoutSec = 72003) Убедиться, что при запуске приложения указывается корректный путь к домашнему каталогу приложения:
java -Dapp.home=/opt/app_home -jar app.jar4) Проверить логи запуска. Должны появиться следующие сообщения, по одному для каждого веб-приложения:
14:49:44.875 INFO c.h.c.c.s.AbstractWebAppContextLoader - Loading app properties from file:/opt/app_home/app-core/conf/local.app.properties ... 14:49:49.339 INFO c.h.c.c.s.AbstractWebAppContextLoader - Loading app properties from file:/opt/app_home/app/conf/local.app.properties ... - Остановка приложения
 -  
    
Корректно остановить приложение можно следующими способами:
-  
Нажав 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 -