お金をかけずにサーバーの勉強をしよう

Jakarta EE 10 の環境構築 (Payaraインストール)

2023年6月2日

メニューへ戻る

企業のシステム構築の場合、中々 OSSを使わせてもらえないケースも多々有ります。

使うにしても、有償サポートという名の「ケツの持って行き先」がないと偉い人の承認が下りない、という現場も多いことでしょう。

Javaでのフルスクラッチによる WEBシステム開発では Spring Boot が花盛り。
組み込み Tomcatのおかげで、最早 Tomcatのようなミドルウェアの環境構築さえいらなくなっているのでした。

そんなキラキラした世界を横目に、SIerでは Oracle WebLogicIBM WebSphere富士通 Interstage といった製品を使わなければなりません。

この「有償サポートのある」ミドルウェアを使うために、パブリッククラウドでも Javaの PaaSを使わずに IaaS仮想マシンが選択されたりして、エンジニアが新しいものに触れる機会が無かったりしますよね。

※PaaSの課金も結構高い割に何かと制限もあったりして IaaSが好まれるという事情もあります。
PaaS = 正義・IaaS = 悪、WEB屋 → カッコイイ・SIer → m9(^Д^)プギャー、というような単純な話ではありません。

このような話はどこにでも転がっており「Javaの環境の面倒を見ているけど、いつの間にか JavaEE(Enterprise Edition)だった。」というサーバーエンジニアも多いのではないでしょうか。

さて、この JavaEEですが、元々サン・マイクロシステムズが作っていたのですが、同社が Oracleに買われて、その後すったもんだがあり、現在は Eclipse Foundation に移管されています。

JavaEEは Oracleの商標のため、名前を JAKARTA EE に変更し、今に至っています。

そして 2022年10月5日、最新の Ver.10がリリースされました。


長くなりましたが、Jakarta EE 10の環境として、Oracleが作っていた Glassfishの後継である Payara(パイアラ)をインストールしてみようと思います。

環境は企業ユースが多いと思われますので、お堅い所で RedHat Enterprise Linux 9.2のつもりの Rocky Linux 9.2にインストールします。

前提になる Rocky Linuxのインストールについては「Rocky Linuxインストール(CentOS代替)」に書いています。


Java EE 10の前提として Java SEが必要なんですが、まだ Java 19 には対応していませんので、OpenJDK 17 をインストールします。

[subro@Rocky-2 ~]$ sudo dnf install -y java-17-openjdk
〜〜〜 省略 〜〜〜
完了しました!

インストールできました。

バージョンを確認します。

[subro@Rocky-2 ~]$ java --version
openjdk 17.0.7 2023-04-18 LTS
OpenJDK Runtime Environment (Red_Hat-17.0.7.0.7-2) (build 17.0.7+7-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-17.0.7.0.7-2) (build 17.0.7+7-LTS, mixed mode, sharing)

2023年6月2日時点で、17.0.7がインストールされました。


次は Jakarta EEの実装環境である Payara 6 を以下からダウンロードします。
Payara Platform Community Edition

2023年6月2日時点で 6.2023.5 が最新バージョンで、少し下にスクロールすると多言語版の [Payara ML 6.2023.5 (Multi-Language Full)] があります。
Downloadを押します。
Payara ダウンロード画面

ダウンロードが済むと payara-ml-6.2023.5.zip というファイルが得られました。
これを scpコマンドで Rocky Linuxに持っていきました。

Payaraの説明書(英語)はこちらです。
Payara Community Documentation

Payaraの開始の仕方はこのドキュメントの以下の場所に書いてあります。
Getting Started

これに従ってインストールしていきます。

Rocky Linuxに持ってきたファイルはこの通り。

[subro@RockyLinux-2 ~]$ ls -l payara-ml-6.2023.5.zip
-rw-r--r--. 1 subro subro 169526061  6月  2 10:47 payara-ml-6.2023.5.zip

zipファイルを解凍します。

[subro@RockyLinux-2 ~]$ unzip payara-ml-6.2023.5.zip
〜〜〜 省略 〜〜〜
   creating: payara6/mq/examples/jaas/
  inflating: payara6/mq/examples/jaas/README

[payara6]ディレクトリ以下に展開されました。

Payaraを起動します。

[subro@RockyLinux-2 ~]$ ./payara6/bin/asadmin start-domain
Waiting for domain1 to start ...............
Successfully started the domain : domain1
domain  Location: /home/subro/payara6/glassfish/domains/domain1
Log File: /home/subro/payara6/glassfish/domains/domain1/logs/server.log
Admin Port: 4848
Command start-domain executed successfully.

結構重たくて、開始するまでちょっと時間がかかりました。

4848/tcpで待ち受けているようですので、firewall-cmd コマンドで、同ポートへのアクセスを開放します。
どうせ後でユーザーアクセス用のポート 8080/tcpも必要になるので一緒に開けておきます。

