«Совершенство достигается не тогда, когда нечего добавить, а когда нечего убрать» Антуан де Сент-Экзюпери
Эта цитата французского писателя Антуана де Сент-Экзюпери была сделана, чтобы доказать, что часто меньше значит больше. Это верно для архитектора, художника, дизайнера, писателя, работающего, разработчика программного обеспечения или любой другой профессии. Простота, минимализм, срезание суеты всегда проходит долгий путь и имеет ряд преимуществ по сравнению с чем-то раздутым.
Что такое WildFly Swarm?
WildFly — это легкий, гибкий, многофункциональный сервер приложений, совместимый с Java EE 7. WildFly 9 даже представил 27-мегабайтный сервлет-дистрибутив . Они очень хорошо подходят для вашего предприятия и веб-приложений.
WildFly Swarm занимает немного выше. Из объявления :
WildFly Swarm — это новый проект коляски, поддерживающий WildFly 9.x, который позволяет деконструировать WildFly AS и вставлять достаточно его вместе с вашим приложением для создания автономного исполняемого фляги. WildFly Swarm
Типичная модель разработки приложения для приложения Java EE — создать архив EAR или WAR и развернуть его на сервере приложений. Все зависимости, такие как реализации Java EE, упакованы на сервере приложений и обеспечивают функциональность, требуемую классами приложений. Можно развернуть несколько архивов, и все они используют одни и те же библиотеки. Это хорошо понятная модель, которая использовалась в течение последних нескольких лет.
WildFly Swarm переворачивает таблицу, где создает «толстую банку», в которой все зависимости упакованы в файл JAR. Это включает в себя минималистскую версию WildFly, любые необходимые зависимости и, конечно же, сам код приложения. Приложение можно просто запустить с помощью java -jar
.
Каждый толстый сосуд может быть микросервисом, который затем может самостоятельно модернизироваться, заменяться или масштабироваться. Каждый жирный кувшин обычно будет следовать принципу единой ответственности и, таким образом, будет упакован только требуемые зависимости. Каждый JAR может использовать постоянство полиглота и использовать только необходимый механизм сохранения.
Покажи мне код!
Приложение Java EE можно упаковать в виде толстой банки WildFly Swarm, добавив зависимость Maven и плагин. Полный исходный код для простого образца JAX-RS доступен по адресу github.com/arun-gupta/wildfly-samples/tree/master/swarm .
WildFly Swarm Maven Dependency
Добавьте следующую зависимость Maven в pom.xml
:
1
2
3
4
5
6
|
< dependency > < groupId >org.wildfly.swarm</ groupId > < artifactId >wildfly-swarm-jaxrs</ artifactId > < version >${version.wildfly-swarm}</ version > < scope >provided</ scope > </ dependency > |
Плагин WildFly Swarm Maven
Добавьте следующий плагин Maven в pom.xml
:
01
02
03
04
05
06
07
08
09
10
11
12
13
|
< plugin > < groupId >org.wildfly.swarm</ groupId > < artifactId >wildfly-swarm-plugin</ artifactId > < version >${version.wildfly-swarm}</ version > < executions > < execution > < phase >package</ phase > < goals > < goal >create</ goal > </ goals > </ execution > </ executions > </ plugin > |
Создать WildFly Swarm Fat Jar
Жирную банку можно легко создать, вызвав стандартную цель Maven:
1
|
maven package |
Это создает файл JAR с использованием обычных соглашений Maven и добавляет -swarm
в конце. Имя сгенерированного файла WAR в нашем примере — swarm-1.0-SNAPSHOT-swarm.jar
.
Сгенерированный файл WAR имеет размер ~ 30 МБ, имеет 134 JAR (все в m2repo
) и 211 классов. Код приложения находится в app/swarm-1.0-SNAPSHOT.war
.
Run WildFly Swarm Fat Jar
Эта дальняя банка может быть запущена как:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
|
swarm> java -jar target /swarm-1 .0-SNAPSHOT-swarm.jar 12:27:10,622 INFO [org.jboss.msc] (main) JBoss MSC version 1.2.4.Final 12:27:10,739 INFO [org.jboss.as] (MSC service thread 1-6) WFLYSRV0049: WildFly Core 1.0.0.CR1 "Kenny" starting 2015-05-06 12:27:11,185 INFO [org.jboss.as.security] (ServerService Thread Pool -- 11) WFLYSEC0002: Activating Security Subsystem 2015-05-06 12:27:11,189 INFO [org.jboss.as.security] (MSC service thread 1-10) WFLYSEC0001: Current PicketBox version=4.9.0.Beta2 2015-05-06 12:27:11,194 INFO [org.wildfly.extension.io] (ServerService Thread Pool -- 13) WFLYIO001: Worker 'default' has auto-configured to 16 core threads with 128 task threads based on your 8 available processors 2015-05-06 12:27:11,199 INFO [org.jboss.as.naming] (ServerService Thread Pool -- 12) WFLYNAM0001: Activating Naming Subsystem 2015-05-06 12:27:11,246 INFO [org.jboss.as.naming] (MSC service thread 1-12) WFLYNAM0003: Starting Naming Service 2015-05-06 12:27:11,319 INFO [org.wildfly.extension.undertow] (MSC service thread 1-8) WFLYUT0003: Undertow 1.2.4.Final starting 2015-05-06 12:27:11,319 INFO [org.wildfly.extension.undertow] (ServerService Thread Pool -- 14) WFLYUT0003: Undertow 1.2.4.Final starting 2015-05-06 12:27:11,337 INFO [org.xnio] (MSC service thread 1-7) XNIO version 3.3.1.Final 2015-05-06 12:27:11,343 INFO [org.xnio.nio] (MSC service thread 1-7) XNIO NIO Implementation Version 3.3.1.Final 2015-05-06 12:27:11,369 INFO [org.wildfly.extension.undertow] (MSC service thread 1-13) WFLYUT0012: Started server default-server. 2015-05-06 12:27:11,409 INFO [org.wildfly.extension.undertow] (MSC service thread 1-8) WFLYUT0006: Undertow HTTP listener default listening on /127 .0.0.1:8080 2015-05-06 12:27:11,543 INFO [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: WildFly Core 1.0.0.CR1 "Kenny" started in 855ms - Started 64 of 70 services (13 services are lazy, passive or on-demand) 2015-05-06 12:27:11,570 INFO [org.jboss.as.server.deployment] (MSC service thread 1-3) WFLYSRV0027: Starting deployment of "swarm-1.0-SNAPSHOT.war" (runtime-name: "swarm-1.0-SNAPSHOT.war" ) 2015-05-06 12:27:11,724 INFO [org.wildfly.extension.undertow] (MSC service thread 1-1) WFLYUT0018: Host default-host starting 2015-05-06 12:27:11,906 INFO [org.jboss.resteasy.spi.ResteasyDeployment] (MSC service thread 1-14) Deploying javax.ws.rs.core.Application: class org.wildfly.samples.swarm.MyApplication 2015-05-06 12:27:11,923 INFO [org.wildfly.extension.undertow] (MSC service thread 1-14) WFLYUT0021: Registered web context: / 2015-05-06 12:27:11,944 INFO [org.jboss.as.server] (main) WFLYSRV0010: Deployed "swarm-1.0-SNAPSHOT.war" (runtime-name : "swarm-1.0-SNAPSHOT.war" ) |
Ответ может быть проверен как:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
target> curl - v http: //127 .0.0.1:8080 /resources/resource * Hostname was NOT found in DNS cache * Trying 127.0.0.1... * Connected to 127.0.0.1 (127.0.0.1) port 8080 ( #0) > GET /resources/resource HTTP /1 .1 > User-Agent: curl /7 .37.1 > Host: 127.0.0.1:8080 > Accept: */* > < HTTP /1 .1 200 OK < Connection: keep-alive < Content-Type: application /octet-stream < Content-Length: 12 < Date: Wed, 06 May 2015 19:29:10 GMT < * Connection #0 to host 127.0.0.1 left intact hello swarm! |
Блог WildFly Swarm Release включает множество блогов о сервлете , JAX-RS с ShrinkWrap , источнике данных через развертывание , обмене сообщениями и JAX-RS и многом другом.
WildFly Swarm Следующие шаги
Это всего лишь версия 1.0.0.Alpha1, поэтому не стесняйтесь опробовать образцы и оставить отзыв, сообщив о проблеме .
Вы обладаете мощью всех подсистем WildFly и даже можете создать встраиваемый контейнер Java EE, как показано в блоге выпуска :
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
public class Main { public static void main(String[] args) throws Exception { Container container = new Container(); container.subsystem( new MessagingFraction() .server( new MessagingServer() .enableInVmConnector() .topic( "my-topic" ) .queue( "my-queue" ) ) ); // Start the container container.start(); JaxRsDeployment appDeployment = new JaxRsDeployment(); appDeployment.addResource(MyResource. class ); // Deploy your JAX-RS app container.deploy(appDeployment); // Create an MSC deployment ServiceDeployment deployment = new ServiceDeployment(); deployment.addService( new MyService( "/jms/topic/my-topic" ) ); // Deploy the services container.deploy( deployment ); } } |
Последующие блоги покажут, как легко создать микросервис с помощью WildFly Swarm.
WildFly Swarm Оставайтесь на связи
Вы можете идти в ногу с проектом через комнату WildFly HipChat , @wildflyswarm в Твиттере или через GitHub Issues .
Ссылка: | WildFly Swarm: Создание микросервисов с помощью Java EE от нашего партнера по JCG Аруна Гупта в блоге Miles to go 2.0… . |