12.3. Java SE 17以降のバージョンを利用するための設定¶
なお、本章はOracle JDK Migration Guideに基づいて執筆している。より理解を深めるため、こちらも一読されたい。
12.3.1. Java SE 9から非推奨となったJava EE関連モジュールの削除¶
12.3.1.1. JAXBの追加¶
<dependencies>
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId> <!-- (1) -->
</dependency>
</dependencies>
<dependencies>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>${jaxb-impl.version}</version> <!-- (2) -->
<scope>runtime</scope>
</dependency>
</dependencies>
項番 |
説明 |
---|---|
(1)
|
jakarta.xml.bind-apiのバージョンはterasoluna-dependenciesが依存しているSpring Bootで管理されているため、pom.xmlでのバージョンの指定は不要である。
|
(2)
|
使用する環境のJakarta EEに合わせた任意のバージョンを指定する。
Macchinetta Server Framework (1.x)ではJakarta EE 10を使用している。
|
12.3.1.2. Jakarta XML Web Servicesの追加¶
Java SE 11以降でJakarta XML Web Services(旧:JAX-WS)を利用する場合、以下のようにjakarta.xml.ws-apiを依存関係に追加する必要がある。
<dependencies>
<dependency>
<groupId>jakarta.xml.ws</groupId>
<artifactId>jakarta.xml.ws-api</artifactId>
<version>${jakarta.xml.ws.version}</version> <!-- (1) -->
</dependency>
</dependencies>
項番 |
説明 |
---|---|
(1)
|
jakarta.xml.ws-apiのバージョンは、Jakarta XML Web Servicesのランタイムが使用するバージョンを指定する。
|
なお、Jakarta XML Web Servicesのランタイムの定義に関しては、「アプリケーションの設定」 に記載を行っているので、そちらを参照されたい。
12.3.1.3. Jakarta Annotationsの追加¶
Java SE 11以降でCommon Annotationsを利用する場合、以下のようにjakarta.annotation-apiを依存関係に追加する必要がある。
<dependency>
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId> <!-- (1) -->
</dependency>
項番 |
説明 |
---|---|
(1)
|
jakarta.annotation-apiのバージョンはterasoluna-dependenciesが依存しているSpring Bootで管理されているため、pom.xmlでのバージョンの指定は不要である。
|
12.3.1.4. 推移的に解決されるJava EE関連モジュールの競合¶
Java SE 11以降での開発を円滑に行うため、いくつかのOSSライブラリはこれまでに説明したJava SE 11で削除されたJava EE関連モジュールを依存ライブラリとして推移的に解決してくれるよう改善されている。
不幸にも、実行環境によってはこれが原因となりアプリケーションが起動しない、処理に問題が生じるといったケースがあるため、留意されたい。
NoSuchMethodException
が発生する、エラーにはならないが期待した挙動と異なるといった不具合が発生する。12.3.2. デフォルトで使用されるロケール・データの変更¶
Java SE 9以降では、Unicodeコンソーシアムの共通ロケール・データ・リポジトリ(CLDR)データがデフォルトのロケール・データとして有効化されている。
これにより、Java SE 9以降では、Java SE 8以前とは日付、時間、数値などの書式で文字列を出力した場合に結果が変わる可能性がある。
Java SE 11以降の標準の設定値から変更してJava SE 8以前と同じ書式で出力したい場合は、システム・プロパティjava.locale.providers
のCLDRの前にCOMPATを設定する必要がある。(例:java.locale.providers=COMPAT,CLDR,SPI
)
詳細については、Oracle JDK Migration GuideのUse CLDR Locale Data by Defaultを参照されたい。
12.3.3. HTTP通信におけるTLS(Transport Layer Security) v1.3のサポート¶
jdk.tls.client.protocols
を設定することで変更可能である。jdk.tls.server.protocols
を設定することで変更可能である。詳細はJDK 11 Release Notesを参照されたい。
Note
LinuxのSSL通信を制御するopenssl はバージョン1.1.1でTLS 1.3に対応するが、コンパイル済みのパッケージは頒布されておらず、開発者が自らコンパイルして組み込む必要がある。
Tomcat等のミドルウェアはopensslを利用してHTTPS通信を行なうが、ミドルウェアが内包するopensslをアップデートするためには、ミドルウェア自体も再コンパイルする必要がある。同様に、opensslをアップデートすることによりOSの機能が正常に動作しなくなる可能性がある。
このため、独自にopensslをコンパイルしてアップデートすることは、一般的な開発者には推奨しない。TLS 1.3に対応したopensslを内包したOSにアップデートして、環境を構築しなおすべきである。
12.3.4. ガベージコレクションの変更¶
Java SE 9 以降のガベージコレクションはThe Garbage-First Garbage Collector (G1 GC) がデフォルトとなりました。
詳細はChanges to Garbage Collectionを参照されたい。