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 には MID Server を実行できる JRE がバンドルされています。MID に付属する Utah バージョンの JRE は 11.0.16.1 です。Vancouver リリースでは、MID の JRE は 17.0.5 バージョンにアップグレードされます。 目的 Java 17 は現在の Long-term Support(LTS)リリースです。2021 年 9 月にリリースされ、メモリ管理、パフォーマンス、および安定性において大きな利点があります。 JRE17 をサポートするための MID の主な変更点 JRE17 上で MID Server を実行するために行われた主な変更は次のとおりです。 強力にカプセル化された Java 内部 API の削除 JAVA 17 以降では、Java 内部 API には外部からアクセスできません。詳細については、このリンクを参照してください。最善の修正方法は、これらの内部 API を使用しているコードをリファクタリングすることです。可能な限り、MID コードから Java 内部 API の使用を削除しました。しかし、一部の依存チームおよびサードパーティライブラリは依然としてこれらの内部 API を使用しています。そのため、JRE17 で動作させるために、これらの内部 API が JRE11 と同様にアクセス可能になるよう、JAVA が推奨する JVM オプション(add-opens)を追加しました。 たとえば、sun.security.x509.X500Name は MID コードから削除された内部 API の 1 つです。 Apache Ignite は、多数の内部 API を使用し、エクスポートされた JAVA API の private メンバーおよび protected メンバーへアクセスするためにリフレクションを使用するサードパーティライブラリです。MID はこのライブラリを使用しているため、Apache が推奨する JVM オプションを追加して JRE17 上で Ignite を実行できるようにしました(Apache Ignite ドキュメント)。 これらの JVM オプションは wrapper.conf ファイルに追加されています。このファイルには OOTB のデフォルト設定が保持されており、アップグレードのたびに置き換えられます。 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 オプションを追加して、モジュールをすべての unnamed module に対して開放します。以下は、これらの問題を修正するために OOTB で追加されているオプションの一例です。 wrapper.java.additional.120=--add-opens=java.base/sun.security.provider=ALL-UNNAMED 詳細については、このリンクを参照してください。 wrapper-override.conf を編集する際、wrapper.java.additional.<N> は wrapper-override.conf 内で一意の数値であり、ServiceNow の OOTB 設定用に予約されている 101~200 の範囲外である必要があります。OOTB 設定に含まれていないモジュール/パッケージを開放する例は次のとおりです。 wrapper.java.additional.201=--add-opens=java.base/sun.net.www.protocol.https=ALL-UNNAMED カスタム JRE を使用したい場合は、この KB に従ってください。 注: wrapper.conf は絶対にカスタマイズしないでください。アップグレードのたびに新しいデフォルト設定で上書きされます。