IBM i OSバージョン毎のサポートJavaバージョンリスト（i5/OS V5R4以降）とJavaバージョン設定方法・確認方法

[こちら](https://qiita.com/gomAnomalocaris/items/c4d2c9d573b94c9603a3)にIBM i 7.2～7.5でサポートされるJavaバージョンをまとめていますが、それ以前のOSバージョンのサポート情報を発掘したので、左記リンクの情報もまとめて全体を下記にまとめました。

## i5/0S V5R4～IBM i 7.5までのサポートJavaバージョンリスト

**出典：Java products and options on IBM i　https://www.ibm.com/support/pages/java-products-and-options-ibm-i**
※下記では省略していますが、サポートに必要な前提PTF情報が上記の出典元に記載されていますので併せてご確認ください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/520dda0f-cc45-4184-53d9-4e6a638f4fb3.png)


※画像であいすいません・・ExcelからQiitaの表にコピペできる技が分かりません・・・　pptxをシェアする方法もわからず（考えます・・）

## Javaバージョンの設定方法（JAVA_HOME環境変数の設定）

**IBM Technology for Java の場合**
Java8 32ビットを設定したい場合は、以下のコマンドを5250コマンドラインやCLPから実行します。
```
ADDENVVAR ENVVAR(JAVA_HOME) VALUE(‘/QOpenSys/QIBM/ProdData/JavaVM/jdk80/32bit’) 
```

## 1つのIBM i LPAR(VM)に複数のJavaバージョンを導入している場合のデフォルトJDKの順位

上図のようにIBM i は複数のJavaバージョンをインストール可能です。1つのジョブでは1つのJavaバージョンのみ実行できますが、ジョブ毎に別々のJavaバージョンを動作させることが出来ます。
IBM i 7.5の場合、複数のJavaをインストールしている場合のデフォルトの優先順位（JAVA_HOME環境変数を指定しない場合の優先順位）は以下のとおりです。

    オプション 17- IBM Technology for Java 8.0 64 ビット
    オプション 16- IBM Technology for Java 8.0 32 ビット
    オプション 19- IBM Technology for Java 11 64 ビット
    オプション 20- IBM Technology for Java 17 64 ビット※1

※1 当記事執筆時点の下記Infocenter記事＠日本語にはjava 17 64ビットサポートの記述が無いので推測ですが（過去の情報から推測して）間違いないと思われます。。

**複数の Java Development Its (JDK) のサポート : https://www.ibm.com/docs/ja/i/7.5?topic=server-support-multiple-java-development-kits-jdks**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/6bae7d11-f45c-6df5-d0a0-c7942777002c.png)

### Classic JVMの場合のJavaバージョンの設定方法

2025年時点ではほぼ使われることは無いでしょうけど、参考に書いておきます。この場合は、java.version システム・プロパティーによって、実行されるJavaバージョンが決定されます。
※Java 仮想マシンが稼働状態になってからjava.version システム・プロパティーを変更した場合、Java仮想マシンを再起動後に反映されます。

## IBM i で実行されているJavaバージョンの確認方法
IBM i サービスで一発確認できたはずですが、IBM i OSコマンドの場合は・・

### 方法① Javaを実行中のジョブログで確認する

DSPJOBLOGコマンドなどでジョブログを確認します。
下記はLWI(IWS:統合APサーバー）のジョブログ例です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/3da51dab-cbda-4add-1be4-1529a4e51ef6.png)

 JAVA仮想マシンはIBM TECHNOLOGY FOR JAVAです。PID(56)。  の行にカーソルを合わせて、PF1キーを押すとJAVAバージョンが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/36e03237-beb0-7ac8-151f-61d828904241.png)

JAVA8 64ビットで稼働していました。


### 方法② QSHまたはQP2TERMから　java -version コマンドを実行する
こちらは5250ジョブなど端末からログインしてコマンド実行できる環境のジョブの場合利用できます。

5250の場合、下記の例のように QSH と押下して、QSHのコマンドラインから
```
java -version
```
と入力しエンターキーを押します。
結果は下記のように返されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/e71641ab-7ac5-9c52-a69e-99c86376e594.png)

こちらもJAVA8 64ビットでした。
 
### 方法③　IBM i サービスで（QSYS2.JVM_INFO()表関数）

JAVA関連のIBM i サービスはいくつかありますが、今回は QSYS2.JVM_INFO() を使ってみました。

```
SELECT * FROM TABLE(QSYS2.JVM_INFO(WAIT_TIME => 10));
```

