MID Server - JRE 17 アップグレード<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } 目次 はじめに目的JRE17 をサポートするための MID の主な変更点 強制カプセル化された Java 内部 API の削除MID に推奨される JRE バージョンの変更 Vancouver へのアップグレード影響を受けるのは誰ですか?トラブルシューティング はじめに MID Server にはデフォルトで JRE がバンドルされており、MID Server を実行できます。MID に同梱されている Utah バージョンの JRE は 11.0.16.1 です。Vancouver リリースでは、MID JRE は 17.0.5 バージョンにアップグレードされます。 目的 Java 17 は現在の長期サポート (LTS) リリースです。2021年9月にリリースされ、メモリ管理、パフォーマンス、安定性において大きなメリットがあります。 JRE17 をサポートするための MID の主な変更点 MID Server を JRE17 で動作させるために行われた主な変更点は以下のとおりです。 強制カプセル化された Java 内部 API の削除 Java 17 以降、Java の内部 API は外部からアクセスできなくなりました。詳細については、こちらのリンクを参照してください。最善の対処方法は、これらの内部 API が使用されているコードをリファクタリングすることです。可能な限り、MID コードから Java 内部 API の使用を削除しました。ただし、一部の依存チームおよびサードパーティライブラリでは依然としてこれらの内部 API を使用しています。JRE17 での動作を確保するために、これらの内部 API が JRE11 と同様にアクセスできるよう、Java が推奨する JVM オプション (add-opens) を追加しました。 例えば、sun.security.x509.X500Name は MID コードから削除された内部 API です。 Apache Ignite は、多くの内部 API を使用し、エクスポートされた Java API のプライベートおよびプロテクトメンバーへのアクセスにリフレクションを使用するサードパーティライブラリです。MID ではこのライブラリを使用しているため、JRE17 で Ignite を実行するために Apache が推奨する JVM オプションを追加する必要がありました (https://ignite.apache.org/docs/latest/quick-start/java#running-ignite-with-java-11-or-later)。 これらの JVM オプションは、アップグレードのたびに置き換えられる標準設定のデフォルト値を保持する wrapper.conf ファイルに追加されています。 MID に推奨される JRE バージョンの変更 Utah リリースまでの MID に推奨される JRE バージョンは 11.0.16.1 でしたが、Vancouver リリース以降は 17.0.5 に変更されます。Vancouver において MID がサポートする JRE の最小バージョンは引き続き 11.0.9 です。 Vancouver へのアップグレード MID が Vancouver にアップグレードされると、JRE 17.0.5 パッケージをダウンロードし、agent/jre ディレクトリを JRE17 にアップグレードします。 影響を受けるのは誰ですか? agent/jre ディレクトリの JRE を使用している MID Server は JRE17 にアップグレードされます。影響を受けるこれらの MID Server は、JRE 17 との互換性についてテストする必要があります(使用中のすべてのサードパーティライブラリが JRE17 をサポートしているか確認し、サポートされていない場合は更新してください。JRE17 から削除された API の使用箇所を確認し、代替 API に置き換えてください)。 別の場所の JRE を使用している MID Server は影響を受けず、その場所の既存の JRE を引き続き使用します。 トラブルシューティング MID Server を JRE17 にアップグレードした後、Java17 の強制カプセル化により問題が発生する場合があります。ログに java.lang.IllegalAccessError または java.lang.reflect.InaccessibleObjectException が表示される場合は、強制カプセル化が原因です。対処方法は、agent/conf/wrapper-override.conf ファイルに JVM オプションを追加して、モジュールをすべての無名モジュールに対して開くことです。以下は、この問題を修正するために追加されるオプションの例です。 wrapper.java.additional.120=--add-opens=java.base/sun.security.provider=ALL-UNNAMED 詳細については、こちらのリンクを参照してください。 カスタム JRE を使用する場合は、こちらの KB を参照してください。 注意: wrapper.conf はアップグレードのたびに新しいデフォルト設定で上書きされるため、絶対にカスタマイズしないでください。