[Из песочницы] Компактный сервер с настроенной перезагрузкой кода и sql-логами одной maven командой для продуктивной разработки
Хотелось бы поделиться опытом использования payara-micro в разработке корпоративных приложений. Надеюсь, что кому-то сэкономлю время, так как такое решение пришло далеко не сразу. Если вы уже используете Payara или Glassfish в качестве промышленного сервера, или только собираетесь окунуться в мир javaee, то payara-micro и эта статья для Вас.
Вам понадобится web-приложение, которое собирается посредством maven в war-архив, и Java 8 (на более старших работу не проверял).
Сначала приведу полный текст профиля, после чего мы его разберем на кусочки и дополним недостающими деталями, которые не видны в исходном коде.
micro
maven-dependency-plugin
2.6
copy-payara-micro
package
copy
${project.build.directory}
true
true
fish.payara.extras
payara-micro
jar
org.codehaus.mojo
exec-maven-plugin
1.2.1
exec
java
-XXaltjvm=dcevm
-javaagent:hotswap/hotswap-agent.jar
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9009
-Duser.language=en
-Duser.region=US
-Ddb.ora.url=jdbc:p6spy:oracle:thin:@localhost:1521:XE
-Ddb.pg.url=jdbc:p6spy:postgresql://localhost:5432/postgres
-jar
${project.build.directory}/${project.build.finalName}-microbundle.jar
--domainConfig
src/main/setup/domain.xml
--deploy
${project.build.directory}/${project.build.finalName}.war
--rootDir
${project.build.directory}/payaramicro
fish.payara.maven.plugins
payara-micro-maven-plugin
1.0.0
bundle
start
4.1.2.173
false
p6spy
p6spy
2.3.1
com.oracle
ojdbc6
11.2.0.3
org.postgresql
postgresql
42.2.0
fish.payara.extras
payara-micro
4.1.2.173
provided
p6spy
p6spy
2.3.1
provided
com.oracle
ojdbc6
11.2.0.3
provided
org.postgresql
postgresql
42.2.0
provided
Первое, что необходимо сделать — скачать сам архив payara-micro. Именно это и делает первый плагин (maven-dependency-plugin). Архив представляет собой полноценный сервер приложений, который может быть запущен из командной строки как простое java-приложение.
Последний плагин (payara-micro-maven-plugin) не имеет никаких особенностей и настроен на стабильно работающую версию payra-micro 4.1.2.173. Из возможностей плагина здесь используется функция запаковки web-приложения в специальный bundle, готовый к запуску. Есть и другие способы запуска payara-micro, но здесь они нам не пригодятся.
Осталось сгенерировать нужную командную строку и собрать все воедино. Для запуска из командной строки как раз и используется exec-maven-plugin. Рассмотрим подробнее параметры командной строки:
java
-XXaltjvm=dcevm
-javaagent:hotswap/hotswap-agent.jar
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9009
-Duser.language=en
-Duser.region=US
-Ddb.ora.url=jdbc:p6spy:oracle:thin:@localhost:1521:XE
-Ddb.pg.url=jdbc:p6spy:postgresql://localhost:5432/postgres
-jar
${project.build.directory}/${project.build.finalName}-microbundle.jar
--domainConfig
src/main/setup/domain.xml
--deploy
${project.build.directory}/${project.build.finalName}.war
--rootDir
${project.build.directory}/payaramicro
Первые два аргумента (-XXaltjvm=dcevm -javaagent: hotswap/hotswap-agent.jar) необходимы для изменения исходного кода без перезагрузки приложения. Благодаря второму аргументу (-agentlib: jdwp=transport=dt_socket, server=y, suspend=n, address=9009) мы сразу запускаем приложение в режиме отладки, что позволит через средства применения изменений кода в отладке в IDE изменять не только тело самих методов, но и добавлять новые поля и многое другое. Необходимо только подключиться отладчиком из IDE, скомпилировать измененный файл с исходным кодом и применить изменения.
Следующие два аргумента (-Duser.language=en -Duser.region=US) нужны для корректной работы jdbc-клиента с Oracle. Настройки подключения к тестовой СУБД передаются через -D аргументы. В своих приложениях я использую ссылку вида ${db.ora.url} на эти параметры в файле ресурсов, который автоматически создает их на старте. Подмена файла, который создает ресурсы с тестовыми или промышленными настройками тоже реализована через профиль в maven и его возможности фильтровать текстовые файлы.
Ключевые аргументы при запуске указывают путь (--domainConfig src/main/setup/domain.xml) до файла настроек домена, а так же путь до war-файла (--deploy ${project.build.directory}/${project.build.finalName}.war), подлежащего деплою на сервер. Настройки домена были мной получены на основании стандартного файла внутри архива. Содержимое приведу в качестве примера. Для использования в разработке указанных настроек более чем достаточно.
Также приведу пример файла описания ресурсов для их автоматического создания на старте приложения.
Установить dcevm можно отсюда. Обязательно устанавливайте ее как альтернативную JVM, чтобы всегда была возможность работать на обычной по умолчанию.
Скачать последнюю версию агента для неограниченного изменения исходного кода, а также перезагрузки кода внутри фреймворков подобных hibernate можно отсюда.
Идеи по настройке перезагрузки кода для payara были подчерпнуты отсюда. Но правда только сама идея, так как реализация для payara-micro там не рассматривается.
Благодаря библиотеке p6spy свои sql-логи вы можете найти в корневой папке проекта — файл spy.log. Библиотеку p6spy при необходимости можно настроить, но это уже тема совсем другой статьи.
После размещения описанного выше профиля в вашем pom.xml и дополнительных файлов, рассмотренных выше, в соответствующих папках вы сможете запустить свое приложение следующей командой:
mvn install exec:exec -P micro
И никаких дополнительных плагинов для сервера приложений в IDE не требуется…