※実行環境によってはJAVA実行中のジョブ数が無限大なので、WAIT_TIMEで実行処理時間上限を10秒で切っています。（社内テスト環境だと１０秒かかることは絶対ないのですが・・(^^;）
結果は、、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/ef13d99a-66dd-47aa-2eda-e40791f1afec.png)

JAVA_HOMEカラムを見ます。JAVA8とJAVA17のジョブが確認できますね。
やっぱりSQL(IBM iサービス）が楽みたいですねv。


## おまけ
一番上のサポートバージョンの表のテキストデータを貼ってみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/85384f6c-a4df-6e89-bef7-279286657aa5.png)
ライセンスプログラム 57xx-JV1 オプションNo	Classic JVM / J9	JAVA_HOME環境変数に指定するパス	Javaバージョン	IBM i 5.4のサポート	IBM i 6.1のサポート	IBM i 7.1のサポート	IBM i 7.2のサポート	IBM i 7.3のサポート	IBM i 7.4のサポート	IBM i 7.5のサポート
オプション 5 - Classic 1.3 64 ビット	Classic JVM	/QIBM/ProdData/Java400/jdk13/	1.3	○	×	×	×	×	×	×
オプション 6 - Classic 1.4 64 ビット	Classic JVM	/QIBM/ProdData/Java400/jdk14/ 	1.4	○	○	×	×	×	×	×
オプション7 - Classic 5.0 64 ビット	Classic JVM	/QIBM/ProdData/Java400/jdk15/	1.5(5.0)	○	○	×	×	×	×	×
オプション 8 - IBM Technology for Java 5.0 32 ビット	J9	/QOpenSys/QIBM/ProdData/JavaVM/jdk50/32bit	1.5(5.0)	○	○	○	×	×	×	×
オプション 9 - IBM Technology for Java 5.0 64 ビット	J9	/QOpenSys/QIBM/ProdData/JavaVM/jdk50/64bit	1.5（5.0）	×	○	○	×	×	×	×
オプション 10 - Classic 6 64 ビット	Classic JVM	/QIBM/ProdData/Java400/jdk6	1.6(6)	×	○	×	×	×	×	×
"オプション 11 - IBM Technology for Java 6 32 ビット
/ Java 6 2.6 32 ビット"	J9	"/QOpenSys/QIBM/ProdData/JavaVM/jdk60/32bit
/QOpenSys/QIBM/ProdData/JavaVM/jdk626/32bit"	1.6(6)	×	○	○	○	×	×	×
"オプション 12 - IBM Technology for Java 6 64 ビット
/ Java 6 2.6 64 ビット"	J9	"/QOpenSys/QIBM/ProdData/JavaVM/jdk60/64bit
/QOpenSys/QIBM/ProdData/JavaVM/jdk626/64bit"	1.6(6)	×	○	○	○	×	×	×
オプション 13 - IBM Technology for Java 1.4.2 64 ビット	J9	/QOpenSys/QIBM/ProdData/JavaVM/jdk14/64bit	1.4	×	×	○	×	×	×	×
"オプション 14 - IBM Technology for Java 7.0 32 ビット
/ Java 7.1 32 ビット"	J9	"/QOpenSys/QIBM/ProdData/JavaVM/jdk70/32bit
/QOpenSys/QIBM/ProdData/JavaVM/jdk71/32bit"	7	×	×	○	○	○	×	×
"オプション 15 - IBM Technology for Java 7.0 64 ビット
/ Java 7.1 64 ビット"	J9	"/QOpenSys/QIBM/ProdData/JavaVM/jdk70/64bit
/QOpenSys/QIBM/ProdData/JavaVM/jdk71/64bit"	7	×	×	○	○	○	×	×
オプション 16 - IBM Technology for Java 8.0 32 ビット	J9	/QOpenSys/QIBM/ProdData/JavaVM/jdk80/32bit	8	×	×	○	○	○	○	○
オプション 17 - IBM Technology for Java 8.0 64 ビット	J9	/QOpenSys/QIBM/ProdData/JavaVM/jdk80/64bit	8	×	×	○	○	○	○	○
オプション 19 - IBM Technology for Java 11 Semeru Runtime 64 ビット	J9	/QOpenSys/QIBM/ProdData/JavaVM/jdk11/64bit	11	×	×	×	×	○	○	○
オプション 20 - IBM Technology for Java 17 Semeru Runtime 64 ビット	J9	/QOpenSys/QIBM/ProdData/JavaVM/jdk17/64bit	17	×	×	×	×	○	○	○