JET (JakartaEE Toolkit) -- 5分でできるJakartaEE開発環境

　この投稿は"**Jakarta EE＋Payara server＋NetBeansで開発しよう！**"の第2回です

　JakartaEEのセットアップは、JDK、IDE、アプリケーションサーバーなど、いろいろ準備が必要で、なんといっても手間がかかります。そこで、ふと考えました。「あらかじめみんな集めてワンセットにしておけばどうだろう」と。そして、いろいろ試行錯誤して、作成してみたのが"**JET (JakartaEE Toolkit)"**です（今回は、Windows用ですが、Mac用もすぐに何とかする予定です）。可能な限りの設定を済ませてあるので、ダウンロードして解凍すると、それから**５分**以内にJakartEE開発を始められます。

　**JET**では、Zipを解凍するだけでNetBeansが動きます（JDKは組み込んでいるので、インストール不要）。[**日本語化プラグイン**](https://junichi11.com/netbeans/netbeans-111-release-and-l10n)を入れてあるので、日本語化も済んでいます。簡単なサーバー連携の設定をするだけで、Payaraサーバーが使えます（Payara5を同梱しています）。Payara Serverには、MySQLとPostgreSQL、H2などのデータベースドライバを登録済みで、JDBCコネクションプールとJDBCリソース（データソース）も最初から登録されています。つまり、面倒なデータベース設定は不要で、すぐに使える状態になっています。

　また、NetBeansには、**JSF用**の新規Mavenプロジェクトを生成する**Builderプロジェクト**が付いています（REST用には、元から付いているアーキタイプを使って、［新規プロジェクト］⇒［Maven］⇒［Webプロジェクト］で問題なし）。すぐに新規Maven-JSFプロジェクトを作成して、JakartaEE開発ができます。

　さらに、やはりアーキタイプでプロジェクトを生成したいという人のために、オリジナルなアーキタイプも作成しました。NetBeansプロジェクトファイルの形で添付しています。**mvn clean install** コマンドを実行することで、**jakarta-ee-jsf**アーキタイプを使用できます。後日、解説を掲載する予定ですから、それを読むと自分で改造もできますよ。

　**ダウンロード**：[**JakartaEE Toolkit ver 0.90**](https://k-webs.jp/JavaEE/download/jakarta.zip)
　ダウンロード先は「わかりやすいJavaEE」のサポートウェブです。ダウンロードしたファイルの中に、[簡単な使い方](https://k-webs.jp/JavaEE/new_download/readme.pdf)が入っているので、それを見て使ってみてください。また、[「**わかりやすいJavaEE**」](http://www.amazon.co.jp/gp/product/4798042161/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4798042161&linkCode=as2&tag=kwebs-22)の例題（内容はEE７）をMavenプロジェクトに直したものも[**ダウンロード**](https://k-webs.jp/JavaEE/index.html)できます。これらを試すのもよいでしょう。

####◆データベースシステムは･･･
　H2データベース（Payaraのデフォルトのデータベース）は、Payara付属のバッチファイルから起動できます。MySQLやPostgrSQLなどは、それぞれインストールする必要があります。でも、開発用ですからね。いちいちインストールするのはやめて、**Docker**を使う方が格段に簡単です。そもそも、インストール作業なんてないのですから。コマンドを一行タイプするだけで、データベースが使えるようになります。

####◆Windows home でもDocker Desktopが動く
　ところで、DockerをWindowsで動かすには、Hyper-Vが必要なので、Winodow10 Proが必要です。homeでは動きません。Oracleが作ったツールで代用できますが、期待通りの働きをしてくれないことがあり、フラストレーションがたまります。

　ところがです。Windows10 homeの次のパージョンアップから、home版でもDockerが動くようになります！
●[**Docker Desktop for Windows Home is here!**](https://www.docker.com/blog/docker-desktop-for-windows-home-is-here/)

　なお、今すぐ使ってみたい場合は、[**Windows Insiderプログラムに参加**](https://insider.windows.com/ja-jp/getting-started/)してOSを更新し、[**Docker Desktop Edge 2.2.2.0**](https://download.docker.com/win/edge/Docker%20Desktop%20Installer.exe)をインストールすればOKです。

　これで、ほとんどのパソコンにDockerを使う環境が「ある」と前提して、話を進めることができるようになりました。自宅のWindowsがProではなく、homeだという人はかなりいるはず。本当に朗報でした。

#Dockerを使ってMySQLを動かす
　そもそもDockerとは何か、ものすごく簡単にいうと**「仮想Linuxマシン」製造機**です。ポンポン作れます。しかも、最初からいろいろなサーバーセットが用意してあるという便利さ。コマンドを１行タイプするだけで、Dockerハブから自動的にダウンロードして、セットアップしてくれます。 
　大体、サーバーを利用するだけなら、Linuxの知識すら不要です。Dockerで製造した仮想Linuxマシンの中のサーバーは、"localhost"として、自分のパソコンにインストールしたサーバーと同じに使えます。この簡単さはものすごくインパクトがありますね。

###◆どうしたらDockerを使えるか
①[**Docker Desktop for Windows**](https://www.docker.com/get-started)をダウンロードする
②ダウンロードファイルをダブルクリックしてインストールする
③デスクトップにDocker Desktopアイコンができるのでダブルクリックで起動する

###◆そして、MySQLデータベースサーバーを使えるようにするには
●**Windows Power Shell**を起動して、次のコマンドをタイプする
`docker run --name mysql8 -e MYSQL_ROOT_PASSWORD=mysql8 -d -p 3306:3306 mysql:latest`
![powershell_mysql.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60058/9930c41e-4f44-c050-89f5-7746de24b2c6.gif)
これでだけで、MySQLデータベースが起動した状態になります！
![powershell_mysql_説明.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60058/46115794-cf96-18bb-96a9-9d000bd7f506.gif)
　
　なお、rootパスワードは、"mysql8"としておくと、JETの使用が簡単になります。違うものにした場合、Payara Serverに登録したJDBCコネクションプールで、Password属性を変更しなくてはいけません（Payaraの管理コンソールで、「JDBC接続プール」の中のmydb_poolを開き、「追加プロパティ」タブをクリックすると、画面上で変更できます）。

次のコマンドで、起動確認ができます。簡単ですね！
`docker ps`
なお、停止は
`docker stop mysql8`
起動は
`docker start mysql8`
です。
　Dockerコマンドの詳細は、@wMETAwさんの[Docker コマンドチートシート](https://qiita.com/wMETAw/items/34ba5c980e2a38e548db)などを参考にするといいでしょう。
###◆スキーマを作成する
　データベースを使うには、スキーマが必要です。つまり、データベースの構成を定義して、いろいろなテーブルや関係を入れることができるようにします。これはSQLコマンドで簡単に実行できます。**mydb**という名前でスキーマを作成しておくと、JETの利用が簡単になります。違った名前にすると、Payara Serverに登録してある「JDBC接続プール」で、DatabaseName属性の変更が必要になります（変更方法はパスワードと同じ）。

①mysql8コンテナのベースになっている仮想Liuxシステムで、
　bashシェル（コマンドプロンプト的なもの）を起動する
`docker exec -it mysql8 bash`
![docker_create_schema_01.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60058/a4c7b4fc-1cc3-def4-e7a4-2ae599c42998.gif)
②bashプロンプトからMySQLモニタ（MySQLにSQLを発行できる）を起動する
`mysql -u root -pmysql8`　　※pとmysql8は離さない
![docker_create_schema_02.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60058/51321c74-0653-f12c-5d49-674bed777089.gif)
③スキーマ**mydb**を作成するためのSQLを発行した後、元の画面に戻る
`CREATE SCHEMA `mydb` DEFAULT CHARACTER SET utf8 ;`
![docker_create_schema_03.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60058/bf384d90-d416-26b8-6ec0-88acfc8d06b3.gif)
※exit; をタイプしてbashに戻り、exitをタイプしてPowerShellに戻る



#DockerとNetBeansの連携
MySQLが起動していることを、NetBeansから確認し、さらに停止したり、起動したりできます。

**＜手順＞**
①タスクバーで、Dockerアイコンをクリックする
![docker-setting-1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60058/7d308af4-3174-9ac8-0822-a0bc721e630f.gif)
②ポップアップメニューで［Settigs]を選択する
③［Expose daemon on tcp://localhost:2375 without TLS］にチェックを入れる
④［Applay & Restart］を押す
＜注意＞念のために、②のメニューで、もう一度［Restart...］をクリックすると確実です
⑤（起動していなければ）NetBeansを起動する
⑥［サービス］タブの［Docker］を右ボタンでクリックして、［Dockerの追加...］を選ぶ
⑦［接続をテスト］で接続を確認し、［終了］を押す
⑧ローカルDockerのノードを展開する
![netbeans_docker.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60058/568f44df-e7f6-d538-bc8a-5b3260f11e54.png)

コンテナにあるMySQLのノードに緑の三角が付いていれば起動中です。ノードをマウスの右ボタンでクリックして、ポップアップメニューから停止や起動もできます。

####◆NetBeansからmydbデータベースを操作できるようにする
　テーブルを確認したり、SQLを発行したりできるようになります

①［サービス］タブの［ドライバ］で、［MySQL(･･･)］を右クリックして接続を選ぶ
![MySQL_NetBeans_ドライバの指定1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60058/92f14a82-3196-56bb-6e4a-cf6e6db3b54e.gif)

②［追加］ボタンを押してMySQL用のドライバを追加する（ドライバは**jakarta**フォルダに入っている）
　**Jakarta/jdbc-driver** フォルダから、**mysql-connector-java-8.0.19.jar**を指定する
![MySQL_NetBeans_ドライバの指定2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60058/6f6f08c7-342e-c439-c840-d86f76c5a190.gif)

③ドライバを追加したら［次へ］を押す
![MySQL_NetBeans_ドライバの指定3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60058/a891a230-678b-b171-8f0b-348df8ed237c.gif)

④データベース名に**mydb**、パスワードに**mysql8**と入力し、パスワードを記憶するにチェックを入れる
　最後に［次へ」のボタンを押す
　さらに、この次の画面ではなにもせず、［次へ］のボタンを押す
![MySQL_NetBeans_ドライバの指定4.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60058/f1838cfa-a9eb-45df-1360-f4549e49f1fa.gif)

⑤識別名の内容を消し、**mydb**と入力して［終了］を押す
![MySQL_NetBeans_ドライバの指定5.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60058/0e0ce01b-e7a8-757f-adfb-4d23dff753d6.gif)

⑥mydbが表示される。
![MySQL_NetBeans_ドライバの指定6.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60058/ce88bc80-e30d-fcf8-205d-19bd310927a5.gif)
※各ノードの上で右ボタンをクリックすると、内容を見たりSQLを発行したりできます

#まとめ
　**JET**（JakartaEE Toolkit）と**Docker**を使って、すばやくJakartaEEの開発・学習環境を作る方法を解説しました。JETでは、NetBeansとPayaraの連携をするだけです。そして、Dockerがすでに入っていれば、データベース準備も一瞬ですから、**5分**もあればJakartaEE開発に取り掛かれます。6月にはJakartEE9が公開され、そしていよいよ年末には期待のJakartaEE10が公開予定です。**JakartaEE**、始めるにはちょうどよい機会ではないでしょうか。