WildFlyをワイルドに動かしてみる ～インストールからデプロイまで～

#はじめに
Qiita にはじめて記事を書かせていただきます。

現在 WildFly を使っていますが、やや知名度が低いように感じており、普及の一助になればと思い記事を書いてみました。Tomcat しか使ったことないよという方も是非使ってみて下さい。初心者がとりあえず動かせる(かもしれない)ことを目標としたので、細かいところは気にせずに進めていきます。

確認した動作環境は以下です。

* Windows 7 Professional
* Java 8 (Oracle JDK 1.8.0)
* mysql-8.0.13-winx64
* wildfly-14.0.1.Final

#WildFly とは
ざっくりと言うと

* Java で書かれたオープンソースのアプリケーションサーバです。同種のものでは Apache Tomcat が有名です。
* バージョン7までは JBoss と呼ばれていました。WildFly は JBoss が改名したものです。
* WildFly はコミュニティ版と商用版があります。商用版はレッドハット社が開発していて JBoss EAP 7.x と呼ばれています。

#"WildFly"？どういう意味？
* 野生のハエ？ロゴは蛾？書籍(洋書)の表紙はトンボ、特定の虫というわけではなさそうです。初期のロゴデザインには鳥みたいのもあったようです。
* ハエかどうかはともかく軽快にフレキシブルに動作するというイメージでそういう名前になったらしいです。

