WildFly, TomEE ,GlassFish ときたので、ここは当然? payara にも手を出してみる。
インストール
公式ページのここから適当なバージョンの Payara をダウンロード。
今だと JakartaEE 10 対応の Ver6 系列が落とせるので、そいつの full の方をチョイス。
web profile もあるが、違いを解説できるほど詳しくはないので今回はスルー。
なお、環境は MacOS Monterey, java17 ですが、windows 環境でも同様の手順で起動〜簡単な動作確認はできるでしょう。
解凍すれば使えるようにはなっている。
問題は置き場所だが、多分、ほとんどの人がまずはお試しで使うと思うので、/usr/local ではなく、ユーザーホームの適当なフォルダに配置すればいいと思う。
/payara6/bin
に移動して
./asadmin start-domain
でまずは起動。
ブラウザで localhost:4848 にアクセスして、以下のような管理コンソール画面が表示されればまずは Payara のインストール自体は成功しています。
なんらかの事情でインストールした(ローカル)ホスト以外のマシンからアクセスするためにはパスワード設定を有効にする必要があります。
./asadmin change-admin-password
を実行して新しい管理者とそのパスワードを設定。その後
./asadmin enable-secure-admin
を実行して、再起動すれば、外部リモートマシンから管理コンソール画面にアクセスできるようになります。
上記設定が完了すると管理画面呼び出し時にパスワード入力を求められるようになります。
とりあえず簡単な war ファイルをデプロイしたいんだが、その前に・・・
Payara の port を変更
8080 ポートは、WildFly や Tomcat などで使用されている場合が多いと思うので、あらかじめ 80 に変更しておきたい。
これは上のコンソール画面から簡単に行える。
画面右のノードから configurations -> server-config -> Network Config -> Network Listners の順に展開。
下図の Port: 8080 のところを 80 に変更。
glassfish と同様にその場で変更できる。再起動不要。
実際、この状態で localhost:80 にアクセスすると
というウェブページが表示される。
ここらへん、Tomcat あたりと違う。
データベース(PotgreSQL)との連携
GlassFish の時と同様、
JDBC コネクションプールの作成→データリソースの作成
とすればいいです。
ただし、GlassFish の時と違うのはコネクションプールの作成より先に jdbc ドライバをコマンドラインから登録しておくこと。
Payara 起動後、コマンドラインから
asadmin add-library (path)/postgresql-(version).jar
と入力。
Command add-library executed successfully
と返ってくれば OK牧場です。
よくわからなければ公式のブログ記事(『Using PostgreSQL with Payara Server』)参照。
コネクションプールを作成して、ping を打った時に
と Ping Succeededとなれば、設定はうまくいってます。
GlassFish の時と同様、クラスパスの設定などは不要です。
設定がうまくいってないと「クラスパスを正しくセットしる」みたいなエラーメッセージは出るんですが、真にうけない方がいいでしょう。
簡単なウェブアプリで動作確認
今回も jpa-hibernate プロジェクトを使用。
なんですが、通常の書き方だと動作しません。
しばらくハマって頭上に?マークを浮かべてたんですが、これは Payara6 で hibernate を使う時に出現するバグのようです。
GitHub isuues でスレ立ってます。
解決方法は、そこにも書いてありますが、persistence.xml に
(persitence.xml)
<property name="hibernate.type.xml_format_mapper" value="jaxb"/>
<property name="hibernate.type.json_format_mapper" value="jsonb"/>
の2行を追加することです。
しかし、この解決(最終的な解決ではないですが)方法が提示されたのは、この記事書いている4日前。
当方の JakartaEE 力もあがってきているなあと思うと同時に、自由を維持していくことはそれなりの労力がかかるんだということを痛感させられます。
バグについて
なお、このバグに興味を持って、Payara のソースコードを少し読んだんだが、内部的には JavaEE 8 的な処理があって、これはちょっと根が深いかな?とは思った。
WildFly の鬼のような分量のソースコードを読むのに比べれば、負担は少ないのかもしれないが、これに取り組むのは気が引ける。。。
バグ?
データベース名に database-1 などとハイフンを入れるとハイフン以下を無視して動作するようだ。