#はじめに
Advent Calendar 16日目です。
2018年末のAdvent CalendarにWildFly の記事を書いてから3年が経ちました。
その時に使用したのが WildFly-14.0.1.Final で、2021年12月1日現在の最新バージョンは WildFly-25.0.1.Final なので、3年の間に11もバージョンが上がったことになります。
その間、どのような変化があったか、ざっと挙げてみると以下のようになっています。見出しレベルでしか書きませんので、詳細を知りたい方は公式サイトのリリースノートを見てください。
長くなるので折りたたんでます。▲をクリックすると広がります。
WildFly更新履歴概要
WildFly-16:[リリースノート](https://www.wildfly.org/news/2019/02/27/WildFly16-Final-Released/) Galleonを使用したWildFlyのプロビジョニング ・メッセージングの改善 ・クラスタリングの改善
WildFly-17:[リリースノート](https://www.wildfly.org/news/2019/06/10/WildFly17-Final-Released/) ・クラスタリングの改善 ・メッセージングの改善
WildFly-18:[リリースノート](https://www.wildfly.org/news/2019/10/03/WildFly18-Final-Released/) Jakarta EE8/Java EE8 の互換実装として認定されました。 ・MicroProfile 3 対応 ・セキュリティの強化 ・EEサブシステムの機能強化 ・クラスタリングの機能強化 ・管理機能の強化 ・Jakartaコミュニティとの連携強化
WildFly-19:[リリースノート](https://www.wildfly.org/news/2020/03/18/WildFly19-Final-Released/) ・MicroProfile 3.3 対応
WildFly-20:[リリースノート](https://www.wildfly.org/news/2020/06/08/WildFly20-Final-Released/) ・セキュリティ機能強化 ・EJB機能強化 ・MicroProfileの統合
WildFly-21:[リリースノート](https://www.wildfly.org/news/2020/10/13/WildFly21-Final-Released/) ・BootableJAR/galleonレイヤー ・セキュリティ機能強化 ・EJB機能強化 ・管理機能強化
WildFly-22:[リリースノート](https://www.wildfly.org/news/2021/01/13/WildFly22-Final-Released/) ・ロギングにlog4j2のサポートを追加 ・WildFlyのプロビジョニングと管理の機能追加 ・メッセージング機能強化 ・セキュリティ機能強化 ・galleon機能パックの変更
WildFly-23:[リリースノート](https://www.wildfly.org/news/2021/03/11/WildFly23-Final-Released/) ・MicroProfile 4.0 対応 ・WildFlyのプロビジョニングと管理の機能追加 ・メッセージング機能強化 ・galleon機能パックの変更
WildFly-24:[リリースノート](https://www.wildfly.org/news/2021/06/17/WildFly24-Final-Released/) ・いくつかの新機能を追加 ・Codehaus Jackson の削除
WildFly-25:[リリースノート](https://www.wildfly.org/news/2021/10/05/WildFly25-Final-Released/) ・いくつかの新機能を追加 ・セキュリティレイヤーの変更
一番大きな変化としては Eclipse MicroProfile の実装と galleon に対応したことでしょうか
それぞれ簡単に説明すると Eclipse MicroProfile は、Jakarta EE(Java EE) の機能を一部取り入れたマイクロサービスアーキテクチャ向けの仕様です。galleon は、WildFly をカスタマイズしてインストールすることが出来るツールです。
逆に言えばそれ以外は大きくは変わっていないので、3年前の記事がまだ(ほぼ)使えたりします。
###Log4Shell(CVE-2021-44228/CVE-2021-4104)
12月になって log4j の脆弱性のホットな話題が出てきましたので WildFly についても触れておきます。
CVE-2021-44228
log4j 2.x に関する脆弱性です。WildFly の公式ツイッターでコメントが出ているように WildFly には問題となった log4j-core が含まれていないので影響ありませんが、ユーザーが作成したアプリケーションに含まれていた場合は影響を受ける可能性がありますのでご注意ください。
CVE-2021-4104
後から追加された log4j 1.x の類似の脆弱性になります。こちらもアプリケーションに log4j が含まれていて、かつ JMSAppender が使用されていた場合、影響を受ける可能性がありますのでご注意ください。
さらに詳細な情報が出ていました。
WildFly Impact of the Apache Log4j Security Vulnerabilities
今回やること
WildFly は Jakarta EE/Java EE の互換実装として多くの機能を持っています。しかし、その機能を利用するためには、ユーザー自身がアプリケーションを作成する必要があります。
ドキュメントを読んだけどよく分からない、とりあえず何か動かしたい。そんな時のためのサンプルとしてQuickStart
というものが WildFly の github に用意されています。今回はそのQuickStart
を紹介してみようと思います。
QuickStart
は、WildFly の公式サイトのダウンロードメニューからもそれぞれのバージョンに対応したものがリンクされています。
今回使用した環境は以下です。
- Windows 10
- Java 8 (Oracle JDK 1.8.0)
- WildFly-25.0.1.Final
- Apache Maven-3.8.4
- quickstart-25.0.1.Final
事前準備
3年前の記事と一部内容が被っていますが、時間も経っていますので改めて書いておきます。長いので折りたたんでますが、説明しなくても分かるという方は読み飛ばして下さい。
コマンドプロンプトを使う
コマンドプロンプトを起動すると黒い画面が現れてコマンドを入力できます。いくつでも開けます。
Microsoft Windows [Version 10.0.19043.1348]
(c) Microsoft Corporation. All rights reserved.
C:\Users\tamaru>
Java 8 以上が使えるか確認する
java -version
下記のように言われたら Java がインストールされていないので Oracle 社のサイトから java SE(JDK)をダウンロードしてインストールして下さい。
'java' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
java -version
と打ってバージョン情報が表示されればOKです。
java version "1.8.0_291"
Java(TM) SE Runtime Environment (build 1.8.0_291-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.291-b10, mixed mode)
WildFly を入手する
WildFly のインストール
cd C:\wildfly-25.0.1.Final\bin
bin
フォルダにあるstandaloe.bat
が起動コマンドなので実行します。
standalone.bat
ずらずらっと文字列が表示され、WildFly Full 25.0.1.Final (WildFly Core 17.0.3.Final) started in xxxxms
という文字が出れば起動完了です。
WildFlyは、8080番ポートで動きます。下記にアクセスするとトップ画面が表示されます。
http://localhost:8080/
Apache Maven を入手する
Apache Maven のインストール
Quickstart を入手する。
https://github.com/wildfly/quickstart にアクセスし、使用する WildFly に対応したバージョンを選択してください。今回は、2021年12月現在で最新のquickstar-25.0.1.Finalを使用します。
選択したら git コマンドや github の Download ZIP ボタンでソースツリーを取得してください。
Quickstart の確認
ダウンロードしてきたQuickstart
を展開すると以下のようになり、各サンプルがフォルダ毎に分かれています。今回は C:\quickstart-25.0.1.Final
に置きます。
最初に読む README.adoc
は asciidoc
で書かれているので、ブラウザの拡張機能などをインストールして参照してください。念のため Chrome の拡張機能 Asciidoctor.js Live Preview
の追加手順を書いておきます。オマケ情報なので折りたたんでおきます。
Chrome に拡張機能 Asciidoctor.js Live Preview を追加する
Firefox の Asciidoctor.js Live Preview
アドオンも使用してみましたが、なぜか Include しているファイルが読み込まれませんでしたので、Chrome 版を使います。
Chrome の右側のボタンより、拡張機能画面を開きます。
Chrome ウェブストアを開きます。
Chromw ウェブストアで検索してAsciidoctor.js Live Preview
を見つけてください。
Asciidoctor.js Live Preview
が見つかったらChrome に追加ボタンを押して追加して下さい。
拡張機能の追加確認ダイアログ
Asciidoctor.js Live Preview
の追加が完了したら、拡張機能管理画面で設定をいじります。
Asciidoctor.js Live Preview
の詳細ボタンを押します。
ファイルのURLへのアクセスを許可する
設定を有効化します。
以上で完了です
README の確認
C:\quickstart-25.0.1.Final\README.adoc
の9. Table of Available Quickstarts
の表には、各サンプルのQuickstart Name(名前)
、Demonstrated Technologies(デモする機能)
、Description(概要説明)
、Experience Level Required(必要なレベル)
、Prerequisites(前提条件)
が一覧で記載されています。
今回は、どんなプログラムでも最初に試すであろうhelloworld
を実行してみようと思います。Experience Level Required
は、当然Beginner
です。
手順は C:\quickstart-25.0.1.Final\helloworld\README.adoc
に書かれています。開くとこんな感じです。
以降はREADME.adoc
に書いてある通りに進めていきます。
What is it?
helloworld
はCDI
とServlet 3
の機能を使用したサンプルアプリで、少ないコード量で作成されています。
WildFly 25.x の機能一覧で言えばJakarta Contexts and Dependency Injection
とJakarta Servlet
のサンプルになります。
Javaソースは、HelloWorldServlet.java
とHelloService.java
しかないのでざっと見てみましょう
43行目で Servlet 3 より導入された @WebServlet アノテーションを使用することで、サーブレットとして/HelloWorld
のパスから呼び出せるようになります。
@WebServlet("/HelloWorld")
55行目の @Inject アノテーションがCDIの機能を使用している部分で、CDIにより、クラス間の依存関係を自動的に注入してくれます。このサンプルでは、変数helloService
にHelloService.class
が注入(インジェクト)されます。
@Inject
HelloService helloService;
なおwebapp/WEB-INF/beans.xml
はインジェクトするクラスを探すための設定が書かれているので必要です。
System Requirements
前提として、Java 8.0 (Java SDK 1.8)以上とApache Maven 3.3.1 以上をインストールされている必要があります。
Use of the WILDFLY_HOME and QUICKSTART_HOME Variables
環境変数WILDFLY_HOME
とQUICKSTART_HOME
を設定します。
併せて環境変数JAVA_HOME
の追加、Apache Maven の環境変数PATH
への追加も行います。
環境変数の設定
環境変数一覧画面が表示されます。ユーザー環境変数とシステム環境変数がありますが、今回はユーザー環境変数の方に設定して行きます。
WILDFLY_HOME の追加
変数名(N): にWILDFLY_HOME
、変数値(V):にC:\wildfly-25.0.1.Final
を入力しOK
ボタンを押します。
QUICKSTART_HOME の追加
同様に、変数名(N): にQUICKSTART_HOME
変数値(V):にC:\quickstart-25.0.1.Final
を入力しOK
ボタンを押します。
JAVA_HOME の追加
環境変数JAVA_HOME
にインストールしたJDKのパス
を設定します。
変数名(N): に JAVA_HOME
変数値(V):に JDKのパス
を入力しOK
ボタンを押します。
jdk-8u291-windows-x64.exe
の場合はC:\Program Files\Java\jdk1.8.0_291
にインストールされました。
Apache Maven の bin を PATH に追加
環境変数Path
を編集します。
新規
ボタンを押し、c:\apache-maven-3.8.4\bin
を追加しOK
ボタンを押します。そのまま続けてOK
を押して、環境変数
ウィンドウ、システムのプロパティ
ウィンドウを閉じて設定完了です。
既に開いているコマンドプロンプトには反映されませんので、閉じて開きなおしてください。
#ビルドして実行する。
準備が済んだところで、いよいよ実行してみましょう。引き続き README.adoc
に従って進めて行きます。運がよければあっけなく終わってしまうと思います。
Start the WildFly Standalone Server
まず、WildFly を起動しておきます。
C:\wildfly-25.0.1.Final\bin
に移動
cd C:\wildfly-25.0.1.Final\bin
standalone.bat
の実行
standalone.bat
Build and Deploy the Quickstart
ビルドとデプロイを行います。起動したらそのままにして、もう一つコマンドプロンプトを開き quickstart の helloworld
まで移動します。
cd C:\quickstart-25.0.1.Final\helloworld
続いて、以下にように打ち込みます。
mvn clean package wildfly:deploy
後は一気に進みます。いろいろな物がダウンロードされます。
BUILD SUCCESSと出れば完了です。
成功した場合はWildFly
を起動していたコマンドプロンプト側に以下のような文字列が出ていると思います。
[org.jboss.as.server] (management-handler-thread - 1) WFLYSRV0010: Deployed "helloworld.war" (runtime-name : "helloworld.war")
Access the Application
確認です。http://localhost:8080/helloworld/ にアクセスしてみましょう。
「Hello World!」と出たら成功です。おつかれさまでした。
終わりに
確認が済んだらアプリケーションをアンデプロイしておきましょう
Undeploy the Quickstart
helloworld
をアンデプロイします。ビルド時に使ったコマンドプロンプトで以下のように打ち込んでください。
mvn wildfly:undeploy
WildFly
を起動していたコマンドプロンプト側に以下のように出たらアンデプロイの成功です。
[org.jboss.as.server] (management-handler-thread - 1) WFLYSRV0009: Undeployed "helloworld.war" (runtime-name: "helloworld.war")
もう使わないのであれば、設定した環境変数も消しておいた方が良いです。特にWILDFLY_HOME
は、違うパスにWildFlyをインストールした場合におかしな動作になりますのでご注意下さい。
Run the Quickstart in Red Hat CodeReady Studio or Eclipse 以降までは紹介しきれないので省略させて頂きます
今回はhelloworld
のみの紹介になりましたが、他のサンプルもだいたい同じような流れで実行することになりますので、興味のある方は試してみてください。