wildfly-swarm とは
- JavaEE アプリケーションを Dropwizard や Spring Boot のようにコンテナごと fat JAR 化する
- 先日 1.0.0.Alpha4 がリリース
- WildFly 10.0.0.Beta1をベース
- 以前から要望のあった Netflix OSS サポート(Ribbon, Hystrix)
- Keycloak による認証
- Logstash によるログの収集
などなどJavaEEの基本機能に加え、マイクロサービス向けの機能が盛り込まれている。
使い方
以前は Maven のサポートのみだったが、Gradle むけプラグインが出来た。
以下でプロジェクト作成。
mkdir wildfly-swarm-example1 cd wildfly-swarm-example1 gradle init --type java-library
プラグインの導入は build.gradle に以下のように定義する。
buildscript { version = '1.0.0.Alpha4-SNAPSHOT' repositories { jcenter() } dependencies { classpath 'org.wildfly.swarm:wildfly-swarm-plugin:1.0.0.Alpha4' } } apply plugin: 'wildfly-swarm'
アプリケーションは Mainメソッドから起動するので mainClassName を指定し、swarm プラグインの設定でポートを定義する。
mainClassName = 'example.Main' swarm { properties { jboss.http.port = 8080 } }
build.gradle 全体は以下のようになる。
buildscript { version = '1.0.0.Alpha4-SNAPSHOT' repositories { jcenter() } dependencies { classpath 'org.wildfly.swarm:wildfly-swarm-plugin:1.0.0.Alpha4' } } apply plugin: 'wildfly-swarm' apply plugin: 'java' apply plugin: 'application' mainClassName = 'example.Main' swarm { properties { jboss.http.port = 8080 } } repositories { jcenter() } dependencies { compile "org.wildfly.swarm:wildfly-swarm-jaxrs:1.0.0.Alpha4" compile 'org.slf4j:slf4j-api:1.7.7' testCompile 'junit:junit:4.12' }
JAX-RS リソースとして以下を作成する。
package example; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; @Path("/") public class MyResource { @GET @Produces("text/plain") public String get() { return "Hello"; } }
アプリケーションはMainメソッドにて ShrinkWrap を使って仮想的なアーカイブを作成してデプロイする。
package example; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.wildfly.swarm.container.Container; import org.wildfly.swarm.jaxrs.JAXRSArchive; public class Main { public static void main(String... args) throws Exception { Container container = new Container(); JAXRSArchive deployment = ShrinkWrap.create(JAXRSArchive.class); deployment.addClass(MyResource.class); deployment.addAllDependencies(); container.start().deploy(deployment); } }
JAXRSArchive として deployment.addClass(MyResource.class)
にてJAXRS リソースデプロイに追加する。
実行
以下で wildfly-swarm-example1-swarm.jar
jarファイル作成する。
./gradlew clean wildfly-swarm-package
jarファイルができるので、あとは実行するだけ。
wildfly-swarm-example1-swarm.jar
を実行。
java -jar ./build/libs/wildfly-swarm-example1-swarm.jar
tmpDir: /var/folders/18/ffp649395k959gg_65t1nhjc0000gn/T/ 02:08:46,033 INFO [org.jboss.msc] (main) JBoss MSC version 1.2.6.Final 02:08:46,200 INFO [org.jboss.as] (MSC service thread 1-6) WFLYSRV0049: WildFly Core 2.0.0.Beta1 "Kenny" starting 2015-09-21 02:08:47,011 INFO [org.jboss.as.security] (ServerService Thread Pool -- 11) WFLYSEC0002: Activating Security Subsystem 2015-09-21 02:08:47,014 INFO [org.wildfly.extension.io] (ServerService Thread Pool -- 12) WFLYIO001: Worker 'default' has auto-configured to 8 core threads with 64 task threads based on your 4 available processors 2015-09-21 02:08:47,016 INFO [org.jboss.as.security] (MSC service thread 1-3) WFLYSEC0001: Current PicketBox version=4.9.2.Final 2015-09-21 02:08:47,022 INFO [org.jboss.as.naming] (ServerService Thread Pool -- 13) WFLYNAM0001: Activating Naming Subsystem 2015-09-21 02:08:47,088 INFO [org.jboss.as.naming] (MSC service thread 1-1) WFLYNAM0003: Starting Naming Service 2015-09-21 02:08:47,112 INFO [org.wildfly.extension.undertow] (MSC service thread 1-7) WFLYUT0003: Undertow 1.3.0.Beta6 starting 2015-09-21 02:08:47,112 INFO [org.wildfly.extension.undertow] (ServerService Thread Pool -- 9) WFLYUT0003: Undertow 1.3.0.Beta6 starting 2015-09-21 02:08:47,165 INFO [org.xnio] (MSC service thread 1-7) XNIO version 3.3.1.Final 2015-09-21 02:08:47,177 INFO [org.xnio.nio] (MSC service thread 1-7) XNIO NIO Implementation Version 3.3.1.Final 2015-09-21 02:08:47,217 INFO [org.wildfly.extension.undertow] (MSC service thread 1-5) WFLYUT0012: Started server default-server. 2015-09-21 02:08:47,286 INFO [org.wildfly.extension.undertow] (MSC service thread 1-4) WFLYUT0006: Undertow HTTP listener default listening on /0:0:0:0:0:0:0:0:8080 2015-09-21 02:08:47,592 INFO [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: WildFly Core 2.0.0.Beta1 "Kenny" started in 1613ms - Started 65 of 71 services (13 services are lazy, passive or on-demand) 2015-09-21 02:08:47,975 INFO [org.jboss.as.server.deployment] (MSC service thread 1-6) WFLYSRV0027: Starting deployment of "6703fdd4-4821-4996-9e3b-856a110513d8.war" (runtime-name: "6703fdd4-4821-4996-9e3b-856a110513d8.war") 2015-09-21 02:08:48,636 INFO [org.wildfly.extension.undertow] (MSC service thread 1-1) WFLYUT0018: Host default-host starting 2015-09-21 02:08:48,956 INFO [org.jboss.resteasy.spi.ResteasyDeployment] (ServerService Thread Pool -- 8) Deploying javax.ws.rs.core.Application: class org.wildfly.swarm.generated.WildFlySwarmDefaultJAXRSApplication 2015-09-21 02:08:48,995 INFO [org.wildfly.extension.undertow] (ServerService Thread Pool -- 8) WFLYUT0021: Registered web context: / 2015-09-21 02:08:49,132 INFO [org.jboss.as.server] (main) WFLYSRV0010: Deployed "6703fdd4-4821-4996-9e3b-856a110513d8.war" (runtime-name : "6703fdd4-4821-4996-9e3b-856a110513d8.war")
あとは http://localhost:8080/
でアクセスするだけ(終了はCtrl-C)。
以上、非常に簡単に JavaEE アプリケーションを単一JARとして実行できる。