[subro@RockyLinux-2 ~]$ sudo firewall-cmd --permanent --add-port=4848/tcp
success
[subro@RockyLinux-2 ~]$ sudo firewall-cmd --permanent --add-port=8080/tcp
success
[subro@RockyLinux-2 ~]$ sudo firewall-cmd --reload
success

Administration Consoleにアクセスせい!というので、そうします。
ウチの場合だと [http://Rocky-2:4848] です。

ログイン画面になりますが、リモートからの管理者ユーザーでのアクセスを許していないそうです。
Payaraログイン画面(NG)

しかし Rocky Linuxには GUIをインストールしていませんので、リモートアクセスをできるようにしたい。

分かりにくいんですが、ドキュメントのここに書いてあります。
Rest Monitoring Security

以下3つの設定をすると可能になります。


管理ユーザーの初期パスワードを設定します。

[subro@RockyLinux-2 ~]$ ./payara6/bin/asadmin change-admin-password
Enter admin user name [default: admin]> Enterキー ← 管理ユーザー名を変えられるようですが admin のままにしておきます。
Enter the admin password> Enterキー ← 初期は空です。
Enter the new admin password> 新パスワード
Enter the new admin password again> 新パスワードをもう一回
Command change-admin-password executed successfully.

管理ユーザー名が [admin] で、そのパスワードを設定できました。

enable-secure-adminコマンドを実行します。

[subro@RockyLinux-2 ~]$ ./payara6/bin/asadmin enable-secure-admin
Enter admin user name> admin
Enter admin password for user "admin"> 新パスワード
You must restart all running servers for the change in secure admin to take effect.
Command enable-secure-admin executed successfully.

今起動しているサーバー(ドメイン)を全て再起動しろって言っています。
ここでは [domain1]ドメインだけです。

[domain1]ドメインを再起動します。

[subro@RockyLinux-2 ~]$ ./payara6/bin/asadmin restart-domains domain1
Enter admin user name> admin
Enter admin password for user "admin"> さっき変更した[admin]ユーザーの新パスワード
Successfully restarted the domain
Restarted domain domain1
Command restart-domains executed successfully.

再起動できました。
これで Payaraの管理画面を使えるはずですので、改めて Webブラウザでアクセスします。

今度は何も言われません。
ログイン画面になりますので、[admin/新パスワード] を入力してログインを押します。
Payaraログイン画面(OK)

このような画面になります。
Payara管理画面

後でこの画面でサーブレットプログラムを配備(デプロイ)するので、このまま保持でお願いします。


JakartaEE 10 の実行環境ができましたので、サーブレットを作って動かしてみます。

Hello World サーブレットの作成チュートリアル(JakartaEE 9のですが)が以下にありますので、それに沿って進めます。
Getting Started with Jakarta EE 9: Hello World

Javaの開発ができるマシンなら作成するのはどこでも良いのですが、とりあえずこの RockyLinuxの中で作ります。

ビルドツールの Mavenを使いますので、インストールします。

[subro@RockyLinux-2 ~]$ sudo dnf install maven
〜〜〜 省略 〜〜〜

Maven(mvnコマンド)を使ってプロジェクトを作ります。
~/work ディレクトリで作業しています。

[subro@RockyLinux-2 work]$ mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart
〜〜〜 省略 〜〜〜
Define value for property 'groupId': org.subro
Define value for property 'artifactId': hello
Define value for property 'version' 1.0-SNAPSHOT: : Enterキー
Define value for property 'package' org.subro: : org.subro.hello
Confirm properties configuration:
groupId: org.subro
artifactId: hello
version: 1.0-SNAPSHOT
package: org.subro.hello
 Y: : Y
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: maven-archetype-quickstart:1.4
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: org.subro
[INFO] Parameter: artifactId, Value: hello
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: org.subro.hello
[INFO] Parameter: packageInPathFormat, Value: org/subro/hello
[INFO] Parameter: package, Value: org.subro.hello
[INFO] Parameter: groupId, Value: org.subro
[INFO] Parameter: artifactId, Value: hello
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Project created from Archetype in dir: /home/subro/work/hello
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  01:24 min
[INFO] Finished at: 2023-06-02T11:12:35+09:00
[INFO] ------------------------------------------------------------------------

プロジェクトができました。
この様な構成です。

[subro@RockyLinux-2 work]$ tree hello
hello
├── pom.xml
└── src
    ├── main
    │   └── java
    │       └── org
    │           └── subro
    │               └── hello
    │                   └── App.java
    └── test
        └── java
            └── org
                └── subro
                    └── hello
                        └── AppTest.java

[~/work/hello/src/main/java/org/subro/hello/HelloServlet.java] ファイルを以下の内容で作成します。

[subro@RockyLinux-2 work]$ cat hello/src/main/java/org/subro/hello/HelloServlet.java
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

@WebServlet("/world")
public class HelloServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getOutputStream().println("Hello World");

    }
}

ピンクの箇所、以前は「javax」でしたね。
「javax」は Oracleが作っていた JavaEE 8までのパッケージ名でした。

