В наши дни все говорят о микросервисах. И есть много мнений и идей и очень мало примеров о том, как применять эти принципы на уровне предприятия. Одно можно сказать наверняка, даже на конференциях всего пару дней назад я редко встречал кого-либо, кто запускал контейнер 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 и масштабировать в соответствии с вашими потребностями.
Ссылка: | Микросервис WildFly Swarm JAX-RS в Docker-контейнере от нашего партнера JCG Маркуса Эйзела (Markus Eisele) из блога « Разработка программного обеспечения для предприятий с использованием Java» . |