JETで始めるJakartaEE



　実用的なソフトウェアを簡単に、ササッと作れるツールを持つと、プログラミングが楽しくなります。Java EEは、そのようなツールとして、大ブレイクしましたが、権利関係にからむ大人の事情によって、しばらく足踏みの状態が続いていました。しかし、ようやく前進の時期を迎えたようです。
#Jakarta EEって、どうなの
　**Java EE**は、OracleからEclipse財団への移譲にともなう混乱をようやく脱出し、12月8日に本当の出発点として、[**Jakarta EE9**](https://jakarta.ee/specifications/platform/9/)が公開されます。内容はJava EE8（Jakarta EE8）とほとんど変わりませんが、javaxからjakartaへ、パッケージ名を変更することでOracleとの権利関係を完全に清算し、これから始まる変革と発展への準備を完了しました。
　おそらく、来年あたりから、Jakarta EEの静かなブームが到来することは間違いありません。プログラミング言語の目利きの皆さんはもちろんですが、これからプログラマを目指すアナタ、始めるなら、今。今が最高によいタイミングです。

#今から始めるJakarta EE
　Java SEの世界から、実務で使われる**Enterprise Java**の世界に飛び移るのは大変です。Java SEの知識・技術を習得していることは最低条件で、その上に全く新しい知識を身に付ける必要があるからです。ところが、今、Enterprise Javaの世界でも、**クラウドネイティブJava**へ向けて、新たなパラダイムシフトが起きつつあります。特に**マイクロサービス**化への流れは、大きな潮流になりました。ただ、新しいパラダイムを理解するには、従来のEnterprise Javaをしっかり理解していることが最低条件です。

　ですから、今、Jakarta EEを始めれば、このようなパラダイムシフトに対応し、それを楽しむ余裕さえ、できるはずです。というのも、この新しい世界は、まだ「新たなフロンティア」状態で、ここしばらくは革新と統合が続きそうです。もう少し時間がかかるでしょう。そして面白くなるのは、ちょうど、これからなのです。

#コ、コ、コロナが・・・
　Enterprise Javaの本は、もともと初心者は対象外なので、「取り扱い説明書」のような、ひどく読みにくいものばかりでした。参照資料としては優れていますが、「これじゃあ、使う人は増えないなぁ（特に日本では）」と、そう思ったものでした。それで、以前、入門書（『わかりやすいJava EE』）を出す時、Java SEを学習した普通の人達が、普通に理解できる本にしようと考えました。幸いにも、本は、多くの人たちに支持され、考えが正しかったことを実感したのでした。

　今年になってから、ようやく後継の本を出す時期が来たのでは、と考えていましたが、いくつか気がかりな点がありました。NetBeansがまだ安定していないこと（かと言って、Eclipseは使い辛い）、膨大な数の例題をantビルドからMavenでのビルドへ移行しなくてはいけないこと、そしてなりよりJakarta EEの開発スケジュールが遅れ気味であること。
　
　しかし、「夏が過ぎるころには、なんとかなるだろう」と思って準備を始めていたのですが、「コ、コ、コロナが・・・」あっという間に蔓延して、何もかも遅れ始めました。結局、12月8日に、**Jakarta EE9**(Java 8対応)が正式公開されることで、決着となりました。すぐ後に、Jakarta EE9.1（Java 11対応）もリリースされます。そして、すでにJakarta EE10（楽しみです！）の準備が始まっています。

#そうだ、JETを作ろう！
　前置きが長くなりましたが、春先に、開発ツールを集めたツールキットを作ろうというアイデアが浮かびました。初めての人が対象ですから、困らないように、NetBeans、Payara Server、（Docker上の）MySQLをセットにして、ある程度設定を済ませて配布しようというアイデアです。例題やドライバ、プラグインなどもセットに入れてしまいます。基本的に、ダウンロードして展開すると、すぐにJakarta EEの開発ができる、そういうツールキットですね。

　それが**JET（Jakarta EE Toolkit）**です。Windows環境では（Mac用もあります）、JDKを組み込んでいるので、解凍したら５分以内に使い始められます。また、NetBeansには山本潤一さんの日本語化プラグイン（[**junichi11.com**](https://junichi11.com/netbeans/netbeans-111-release-and-l10n#more-5048)）を入れて日本語化してあります。データベースも、docker-composeコマンドを実行するだけでMySQLを利用できます。さらに、PayaraにはあらかじめJDBCドライバが登録してあり、JDBCを設定するバッチファイルも同梱しているので、簡単にJDBC関連の設定を完了できます。

　JETのインストール、データベース設定はビデオがありますので、よろしければ見てください。これなら初めてでも安心と、納得できるでしょう。

　[**・JETのインストール（Windows）**](https://youtu.be/CFDQ36PMquk)
　[**・JETのインストール（MacOS）**](https://youtu.be/ojtHV1gk8sM)
　[**・JETでのデータベース設定（Windows）**](https://youtu.be/VfePZPL95Vk)
　[**・JETでのデータベース設定（MacOS）**](https://youtu.be/u1ecGEX99Ts)
　
#プロジェクトの変換、そして・・・
　実は、Java EEからJakarta EEへ、引き継ぐ必要のあるプロジェクトがたくさんありました。手で書き直すのはいやだったので、「自動化できないか」と思って、archeTypeの作成方法を調べていました。参考にしたのは、次のブログです。英語ですが、Googleの自動翻訳で十分読める程度です。
　[**Create your own Maven Archetype in 5 simple steps**](https://rieckpil.de/create-your-own-maven-archetype-in-5-simple-steps/)

　読んでわかったのは、ひな型のプロジェクトを用意しておいて、名前など必要な箇所を書き換えるだけなのだということです。ちょっと、拍子抜けしました。生成に結構時間がかかるので、おそらく、それ以外にいろいろなチェックをするのかもしれませんが、基本はそれだけです。
　したがって、変換のためには、適切なMavenプロジェクトのひな型を用意しておいて、antプロジェクトのJavaファイルや設定ファイルをコピーし、artifactIdなどpom.xml上のスケルトン部分を書き換えるだけでよいわけです。

　やり方が分かったので、半日ほどで、簡単な変換プログラムを（Java SEで）作成できました。しかし、それができたとき、ちょっとしたアイデアが浮かんだのでした・・・

#JSFのプロジェクトがない！
　実は、NetBeansでwebアプリケーションのMavenプロジェクトを作成すると、RESTful Webサービス用のプロジェクトしかできません。つまり、従来作成していたJSF（Java Server Face）用のプロジェクトはできないのです。これからは、サーバーサイドでは、あらゆるものをサービスとして開発しようというクラウドネイティブな考えの表れでしょうか。
（ちなみに、RESTful WebサービスのUIをを**JSF＋clientAPI**で作ると、なかなか便利なのですが・・・）

　代わりに、任意のarcheTypeを読み込んでプロジェクトを作成するメニュー（「原型からのプロジェクト」）があり、JSF用のプロジェクトも何種類か生成できます。しかし、手順が面倒な割には、生成されるプロジェクトにびったりのものがありません。archeTypeの作成者ごとに、目指すところが違うためです。

　そこでarcheTypeを自作するわけですが、今度はarcheTypeからプロジェクトを生成する手順が、面倒なことが気になりました。やってることは、コピーと書き換えだけなのだし、
「ササッとできないかなぁ？
　そうだ変換プログラムを作り変えればできるのでは・・・」
そう考えたのでした。

#プロジェクトビルダーの作成
　そこで作ったのが、**builder**というプログラムです。NetBeansから起動すると次のようなウェブが開きます。これはMavenプロジェクトを生成する簡単なJSFプログラムです。
![9600.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60058/a0af4a16-76fd-f963-b3f2-6b705dea1a70.jpeg)
　プロジェクト名だけ入力して作成ボタンを押すと、瞬時に、JSF用プロジェクトができます（コピーと書き換えだけなのですごく速い）。RESTfulウェブサービス用もラジオボタンで選択できます。また、「データベースを使う」にチェックを入れると、完全な設定ファイル（persistence.xml）も生成します。データソース名は、デフォルトでjdbc/mydbとなっていますが、もちろん変更自由です。

　builderプロジェクトは、JETをダウンロードすると中に入っています。ソースコードやひな型のアーキタイプも見れるので、カスタマイズも簡単ですよ。
　builderの使い方は見たままですが、実際に使用する様子が[**こちらのビデオ**](https://youtu.be/ftxMsbYN58c)で見れます。よろしければ、ご覧ください。
#生成されるMavenプロジェクト
　JSF用とREST（旧JAX-RS）用のプロジェクトは、それぞれ次のように生成されます。
![JET-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60058/210c7624-4428-0108-a896-1b6c73cb7705.png)
　また、pom.xmlは、JSFとRESTで同じで、次のようです。現在は、Jakarta EE8を使う設定になっていますが、Jakarta EE9が公開され次第、JETをversion 2 にアップデート（おおむね12月末頃）し、Jakarta EE9を使う設定に変更する予定です（各種設定ファイルもすべてJakarta EE9用に更新します）。

```xml:pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>jp.wjakarta</groupId>
    <artifactId>sample01</artifactId>
    <version>1.0</version>
    <packaging>war</packaging>
    <name>sample01</name>
	
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <failOnMissingWebXml>false</failOnMissingWebXml>
        <jakartaee-api.version>8.0.0</jakartaee-api.version>
    </properties>
	
    <dependencies>
        <dependency>
            <groupId>jakarta.platform</groupId>
            <artifactId>jakarta.jakartaee-api</artifactId>
            <version>${jakartaee-api.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>5.5.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>2.23.4</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
	
    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>11</source>
                    <target>11</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.2.3</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
```


#JETをダウンロード
 JETは[**こちらからダウンロード**](https://k-webs.jp/jakarta/index.html)できます。ダウンロードして解凍すると、次のようなフォルダ構成になっています。130以上の例題プロジェクトも入っていますので、参考にしてください。[**例題のタイトル一覧表はこちら**](https://k-webs.jp/jakarta/samples.html)です。なお、基本からしっかり学習したい場合は、書籍[**『わかりやすいJakarta EE』**](https://www.amazon.co.jp/%E3%82%8F%E3%81%8B%E3%82%8A%E3%82%84%E3%81%99%E3%81%84JakartaEE-%E3%82%A6%E3%82%A7%E3%83%96%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E5%85%A5%E9%96%80-%E5%B7%9D%E5%A0%B4-%E9%9A%86/dp/4798062081/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=%E3%82%8F%E3%81%8B%E3%82%8A%E3%82%84%E3%81%99%E3%81%84JakartaEE&qid=1606664176&s=books&sr=1-1)をご覧ください。
####windows用
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60058/495e60b3-281e-8d8a-16fa-12f1be86dd61.png)

####MacOS用
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60058/e7affa8f-facc-aa58-9430-a29a66280cce.png)