Привет! Начать хочу с небольшой статьи мануала, как подружить WildFly с Maven.
Wildfly – Это ребрендинг и развитие JBoss AS7/EAP6 в области как администрирования, так и API для разработчика. Wildfly построен с использованием Java SE 7. Отлично интегрируется с основными Java IDE. Краткая цитата из статьи
Немного официальной информации о 10 версии
- Реализация сертифицирована на соответствие Full- и Web-профилям Java EE 7. Код WildFly распространяется под лицензией LGPL;
- В отличие от коммерческого продукта JBoss Enterprise Application Platform, позиционируемого как полностью протестированная и сертифицированная платформа Java EE, WildFly ориентирован, прежде всего, на продвижение технологий. WildFly выступает в роли upstream-проекта для коммерческого продукта JBoss Enterprise. В качестве основной области использования WildFly рассматривается разработка и быстрое внедрение прототипов.
Основные особенности релиза
- Прекращена поддержка Java 7, что позволило обеспечить более глубокую интеграцию с Java 8 Runtime. Добавлена поддержка текущих снапшотов Java 9;
- Поставка ActiveMQ Artemis в качестве брокера рассылки сообщений (Java Message Service Broker), совместимого на уровне протокола и заменившего собой HornetQ;
- Поддержка запуска хост-контроллера при помощи CLI. Новая команда embed-host-controller позволяет редактировать содержимое файлов domain.xml и host.xml без запуска дополнительных процессов или открытия сетевых сокетов;
- Поддержка JavaScript в http-сервере Undertow.io, позволяющая создавать на языке JavaScript серверные скрипты, которые могут обращаться к CDI Beans и JPA Entity Beans. Указанную возможность удобно использовать для создания внешних обвязок или REST-обработчиков. Отредактированный код JavaScript становится доступен сразу и не требует перезапуска приложения;
- Поддержка одиночного отказоустойчивого развёртывания приложения («singleton deployment»), при котором в случае использования группы кластеризованных серверов развёртывание будет произведено только на одном узле, но в случае выхода этого узла из строя, приложение будет автоматически перенесено на другой узел;
- Поддержка одиночного отказоустойчивого брокера рассылки сообщений (Singleton MDB), запускающего доставку только на одном узле, но в случае сбоя использующего для обработки сообщений другой узел;
- Автоматический выбор размера пула SLSB и MDB, в зависимости от имеющихся системных ресурсов;
- Средства для миграции устаревших подсистем, таких как jbossweb (AS 7.1), jacorb (WildFly 8) и hornetq (WildFly 9), которые автоматизируют преобразование старых конфигураций в эквиваленты, работающие в WildFly 10;
- В реализации Hibernate 5 значительно улучшено качество байткода, внесены оптимизации производительности и добавлены улучшения в API.
Хочу рассказать об автоматическом деплое в Wildfly с помощью Maven, а так же рассказать кратко о запускe UI в том же самом контейнере.
Необходимо использовать Maven версии не ниже 3.3.9( использую maven 3.5.0 ), иначе Wildfly Plugin не будет работать.
Версия Wildfly, который на данный момент использую — 10.1.0-Final, версия плагина — 1.2.0.Alpha4
В Pom.XML собираемого приложения необходимо прописать данные для подключения к серверу Wildfly
Пример:
<plugin>
<groupId>org.wildfly.plugins</groupId>
<artifactId>wildfly-maven-plugin</artifactId>
<configuration>
<hostname>${wildfly-hostname}</hostname>
<port>${wildfly-port}</port>
<username>${wildfly-username}</username>
<password>${wildfly-password}</password>
<name>${wildfly-name}</name>
</configuration>
</plugin>
Так же хорошей практикой может быть вынос настроек в settings.xml либо в pom.xml уровнем выше. Это позволит так же использовать профили при деплое – локальный деплой, деплой на прод.
Область профилей в settings.xml.
<profile>
<id>localhost</id>
<properties>
<wildfly-hostname>localhost</wildfly-hostname>
<wildfly-port>9990</wildfly-port>
<wildfly-username>admin</wildfly-username>
<wildfly-password>admin</wildfly-password>
<wildfly-name>core.war</wildfly-name>
</properties>
</profile>
<profile>
<id>dev</id>
<properties>
<wildfly-hostname>Prod_Server</wildfly-hostname>
<wildfly-port>9990</wildfly-port>
<wildfly-username>admin</wildfly-username>
<wildfly-password>admin</wildfly-password>
<wildfly-name>core-prod_vers.war</wildfly-name>
</properties>
</profile>
После всех настроек, с помощью maven, из командной строки, из IDE, из, например, Jenkins (maven plugin), можно будет деплоить war c помощью mvn wildfly:deploy, так же можно использовать mvn wildfly:undeploy и mvn wildfly:redeploy для удаления и передеплоя соответственно. Выбор профиля -Plocalhost позволит запускать с настройками из профиля с id localhost, -Pdev соответственно запускает для прода( все данные в настройках дефолтны или вымышлены).
При верной настройке в WildFly консоле в разделе deployments у Вас появится необходимый war.
Кроме этого, WildFly позволяет запускать UI.
Настройка WildFly для запуска UI:
Проект помещать в корень WildFLy в директорию, которую Вы сами выберете для Вашего UI.
В данном примере я использовал директорию UI.
В файле /PathToWildfly/standalone/configuration/standalone.xml необходимо добавить строки(строки с учетом соседних строк, для облегчения поиска):
<location name="/" handler="welcome-content"/>
<location name="/UI/" handler="UI"/>
<filter-ref name="server-header"/>
<filter-ref name="x-powered-by-header"/>
<handlers>
<file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
<file name="UI" path="${jboss.home.dir}/UI/widget/build"/>
После этого WildFLy автоматически подхватывает изменения и по адресу localhost:8080/UI будет доступно ваше приложение.
На данный момент запуск был осуществлен с помощью команды ./standalone.sh -b=0.0.0.0 -bmanagement=0.0.0.0, приложение работает на Linux Oracle в screen.
За время использования были выявлены 2 проблемы:
- Иногда перезапуск WildFLy затягивается и долго подтягивается localhost:9990 — консоль.
- При запуске из Jenkins на Maven 3.3.9 с тэгом redeploy происходит утекание памяти и приложение удаляет обе версии war и ругается на дубликат. (Воспроизводится не всегда)
Данная связка около 2 месяцев, кроме вышеописанных, проблем не встречал. Всем рулит Jenkins в данном случае, он стартует и mvn wildfly:undeploy mvn wildfly:deploy ( использую такую стратегию, т.к. redeploy не отрабатывает) и доставляет собранный UI в директорию UI, обновление происходит по ночам, полёт нормальный.
Так же тестировал запуск на win хосте, отличий не заметил в работе, все так же стабильно.
Автор: SicYar