概要
Thorntail について
今後、 WildFly Swarm は Thorntail と名前を変え、WildFly にとらわれない成長を志すとのことです。
動機
これまで、 WildFly Swarm アプリの開発ではホットリロードが扱えず開発に苦労していた。
WildFly Swarm は UberJar (実行可能JAR) を作成し、 java -jar
コマンドで実行する他がなかった。
WildFly Swawrm の UberJAR はおよそ数十メガバイト〜100メガを超えることもざらにあり、開発においてパッケージする度に時間を要していた。
Thorntail に変わるにつき、 Developer Tool が提供されるようになり、ホットリロードできるようになりました。(アプリケーションサーバは起動させたまま、アプリケーション全てをパッケージしたりデプロイし直したりすることがなく、変更のあったクラスだけをリロードする仕組み)
今回はその機能を試してみたので、サンプルコードと共に実行手順を以下に書いておきます。
※SpringBootでは既にその仕組があったっぽいです。
手順
準備
この記事を書いた時点では、Thorntail はまだ SNAPSHOT版しかなく、Maven Centralにはリリースされていなかったため、ThorntailのSNAPSHOT版のライブラリやプラグインの依存性解決ができるように、$HOME/.m2/settings.xml
に Snapshotリポジトリとして https://oss.sonatype.org/content/repositories/snapshots
を追加してください。
<?xml version="1.0" encoding="UTF-8"?>
<settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd" xmlns="http://maven.apache.org/SETTINGS/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<profile>
<id>ossrh</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<repositories>
<repository>
<snapshots />
<id>ossrh</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<snapshots />
<id>ossrh</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
GitHub に私が作ったサンプルコードを公開しています。
https://github.com/sightseeker/thorntail-demo
プロジェクトをイチから作る手順は割愛します。
git clone git@github.com:sightseeker/thorntail-demo.git && cd thorntail-demo
ソースには JAX-RS (REST API) 一つだけが書いてあります。
├── pom.xml
└── src
└── main
├── java
│ └── com
│ └── sightseekerstudio
│ ├── MyApplication.java
│ └── MyResource.java
└── resources
└── META-INF
├── application.properties
└── beans.xml
以下の手順では、ターミナルウィンドウは2枚使います。(Thorntail実行用(A) と コンパイルプロセス用(B))
Thorntailを開発モードで起動
# アプリの初期ビルド
mvn package
# 開発モードをリロードにして、Thorntailを起動
THORNTAIL_DEV_MODE=reload
./target/thorntail-demo-1.0-SNAPSHOT-bin/bin/run.sh
# 標準出力にサーバのログが出ます
アプリ (JAX-RSリソース) にアクセスできることを確認
ブラウザ等で http://localhost:8080 にアクセスして、Hello World
と表示されることを確認。
変更を検知してコンパイルさせるプロセスを常駐させる
Fizzed Watcher Maven Plugin というのおを使って、変更検知で compile が動くように pom.xml に設定してます。
以下のコマンドでファイルの変更検知で compile が動きます。
mvn fizzed-watcher:run
JAX-RSリソースのクラスを変更してみる
このタイミングで、エディタ等で、src/main/java/com/sightseekerstudio/MyResource.java
の Hello World の文字列を変更してみる。
すると、ターミナルBでコンパイルが実行され、その後に、ターミナルAでコンパイルで変更の入った MyResource
のクラスがリロードされます。
再度、 http://localhost:8080 にアクセスし、変更した文字列が表示されることが確認できます。