Статьи

Микросервис WildFly Swarm JAX-RS в док-контейнере

В наши дни все говорят о микросервисах. И есть много мнений и идей и очень мало примеров о том, как применять эти принципы на уровне предприятия. Одно можно сказать наверняка, даже на конференциях всего пару дней назад я редко встречал кого-либо, кто запускал контейнер Docker в производстве. По крайней мере разумное количество рук поднялось, когда я спросил о первом опыте и о том, играл ли кто-то с ним. И, глядя на все знания операционного уровня (ОС, сеть и т. Д.), Необходимые для запуска контейнерной инфраструктуры, я могу понять все это. Многое нужно сделать, чтобы облегчить это разработчикам Enterprise Java. Действительно, есть некоторые способы, с помощью которых мы можем работать с повседневными инструментами и комбинировать их с новейшими технологиями для обучения. Одним из них является WildFly Swarm как легкий и простой способ создания полнофункциональных приложений Java EE. И этот пост в блоге покажет вам, как запустить это локально в Docker.

Что такое WildFly Swarm?

WildFly — это легкий, гибкий, многофункциональный сервер приложений, совместимый с Java EE 7. WildFly 9 даже представил 27-мегабайтный сервлет-дистрибутив . Оба являются прочной основой для ваших проектов Java Enterprise. Самая последняя версия WildFly 10.CR2 станет основой для следующего поддерживаемого Red Hat предложения сервера Java EE — Enterprise Application Platform 7.

WildFly Swarm отходит от статического объединения различных профилей и позволяет вам создавать свои собственные пользовательские функции среды выполнения Java EE. Но WildFly Swarm — это не просто настраиваемый сервер приложений; речь идет о объединении вашего приложения, включая соответствующие компоненты сервера приложений, в один исполняемый файл. Это также называется «fat-jar», который можно просто запустить с помощью java -jar. И пока мы говорим об этом: микросервисы обычно включают в себя полное приложение и свой стек, так что вы можете рассматривать каждое приложение WildFly Swarm как независимый и полностью содержащий микросервис.

Превращение приложения Java EE в Fat-Jar

Приложение Java EE можно упаковать в виде толстой банки WildFly Swarm, добавив зависимость Maven и плагин. Полный исходный код этого простого образца JAX-RS доступен по адресу https://github.com/myfear/WildFlySwarmDockerSample/ . Само приложение предоставляет конечную точку / rs / customer, которая просто выводит некоторый текст. Настоящее волшебство заключено в файле pom.xml. Мы идем сейчас через это.

Прежде всего, зависимость для API Java EE 7 и после этого это

1
2
3
4
5
<dependency>
            <groupId>org.wildfly.swarm</groupId>
            <artifactId>wildfly-swarm-jaxrs</artifactId>
            <version>${version.wildfly-swarm}</version>
   </dependency>

Плагин WildFly Swarm заботится об упаковке приложения:

01
02
03
04
05
06
07
08
09
10
11
12
<plugin>
                <groupId>org.wildfly.swarm</groupId>
                <artifactId>wildfly-swarm-plugin</artifactId>
                <version>${version.wildfly-swarm}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>package</goal>
                        </goals>
                    </execution>
                </executions>
    </plugin>

Это все магия. Вы можете создать приложение с помощью «mvn package». Вы найдете сам файл войны и дополнительное вложение «swarm-sample-1.0-SNAPSHOT-swarm.jar» в целевой папке. Если вы откроете это, вы можете найти папку m2repo со всеми зависимыми библиотеками и самим вашим приложением в папке _bootstrap \. Вы можете напрямую запустить его из командной строки в своем проекте maven (пользователи Windows могут столкнуться с этой проблемой ):

1
java -jar target/swarm-1.0-SNAPSHOT-swarm.jar

Перенаправление браузера на http: // localhost: 8080 / rs / customer покажет вам некоторые json

1
{"text":"WildFly Swarm Docker Application on OpenShift at http://192.168.99.100:32773/rs/ - Hostname: 093ca3279a43"}

Докеризация WildFly Swarm

В проекте WildFly Swarm есть несколько примеров Docker на github. В основном bash-скрипты и некоторые обёртки для документирования вашего проекта. Но есть кое-что еще лучше: плагин Docker Maven от Roland Huss. Я уже использовал его пару раз, и он также используется в этом примере. Все, что вам нужно сделать, это добавить плагин в ваш pom.xml .

1
2
3
4
5
 <plugin>
                <groupId>org.jolokia</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>${docker.maven.plugin.version}</version>
</plugin>

Конфигурация немного сложнее. (Спасибо Роланду за всю поддержку по электронной почте, которую он оказывал мне в последние пару дней!). Прежде всего, основы просты. Добавьте изображение в конфигурацию плагина и назовите его соответствующим образом. Я наследую от jboss / jdk-base: 8, и изображение получает имя и тег myfear / swarm-sample: latest ( Lines 77ff ). Конфигурация сборки предоставляет порт 8080 и определяет соответствующую точку входа (команда для запуска java с параметром -jar). Сборка изображения должна включать вложения проекта и включать вложение в качестве зависимости . Убедитесь, что сопоставление службы вывода и basedir соответствуют аргументу точки входа .

Давайте дадим ему пробный запуск

Убедитесь, что на вашем хосте установлена ​​программа docker-machine. Создайте машину разработчика и настройте соответствующие переменные среды. Теперь вы можете запустить:

1
mvn clean install docker:build docker:start -Ddocker.follow

( ПРИМЕЧАНИЕ: ошибка в плагине 10.3.5 Docker Maven на самом деле не может извлечь базовый образ прямо сейчас. Вам нужно вручную выполнить ‘docker pull jboss / jdk-base: 8’ перед выполнением запуска maven.)

Проект строится и контейнер запускается из образа.

рой

Поздравляем, теперь у вас есть работающий микросервис Java EE в вашем локальном экземпляре Docker. В следующем блоге мы рассмотрим, как взять это изображение, запустить его в OpenShift Origin и масштабировать в соответствии с вашими потребностями.