12.3. Java SE 17を使用するための設定¶
目次
なお、本章はOracle JDK Migration Guideに基づいて執筆している。より理解を深めるため、こちらも一読されたい。
12.3.1. Java SE 9から非推奨となったJava EE関連モジュールの削除¶
Java SE 9から非推奨であったJava EE関連のモジュールがJava SE 11で削除された。 詳細については、Oracle JDK Migration GuideのRemoval of Java EE and CORBA Modulesを参照されたい。
これにより、本ガイドラインで解説している機能のいくつかを正常に動作させるには、これらの代替となる依存ライブラリを追加することが必要となる。 以下に、本ガイドラインで記載のあるモジュールを紹介する。
なお、以下で解説する依存ライブラリの追加はあくまで検証の一結果に過ぎず、アプリケーションの実装(依存しているライブラリの種類)と動作環境により異なる対応が必要な場合があることに留意されたい。
12.3.1.1. JAXBの削除¶
Java SE 17でJAXBを利用する場合、jakarta.xml.bind-api及びjaxb-implが必要となる。 アプリケーションの依存ライブラリやAPサーバから提供されるライブラリにjakarta.xml.bind-api及びjaxb-implがない場合は、下記のようにpom.xmlに依存関係を追加すること。
<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-gfw-parentが依存しているSpring Bootで管理されているため、pom.xmlでのバージョンの指定は不要である。
|
(2)
|
Jakarta EE 10に準拠した任意のバージョンを指定する。
|
12.3.1.2. JAX-WSの削除¶
Java SE 17でJAX-WSを利用する場合、以下のようにjakarta.xml.ws-api及びjaxws-rtを依存関係に追加する必要がある。
<dependencies>
<dependency>
<groupId>jakarta.xml.ws</groupId>
<artifactId>jakarta.xml.ws-api</artifactId> <!-- (1) -->
</dependency>
</dependencies>
<dependencies>
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>${jaxws-rt.version}</version> <!-- (2) -->
<scope>runtime</scope>
</dependency>
</dependencies>
項番 | 説明 |
---|---|
(1)
|
jakarta.xml.ws-apiのバージョンはterasoluna-gfw-parentが依存しているSpring Bootで管理されているため、pom.xmlでのバージョンの指定は不要である。
|
(2)
|
Jakarta EE 10に準拠した任意のバージョンを指定する。
|
12.3.1.3. Common Annotationsの削除¶
Java SE 17でCommon Annotationsを利用する場合、以下のようにjakarta.annotation-apiを依存関係に追加する必要がある。
<dependency>
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId> <!-- (1) -->
</dependency>
項番 | 説明 |
---|---|
(1)
|
jakarta.annotation-apiのバージョンはterasoluna-gfw-parentが依存しているSpring Bootで管理されているため、pom.xmlでのバージョンの指定は不要である。
|
12.3.1.4. 推移的に解決されるJava EE関連モジュールの競合¶
Java SE 17以降での開発を円滑に行うため、いくつかのOSSライブラリはこれまでに説明したJava SE 17で削除されたJava EE関連モジュールを依存ライブラリとして推移的に解決してくれるよう改善されている。
不幸にも、実行環境によってはこれが原因となりアプリケーションが起動しない、処理に問題が生じるといったケースがあるため、留意されたい。
NoSuchMethodException
が発生する、エラーにはならないが期待した挙動と異なるといった不具合が発生する。12.3.2. デフォルトで使用されるロケール・データの変更¶
Java SE 9以降では、Unicodeコンソーシアムの共通ロケール・データ・リポジトリ(CLDR)データがデフォルトのロケール・データとして有効化されている。
これにより、Java SE 9以降では、Java SE 8以前とは日付、時間、数値などの書式で文字列を出力した場合に結果が変わる可能性がある。
Java SE 17の標準の設定値から変更して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を参照されたい。