#WildFlyのすごいところ
* 最新技術である Java EE 8 の認定済み実装です。(WildFly 14 以降)
* これまでの JBoss に比べて起動が速いです。
* ものすごい勢いで改良されます。四半期(3カ月)に一回メジャーバーションアップされます。※[WildFly15](http://wildfly.org/ "WildFly15")がリリースされてました。
* ほとんどの設定を管理画面で行えます。
* ほとんどの設定を管理 CLI (jboss-cli)コマンドでもできます。
* いままでたくさんあった設定ファイルが standalone.xml だけになりました。

#今回やること

1. WildFly をインストールして動かしてみる。
2. データベースへ接続する設定をする。
3. 簡単なWebアプリケーションでデータベースから取得したデータを表示してみる。

#事前準備

こんなの知っているという方は飛ばして下さい。
WildFly を動かしてみるだけでいいよ、という方はデータベース(MySQL)関連も読み飛ばして下さい。
見たい方は▼をクリックして頂ければ広がります。

<details><summary>コマンドプロンプトを使う</summary>
<div>Windows 7 の場合は下記にあります。
`スタートボタン`→`すべてのプログラム`→`アクセサリ`→`コマンドプロンプト`
Windows 10 の場合は下記にあります。
`スタートボタン`→`Windows　システムツール`→`コマンドプロンプト`

コマンドプロンプトを起動すると黒い画面が現れてコマンドを入力できます。いくつでも開けます。

```:コマンドプロンプト

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Users\tamaru>
```

**コマンドプロンプト小ネタ**

**今回よく使うコマンド**

- `dir` ディレクトリ(フォルダ)にあるファイルを一覧表示します。
- `cd` ディレクトリを移動します。

**cd コマンドでフォルダを移動するのが面倒だと思ったら**

まずコマンドプロンプトに`cd`と打ち込みます。

エクスプローラーで移動したいフォルダをドラックします。
<img src="https://qiita-image-store.s3.amazonaws.com/0/227018/093c3c4a-dc81-fe1d-2d20-1ed84ef0b72b.jpeg" border="1">
コマンドプロンプトにドロップします。
<img src="https://qiita-image-store.s3.amazonaws.com/0/227018/2e623928-8e42-c604-91e7-a10400cb9cab.jpeg">
マウスから指を離すとフォルダのパスが自動的に入ります。
<img src="https://qiita-image-store.s3.amazonaws.com/0/227018/7c2cf7ee-b9f7-9333-5966-26039c728b3b.jpeg">
間違って変な所に移動しそうになったら慌てずマウスから指を離さないで「Esc」ボタンを押してキャンセルしましょう

**コマンドプロンプトを使うのが嫌になったら**

下記のように打ち込むとエクスプローラーが開きます。

```:コマンドプロンプト
>explorer .
```

</div></details>

<details><summary>Java 8 以上が使えるか確認する</summary>
<div>まず Java 8 以上がインストールされている必要があります。コマンドプロンプトを開いて下記のコマンドを実行して確認して下さい。

```:コマンドプロンプト
>java -version
```

下記のように言われたら Java がインストールされていないので [Oracle 社のサイト](https://www.oracle.com/technetwork/jp/java/javase/downloads/index.html)から java SE(JDK)をダウンロードしてインストールして下さい。

```:コマンドプロンプト
'java' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
```

`java -version` と打ってバージョン情報が表示されればOKです。

```:コマンドプロンプト
java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)
```

</div></details>

<details><summary>WildFly を入手する</summary>
<div>WildFly の[公式サイト](http://wildfly.org/downloads/ "公式サイト")から最新の`(Java EE Full & Web Distribution)`をダウンロードして下さい。今回は`wildfly-14.0.1.Final.zip`をダウンロードしました。
</div></details>

<details><summary>接続可能なデータベース(MySQL)を用意する</summary>
<div>

テスト用のデータベースとして MySQL 8 を使用します。なるべく簡単に済ませるためにインストーラ版ではなく zip 版の`mysql-8.0.13-winx64.zip`を使用します。インストールして長く使いたい方は MySQL の記事や書籍等を参照して環境構築をして下さい。

下記より`Windows (x86, 64-bit), ZIP Archive`の「Download」ボタンを押して下さい。
https://dev.mysql.com/downloads/mysql/

次に「Login」と「Sign Up」ボタンが現れますが、下にある「No thanks, just start my download.」リンクからもダウンロードすることが出来ます。

<img src="https://qiita-image-store.s3.amazonaws.com/0/227018/208aa51a-479a-cfe4-d4a0-803701f0cea4.jpeg" width="50%">

ダウンロードした`mysql-8.0.13-winx64.zip`を適当なフォルダに解凍して下さい。ここでは`C:\mysql-8.0.13-winx64`に解凍します。コマンドプロンプトを開き、以下のように入力します。

```:コマンドプロンプト
>cd C:\mysql-8.0.13-winx64\bin
```
次にデータベースを初期化します。

```:コマンドプロンプト
>mysqld --initialize-insecure
```
終了したら mysqld.exe を起動します。

```:コマンドプロンプト
>mysqld
```

このまま返ってきませんが MySQL は起動しているのでそのままにしておきます。mysqld は MySQLのサービスであるため動いている必要があります。<font color="red">終わるまで閉じないで下さい</font>

:information_source:別の Windows 10 のPCで試したところ、下記のようなエラーが出てしまいました。
<img src="https://qiita-image-store.s3.amazonaws.com/0/227018/5d2851de-e31a-6db7-8807-740b9bb63a11.jpeg" width="200">
`Visual Studio 2017.用 Visual C++ 再頒布可能パッケージ`が入っていないことが原因らしいです。下記のマイクロソフトのページから`x64: vc_redist.x64.exe`をダウンロードしてインストールして下さい。インストール後は Windows の再起動が必要のようです。
https://support.microsoft.com/ja-jp/help/2977003/the-latest-supported-visual-c-downloads

mysqld が起動した状態で別のコマンドプロンプトを開き MySQLサービスにログインします。パスワードを聞いてきますが、root(管理ユーザ)のパスワードは未設定なので<kbd>Enter</kbd>を押します。

```:コマンドプロンプト
>cd C:\mysql-8.0.13-winx64\bin
>mysql -uroot -p
Enter password:
```

MySQLへのログインが成功しました。

```:コマンドプロンプト
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.13

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
```

テスト用のデータベース `testdb` を作成します。下記を入力し<kbd>Enter</kbd>を押します。
`CREATE DATABASE testdb DEFAULT CHARACTER SET UTF8;`

```:コマンドプロンプト
mysql> CREATE DATABASE testdb DEFAULT CHARACTER SET UTF8;
Query OK, 1 row affected, 1 warning (0.01 sec)
```

テスト用ユーザ「test」を作成します。下記を入力し<kbd>Enter</kbd>を押します。
`CREATE USER 'test'@'localhost' IDENTIFIED BY 'test';`

続けて権限を設定します。下記を入力し<kbd>Enter</kbd>を押します。
`GRANT ALL PRIVILEGES ON testdb.* TO 'test'@'localhost' WITH GRANT OPTION;`

ユーザの作成が完了したので`quit;`してログアウトします。

```:コマンドプロンプト
mysql> CREATE USER 'test'@'localhost' IDENTIFIED BY 'test';
Query OK, 0 rows affected (0.12 sec)

mysql> GRANT ALL PRIVILEGES ON testdb.* TO 'test'@'localhost' WITH GRANT OPTION;
Query OK, 0 rows affected (0.04 sec)

mysql>quit;
```
MySQLに再度ログインします。今度はユーザ名「test」パスワード「test」でログインします。`mysql -utest -ptest testdb`と入力し<kbd>Enter</kbd>を押します。

```:コマンドプロンプト
c:\mysql-8.0.13-winx64\bin>mysql -utest -ptest testdb
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 22
Server version: 8.0.13 MySQL Community Server - GPL

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
```

以下のSQLでスト用テーブル「TEST_TABLE」を作成します。

`CREATE TABLE TEST_TABLE (
    ID INT AUTO_INCREMENT PRIMARY KEY,
    NAME VARCHAR(30) NOT NULL
);`

```:コマンドプロンプト
mysql> CREATE TABLE TEST_TABLE (ID INT AUTO_INCREMENT PRIMARY KEY, NAME VARCHAR(30) NOT NULL);
Query OK, 0 rows affected (0.09 sec)
```

以下を使用してデータを追加します。
`INSERT INTO TEST_TABLE SET NAME="あいうえお";`
`INSERT INTO TEST_TABLE SET NAME="かきくけこ";`

```:コマンドプロンプト
mysql> INSERT INTO TEST_TABLE SET NAME="あいうえお";
Query OK, 1 row affected (0.36 sec)
mysql> INSERT INTO TEST_TABLE SET NAME="かきくけこ";
Query OK, 1 row affected (0.00 sec)
```
以上で完了です。

musqld の止め方はコマンドプロンプトを開き`mysqladmin -u root -p shutdown`と入力します。rootの パスワードを求められますので、パスワードを入力して<kbd>Enter</kbd>キーを押して下さい。

```:コマンドプロンプト
>cd C:\mysql-8.0.13-winx64\bin
>mysqladmin.bat -u root -p shutdown
Enter password: ****
```

以上です。インストールする環境によっては上手くいかない場合があるかもしれません。今回は最新版(2018年12月現在)の`MySQL 8.0.13`を使用しましたが、もっと古いバージョンでも確認はできると思います。WildFlyの記事なので手短に終わらせようと思ったのですが、そこそこ長くなってしまいました。

</div>
</details>

<details><summary>対象のデータベース向けJDBCドライバを用意する</summary>
<div>本記事ではMySQLを使用しますので、MySQL用のJDBCドライバ[Connector/J](https://dev.mysql.com/downloads/connector/j/ "Connector/j") をダウンロードして下さい。その他のデータベースを使用している方は対応しているJDBCドライバを用意して下さい。

`Select Operating System:`の中から`Platform Independent`を選択して`Platform Independent (Architecture Independent), ZIP Archive`をダウンロードして下さい。

<img src="https://qiita-image-store.s3.amazonaws.com/0/227018/307a05da-6f25-6e54-2ef3-f2843216a5eb.jpeg" width="50%">


ダウンロードした`mysql-connector-java-8.0.13.zip`を解凍すると`mysql-connector-java-8.0.13.jar`というファイルが出来ます。これがMySQL用のJDBCドライバ本体です。
</div>
</details>

<details><summary>Linuxの改行コード(LF)をサポートするテキストエディタを用意</summary>
<div>WildFly の設定ファイルなどを Windows のメモ帳で開くと改行コードの違いから改行されず、ものすごく見にくくなります。Linux などの改行コードに対応するテキストエディタを用意しましょう。私は[サクラエディタ]("https://sakura-editor.github.io/" サクラエディタ)を使わせて頂いてます。
</div></details>

<details><summary>WildFly にデプロイする Webアプリケーション(warファイル)を用意する</summary>
<div>WildFly にデプロイするための Webアプリケーションの war(Web application ARchive) を用意します。既にあるよ、という方はそれを使用して下さい。

動作確認のアプリケーションを用意します。jsp から直接データベースにアクセスしてしまいますが、こんな作り方をするとリーダーに怒られますので注意して下さい。今回は気にせずやってしまいます。

まず、helloworld というフォルダを作ってください。その中に index.jsp という名のファイルを以下の内容で作ってください。

```javascript:index.jsp
<%@page contentType="text/html; charset=UTF-8" %>
<%@page import="javax.naming.*" %>
<%@page import="javax.sql.*" %>
<%@page import="java.sql.*" %>
<html>
<body>
Hello World!<br>
<%
Context context = new InitialContext();
DataSource dataSource = (DataSource)context.lookup("java:/MySqlDS");
try (Connection connection = dataSource.getConnection();
    PreparedStatement preparedStatement = connection.prepareStatement("select * from test_table;");
    ResultSet resultSet = preparedStatement.executeQuery()) {
    while(resultSet.next()) {
        out.print(resultSet.getString("NAME"));
        out.print("<br>");
    }
}
%>
</body>
</html>
```

下記の`java:/MySqlDS`は後述するデータソースで設定した名前と同じにしてください。

```java
DataSource dataSource = (DataSource)context.lookup("java:/MySqlDS");
```

次にアーカイブ形式の war ファイルを作成します。zip で固めるイメージです。まずコマンドプロンプトを開き作成した helloworld フォルダに移動します。

```:コマンドプロンプト
>cd C:\helloworld
```
java(JDK) に付属している jar コマンドを使用して war ファイルを作成します。

```
>jar cvf helloworld.war .\*
マニフェストが追加されました
index.jspを追加中です(入=1158)(出=528)(54%収縮されました)
```

helloworld.war が出来たと思います。WEB-INF や web.xml が無いですが今回は気にしません。
</div></details>

#WildFly のインストール

`wildfly-14.0.1.Final.zip`を解凍し、コマンドプロンプトで解凍先のフォルダに移動してください。

```:コマンドプロンプト
>cd C:\wildfly-14.0.1.Final\bin
```

`standaloe.bat`が起動コマンドなので実行します。

```:コマンドプロンプト

>standalone.bat
Setting JAVA property to "C:\jdk\jdk1.8.0\bin\java"
===============================================================================

  JBoss Bootstrap Environment

  JBOSS_HOME: "C:\wildfly-14.0.1.Final"

  JAVA: "C:\jdk\jdk1.8.0\bin\java"

  JAVA_OPTS: "-Dprogram.name=standalone.bat -Xms64M -Xmx512M -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman "

===============================================================================

12:24:08,535 INFO  [org.jboss.modules] (main) JBoss Modules version 1.8.6.Final
```

ずらずらっと文字列が表示されますが、`WildFly Full 14.0.1.Final (WildFly Core 6.0.2.Final) started in xxxxms`という文字が出れば起動完了です。

```:コマンドプロンプト

12:24:24,525 INFO  [org.jboss.ws.common.management] (MSC service thread 1-2) JBWS022052: Starting JBossWS 5.2.3.Final (Apache CXF 3.2.5.jbossorg-1)
12:24:24,822 INFO  [org.jboss.as.server] (Controller Boot Thread) WFLYSRV0212: Resuming server
12:24:24,822 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0060: Http management interface listening on http://127.0.0.1:9990/management
12:24:24,822 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0051: Admin console listening on http://127.0.0.1:9990
12:24:24,822 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: WildFly Full 14.0.1.Final (WildFly Core 6.0.2.Final) started in 21716ms - Started 306 of 527 services (321 services are lazy, passive or on-demand)
```
WildFlyは、8080番ポートで動きます。下記にアクセスするとトップ画面が表示されます。
http://localhost:8080/
<img src="https://qiita-image-store.s3.amazonaws.com/0/227018/812eac63-9ca2-1de8-df51-c9abae6417b5.jpeg" width="50%">

今回やること「**1. WildFly をインストールして動かしてみる。**」はこれにて完了です。

#管理ユーザの追加
WildFly のトップページの`Administration Console`リンクから管理画面へ行けます。管理画面を使用するためには管理ユーザを登録する必要があります。`wildfly-14.0.1.Final\bin` の下の `add-user.bat` コマンドを使用して管理ユーザを追加します。

コマンドプロンプトを開き、以下のように「add-user.bat」を実行して下さい。

```:コマンドプロンプト
>cd C:\wildfly-14.0.1.Final\bin
>add-user.bat

What type of user do you wish to add?
 a) Management User (mgmt-users.properties)
 b) Application User (application-users.properties)
(a):
```
`Management User`か`Application User`のどちらのタイプのユーザを追加するか聞かれますので、`a)`の `Management User`を選択します。デフォルトで選択されているので、そのまま<kbd>Enter</kbd>でもかまいません。

```:コマンドプロンプト
Enter the details of the new user to add.
Using realm 'ManagementRealm' as discovered from the existing property files.
Username :
```
追加するユーザ名を聞かれますので好きな名前を入力します。とりあえず「jboss1」とします。

```:コマンドプロンプト
Password recommendations are listed below. To modify these restrictions edit the add-user.properties configuration file.

 - The password should be different from the username
 - The password should not be one of the following restricted values {root, admin, administrator}
 - The password should contain at least 8 characters, 1 alphabetic character(s), 1 digit(s), 1 non-alphanumeric symbol(s)
Password :
```
パスワードを決めます。ユーザ名と同じパスワード、root、admin、administratorはダメ、数字、アルファベット以外の文字も含めろ、と言ってくるので従います。ここでは「12345test!」とします。**本番環境で運用するような場合は、もっと難しいパスワードにして下さい。**

```:コマンドプロンプト
WFLYDM0048: Password is not strong enough, it is 'MODERATE'. It should be at least 'MEDIUM'.
Are you sure you want to use the password entered yes/no? yes
Re-enter Password :
```
そんな普通のパスワードで良いのか？と言われますが「yes」と入れて再度パスワードを入力します。

```:コマンドプロンプト
What groups do you want this user to belong to? (Please enter a comma separated list, or leave blank for none)[  ]:
About to add user 'jboss1' for realm 'ManagementRealm'
Is this correct yes/no? yes
Added user 'jboss1' to file 'C:\wildfly-14.0.1.Final\standalone\configuration\mgmt-users.properties'
Added user 'jboss1' to file 'C:\wildfly-14.0.1.Final\domain\configuration\mgmt-users.properties'
Added user 'jboss1' with groups  to file 'C:\wildfly-14.0.1.Final\standalone\configuration\mgmt-groups.properties'
Added user 'jboss1' with groups  to file 'C:\wildfly-14.0.1.Final\domain\configuration\mgmt-groups.properties'
Is this new user going to be used for one AS process to connect to another AS process?
e.g. for a slave host controller connecting to the master or for a Remoting connection for server to server EJB calls.
yes/no?
```

グループを聞かれますがそのまま<kbd>Enter</kbd>を押します。「Is this correct yes/no?」と最終確認をされますが「yes」と入力します。続けて他の AS(WildFly) に接続するためにも使いますか？と聞かれますが「no」と入力して追加完了です。

再びトップの「Administration Console」から管理画面にアクセスします。認証ダイアログが出るので、ユーザ名「jboss1」、パスワード「12345test!」と入力し「OK」を押します。

<img src="https://qiita-image-store.s3.amazonaws.com/0/227018/3c82e2a7-ee58-5e9e-b42e-d1ad0e4d1e47.jpeg" width="50%">

管理画面のトップページが表示されました。これで管理画面が使えるようになりました。
<img src="https://qiita-image-store.s3.amazonaws.com/0/227018/e3ead709-10ef-e6d3-ee79-d2554f024f9f.jpeg" width="50%">


# JDBCドライバのデプロイ
Java からデータベースを利用するために MySQL の JDBC ドライバのインストール(デプロイ)を行います。インストール方法は以下の3つがあります。今回は一番簡単な方法で行います。

**1. deployments フォルダに置く**
ファイルを置くだけです。今回はこの方法で進めます。
**2.管理画面からデプロイする**
管理画面を使いたい方向けの方法です。
**3.モジュールとして登録する**
WildFly上で動作している全てのWebアプリケーションから使うことが出来ます。jarの重複が無くなり管理も楽になります。

:information_source:1.の方法と2.の方法は、最初にどちらにするか決めてください。2.の方法でデプロイを行った場合 jar は deployments フォルダには置かれません。その後、気付かずに1.の方法で deployments フォルダに同じ jar を置いた場合、二重にデプロイされたような状態になってしまい、消しても消えない？おかしいな、という状態に陥る可能性があります。~~気になる人はやってみよう~~

**作業手順**

`wildfly-14.0.1.Final/standalone/deployments`フォルダに用意した`mysql-connector-java-8.0.13.jar`を放り込んでください。しばらくして`wildfly-14.0.1.Final/standalone/deployments`に`mysql-connector-java-8.0.13.jar.deployed`というファイルができたら完了です。


#データソースの設定
Javaからデータベースを利用するためにデータソースの設定を行う必要があります。設定方法は以下の3つの方法があります。いずれの方法も最終的には設定ファイル`ildfly-14.0.1.Final\standalone\configuration\standalone.xml`が更新されます。

**1.管理画面「Administration Console」を使って設定する**
管理画面の指示に従って行えますので分かりやすいです。今回はこの方法で進めます。
**2.設定ファイル(standalone.xml)を編集する**
設定ファイル(standalone.xml)をテキストエディタで編集します。書式を誤るとWildFlyが起動しなくなる場合もあります。
**3.管理CLI(jboss-cli)コマンドを使って設定する**
管理CLI(jboss-cli)コマンドを使います。書式を誤ることはありませんがコマンドは複雑です。

**作業手順**

まず、現在の設定ファイル`wildfly-14.0.1.Final\standalone\configuration\standalone.xml`をテキストエディタで開いて確認してみましょう。「datasource」で文書内検索を行うと以下の設定がみつかると思います。これは最初から設定されている「ExampleDS」というデータソース設定です。WildFly 自身も「H2Database」というデータベースを持っていて内部で使用しています。ここに新たなデータソースを追加します。

```xml:wildfly-14.0.1.Final\standalone\configuration\standalone.xml(抜粋)
<subsystem xmlns="urn:jboss:domain:datasources:5.0">
    <datasources>
        <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true">
            <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url>
            <driver>h2</driver>
            <security>
                <user-name>sa</user-name>
                <password>sa</password>
            </security>
        </datasource>
        <drivers>
            <driver name="h2" module="com.h2database.h2">
                <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
            </driver>
        </drivers>
    </datasources>
</subsystem>
````

管理画面にアクセスして`Deployments`をクリックして`mysql-connector-java-8.0.13.jar`がデプロイされていることを確認します。
<img src="https://qiita-image-store.s3.amazonaws.com/0/227018/73941077-86af-792a-1b47-2a93974a9fb7.jpeg" width="50%">

続いて`Configuration`→`Subsystem`→`Datasource&Drivers`→`Datasources`→`＋`メニューから`Add Datasource`を選びます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/227018/79961e52-aa98-3668-71fd-614124b306c7.jpeg" width="50%">

白いポップアップウィンドウが出現するので設定していきます。一覧の中から`MySQL`をチェックして`Next`ボタンを押して次に進みます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/227018/a39e31fa-8c83-b945-a563-3c3a1945c96c.jpeg" width="50%">
`Name`と`JNDI Name`を入力します。最初から`MySqlDS` `java:/MySqlDS`と入ってますが、その名前で問題無いので`Next`を押して次に進みます。`JNDI Name`は「java:/」または「java:jboss/」で始まる名前にする決まりになっています。※管理画面を使う場合は間違ってもちゃんと警告してくれるようです。
<img src="https://qiita-image-store.s3.amazonaws.com/0/227018/56eba82d-d5c4-1c0e-3e33-cc3636e42d17.jpeg" width="50%">
`Driver Name`のプルダウンメニューから`mysql-connector-java-8.0.13.jar`を選択します。`Driver Module Name` `Driver Class Name`は最初から入っているので`Next`を押して次に進みます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/227018/5df0ce6e-eb88-01ce-1e02-2c03da5ede57.jpeg" width="50%">
`Connection URL`に`jdbc:mysql://localhost:3306/testdb?serverTimezone=JST`と入力します。「/testdb」は使用するデータベース名です。「?serverTimezone=JST」は MySQL のパラメータですが、付けないとエラーになったので付けます。`User Name`  `Password`を入力して`Next`ボタンを押して次に進めます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/227018/115e8dc7-f2f5-9c66-b1d0-75a7cdd087ed.jpeg" width="50%">

接続できるようになったかテストします。`Test Connection`ボタンを押します。
<img src="https://qiita-image-store.s3.amazonaws.com/0/227018/5d6a6c0f-eb61-c8d0-2bbe-c9a0ac5d939a.jpeg" width="50%">
`Test Connection Successful`と表示されたら成功です`Next`を押して最終確認画面に進みます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/227018/eae6e0b8-4b5b-f894-4315-2ac074ce7272.jpeg" width="50%">
`Finish`を押して完了です。
<img src="https://qiita-image-store.s3.amazonaws.com/0/227018/11621225-63ed-f57c-3806-424f68548b2d.jpeg" width="50%">
`Close`ボタンでウィンドウを閉じましょう
<img src="https://qiita-image-store.s3.amazonaws.com/0/227018/d3ee86cc-d3de-c245-da19-03cdeab25b8a.jpeg" width="50%">

再び`wildfly-14.0.1.Final\standalone\configuration\standalone.xml`をテキストエディタで開いて確認してみましょう`<datasource jndi-name="java:/MySqlDS" pool-name="MySqlDS">`タグが追加されていると思います。

```xml:wildfly-14.0.1.Final\standalone\configuration\standalone.xml(抜粋)
<subsystem xmlns="urn:jboss:domain:datasources:5.0">
    <datasources>
        <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true">
            <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url>
            <driver>h2</driver>
            <security>
                <user-name>sa</user-name>
                <password>sa</password>
            </security>
        </datasource>
        <datasource jndi-name="java:/MySqlDS" pool-name="MySqlDS">
            <connection-url>jdbc:mysql://localhost:3306/testdb?serverTimezone=JST</connection-url>
            <driver-class>com.mysql.jdbc.Driver</driver-class>
            <driver>mysql-connector-java-8.0.13.jar</driver>
            <security>
                <user-name>test</user-name>
                <password>test</password>
            </security>
            <validation>
                <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"/>
                <background-validation>true</background-validation>
                <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"/>
            </validation>
        </datasource>
        <drivers>
            <driver name="h2" module="com.h2database.h2">
                <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
            </driver>
        </drivers>
    </datasources>
</subsystem>

```

今回やること「**2. データベースへ接続する設定をする。**」はこれにて完了です。

#Web アプリケーションのデプロイ

Webアプリケーションのデプロイを行います。デプロイ方法は以下の3つがあります。今回は一番簡単な方法でやります。

**1. deployments フォルダに置いてデプロイする**
ファイルを置くだけです。今回はこの方法で進めます。
**2.管理画面からデプロイする**
管理画面を使いたい方向けの方法です。
**3.管理CLIでデプロイする**
コマンドでデプロイしたい方向けの方法です。

:information_source:1.の方法と2.の方法は、JDBCドライバの時と同様、最初にどちらにするか決めてください。

**作業手順**
`wildfly-14.0.1.Final/standalone/deployments`フォルダに用意した`helloworld.war`を置いてください。しばらくして`wildfly-14.0.1.Final/standalone/deployments`に`helloworld.war.deployed`というファイルができたらデプロイ完了です。

デプロイしたアプリケーションにアクセスしてトップページが表示されれば成功です。本記事の手順を利用した場合は下記のURLにアクセスして

http://localhost:8080/helloworld/

以下のように表示されると思います。

Hello World!
あいうえお
かきくけこ

今回やること「**3. 簡単なWebアプリケーションでデータベースから取得したデータを表示してみる。**」はこれにて完了です。

以上で全て終了です。

もういらないのであれば、WildFly と MySQL を止めてコマンドプロンプトを閉じ、`C:\wildfly-14.0.1.Final`と`C:\mysql-8.0.13-winx64`をゴミ箱に入れれば跡形も無く消えます。

#おわりに
WildFly の止め方です。standalone.bat が動いているコマンドプロンプトを<kbd>Ctrl</kbd>+<kbd>C</kbd>で止めて下さい。管理CLIを使用する場合は以下のようにして停止させます。

```:新たに開いたコマンドプロンプト
>jboss-cli -c --command=":shutdown"
```

<kbd>Enter</kbd>を押し、しばらく待つと　standalone.bat が動いている方のコマンドプロンプトでWildFlyが終了します。

```:WildFlyが動いているコマンドプロンプト
17:32:08,388 INFO  [org.wildfly.extension.undertow] (MSC service thread 1-6) WFLYUT0004: Undertow 2.0.13.Final stopping
17:32:08,404 INFO  [org.jboss.as] (MSC service thread 1-8) WFLYSRV0050: WildFly Full 14.0.1.Final (WildFly Core 6.0.2.Fi
nal) stopped in 234ms
続行するには何かキーを押してください . . .
>
```

#参考URL
[WildFly Documentation version 15.0.0.Final](http://docs.wildfly.org/15/)
[Getting Started with WildFly 15](http://docs.wildfly.org/15/Getting_Started_Guide.html)
[JBoss EAP 7.1 スタートガイド](https://access.redhat.com/documentation/ja-jp/red_hat_jboss_enterprise_application_platform/7.1/html/getting_started_guide/administering_jboss_eap#stopping_jboss_eap)
[JBoss Enterprise Application Platform6 構築・運用パーフェクトガイド](https://www.amazon.co.jp/dp/4774157945)
[OpenStandia WildFly最新情報](https://openstandia.jp/oss_info/wildfly/index.html)