Jakarta EE10でもUberJarでお気軽開発をする〜Payara編〜

# はじめに

本記事はMDC Advent Calendar 2022の10日目の記事です。

https://qiita.com/advent-calendar/2022/mdc

Jakarta EE10でもUberJarを使って開発するぞ、ということで前回はOpen Libertyをターゲットに動作確認しました。

https://qiita.com/omix222/items/b748df83ae9a652719f2

今回は前回使ったソースコードをベースに修正していくことでPayaraに対応していきたいと思います。

# Payaraとは

Payaraは、GlassFish Serverのオープンソース版から派生したJava EE、Jakarta EE準拠のアプリケーションサーバーです。OSS版、エンタープライズ版がありますが、今回はOSS版を使っていきます。

日本ではサムライズムさんが代理店対応を行っています。

https://samuraism.com/payara


# Open Liberty → Payara対応

まず、PayaraでJakartaEE10、UberJar対応する方法を調べます。
以下記事を見てわかるとおり、PayaraでUberJar化する際には、Payara Microを使います。

https://blog.payara.fish/creating-uber-jar-with-payara-micro-japanese

また、Payaraのリリースページを見ていくと、Payara6からJakarta EE10対応しているようですので、そちらを採用していきます。

https://www.payara.fish/downloads/payara-platform-community-edition/

なお、Payara MicroはMavenセントラルリポジトリに上がっていますのでそちらを使っていきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113217/36fd1e49-1902-d7f4-56a4-dc976a597c5f.png)

https://mvnrepository.com/artifact/fish.payara.extras/payara-micro


## pom.xmlの修正

- (10行目) Open LibertyのMavenバージョンの指定は不要となるので削除します
- (26行目以降) Payara Microは依存ライブラリに追加する形での利用となるので、追加します。バージョンは6系を使いたいので6.2022.1とします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113217/d385f41d-02be-644f-50c1-91d8659c8590.png)

diffが広範囲になってわかりにくいのですが、差分は以下です。
- (53行目以降) Open Libertyのプラグインは不要となるので削除します
- (58行目以降) Payara Microのプラグインを追加します
- (80行目以降) Mavenコンパイラブラグインを追加し、JDKのバージョンを11に指定します。こちらは追加不要かもしれません。正常動作しているほかのリポジトリから念の為持ってきました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113217/f01af10c-1813-2e37-9ee2-8f1042e6e8f6.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113217/9ce666da-54e7-2aa2-0452-df47c23293e7.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113217/9f5ce126-3155-d0e8-b89b-34f3abd0412d.png)

## Open Libertyの独自ファイルの削除

- server.xmlを削除しました 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113217/e72f84bb-184a-260a-e55a-a6bc3788d4e3.png)


## （おまけ）HTMLの修正

- 画面がMicroProfileのままになっていたので、JakartaEEに変更しておきました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113217/d3c9d465-f6e4-814a-fbd6-8493cb8a819a.png)

# 動作確認

Payara Microは実行プラグインを用意してくれているので、``mvn clean package payara-micro:start``のコマンド１発でビルドと起動させることができます。
初回は各種ライブラリダウンロードするので時間がかかります。以下は2回目以降の実行時ログ抜粋です。


```
\$ mvn clean package payara-micro:start
[INFO] Scanning for projects...
[WARNING] 
[WARNING] Some problems were encountered while building the effective model for com.example:jeedemo:war:1.0-SNAPSHOT
・
・
〜省略〜
・
・
jeedemo' REST Endpoints:
GET     /data/application.wadl
GET     /data/hello
GET     /openapi/
GET     /openapi/application.wadl

]]

[2022-12-10T00:22:04.782+0900] [] [情報] [] [PayaraMicro] [tid: _ThreadID=1 _ThreadName=main] [timeMillis: 1670599324782] [levelValue: 800] Payara Micro  6.2022.1 #badassmicrofish (build 878) ready in 43,153 (ms)
```
43秒ぐらいでした。前回と比べて早いですね。

画面は前回と同じです。ポートの指定はしていませんので、デフォルトの8080となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113217/91980635-50d1-d203-3d93-e0140138da0b.png)

無事画面表示できました！おまけで修正した内容も正しく反映されています。

# まとめ
今回はPayaraを使ってJakartaEE10でUberJarを実現させてみました。前回よりシンプルで、起動時間も早かったので個人的にはこちらの方が好みです。

# 参考
今回使ったソースコードは以下になります。JavaとMaven環境が整っていれば、``clone``、``mvn clean package payara-micro:start``で動作させることが出来ると思います。

https://github.com/omix222/jeeuberjardemo/tree/payara