Edited at

Thorntail (旧WildFly Swarm) の DevTools で ホットリロードやってみた

More than 1 year has passed since last update.


概要


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 を追加してください。


$HOME/.m2/settings.xml

<?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を開発モードで起動


ターミナルA

# アプリの初期ビルド

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 が動きます。


ターミナルB

mvn fizzed-watcher:run



JAX-RSリソースのクラスを変更してみる

このタイミングで、エディタ等で、src/main/java/com/sightseekerstudio/MyResource.java の Hello World の文字列を変更してみる。

すると、ターミナルBでコンパイルが実行され、その後に、ターミナルAでコンパイルで変更の入った MyResourceのクラスがリロードされます。

再度、 http://localhost:8080 にアクセスし、変更した文字列が表示されることが確認できます。