4
1

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-05-11

概要

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 にアクセスし、変更した文字列が表示されることが確認できます。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1