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

概要

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>http://repo.stella.plus.so-net.ne.jp/artifactory/libs-snapshot</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 にアクセスし、変更した文字列が表示されることが確認できます。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.