Jakarta EE になってからパッケージ名が変わりましたので、既存のソースはここを直していかないといけません。

Mavenビルド用の設定ファイル [~/work/hello/pom.xml]ファイルを以下の内容に書き換えて下さい。
チュートリアルにあったものから、テストフレームワークの JUnitを足したのと、Jakarta EE は 10.0.0が最新になっていたのでそれに変えました。

[subro@RockyLinux-2 work]$ cat hello/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>fish.payara.jakarta.ee9.start</groupId>
   <artifactId>hello</artifactId>
   <version>1.0</version>
   <packaging>war</packaging>

   <dependencies>
      <dependency>
         <groupId>jakarta.platform</groupId>
         <artifactId>jakarta.jakartaee-web-api</artifactId>
         <version>10.0.0</version>
         <scope>provided</scope>
      </dependency>
      <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>4.13.2</version>
         <scope>test</scope>
      </dependency>
   </dependencies>

   <build>
      <finalName>hello</finalName>
   </build>

   <properties>
      <maven.compiler.source>11</maven.compiler.source>
      <maven.compiler.target>11</maven.compiler.target>
      <failOnMissingWebXml>false</failOnMissingWebXml>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>
</project>

ビルドします。
プロジェクトディレクトリの hello に移動して下さい。

[subro@RockyLinux-2 hello]$ mvn package
〜〜〜 省略 〜〜〜
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.572 s
[INFO] Finished at: 2023-06-02T11:52:19+09:00
[INFO] ------------------------------------------------------------------------

ビルド出来ました。

デプロイに供する WARファイルは [~/work/hello/target/hello.war] としてできています。
Payaraでデプロイ操作する時にこのファイルを指定します。


Payaraの管理画面に戻ります。

左のメニューから[アプリケーション]を選択します。
Payara管理画面 2

デプロイを押します。
Payara管理画面 3

今回はローカルディスク上にサーブレットプログラムファイル(WARファイル)を作りましたので、[Payara Serverからアクセス可能なローカルのパッケージ・ファイルまたはディレクトリ] を選択して、今回作った [/home/subro/work/hello/target/hello.war]ファイルを対象にします。

そうすると下に画面が伸びます。

[タイプ] には [WEBアプリケーション] を選択します。
[コンテキストルート] は「hello」にしておきます。
一通り入れ終わったら、画面右上か右下にあるOKを押します。 Payara管理画面 4

[アクション] 列にある [起動] をクリックします。
Payara管理画面 5

起動が完了するとこの画面になりますので、閉じるを押します。
Payara管理画面 6
これでデプロイ完了です。


WEBブラウザで [http://Rocky-2:8080/hello/world] にアクセスしたところ、サーブレットがちゃんと動いていることが確認できました。
HelloWorldサーブレット実行結果


Payaraの停止は以下のコマンドを実行して下さい。
ホームディレクトリで実行しています。

[subro@RockyLinux-2 ~]$ ./payara6/bin/asadmin stop-domain
Waiting for the domain to stop .
Command stop-domain executed successfully.



Payaraのインストールから、サーブレットの配備まで、全て Jakarta EE 10 の環境で動かしてみました。

単に Jakarta EEの機能を使うアプリケーションの検証だけなら同じように作っていけば良いのですが、Payaraを始めとする Jarkata EEのアプリケーションサーバー(ミドルウェア)の運用はそれだけで一つの知識体系になる程のものです。

それは Javaでの開発とはまた違ったスキルですので、運用に当たる人は Jakarta EEの知識に加えて、この手のアプリケーションサーバーのマニュアルを読み込む必要があると思います。

正直な事を言うとこれは結構難しく、そのために Java EEから人が離れていってしまったのではないかなと思う程で、それ故に Java EEを使わずに通信系アプリケーションの開発ができる Spring Frameworkに人が流れてるようにも感じます。

ただ、上に書いた通り Jakarta EEの商用アプリケーションサーバーの保守に入れば Jakarta EEのこともサポートに聞くことができると思いますので、安心を求める大きな企業さんではこれから導入が増えるかも知れません。


日本では昔からずっと富士通が Java EEの開発に関わっています。
国内IT企業が開発に関わっているというとちょっと安心感がありますね。


日本語書籍はこれだけ。

わかりやすい Jakarta EE ウェブシステム入門 [ 川場 隆 ]

価格:3,850円
(2022/8/12 12:01時点)
感想(0件)


私は Java EE 7の頃に、この本(上の本と同じ著者)で JSFや JPAをやりました。
特に JPAで ORMというものに触れて、何て便利なんだ!って思ったものでした。

【中古】 わかりやすいJavaEE ウェブシステム入門/川場隆(著者) 【中古】afb

価格:289円
(2022/8/12 11:58時点)
感想(0件)


こちらは JavaEE界隈のバイブル的なやつですね。

パーフェクトJava EE (Perfect series) [ 井上誠一郎 ]

価格:3,520円
(2022/8/12 11:58時点)
感想(0件)