2022 年 9 月、Jakarta EE 10 がリリースされました。
Jakarta EE となって初めての機能追加リリースですが、アプリケーションサーバの EoL 都合で Java / Jakarta EE 8 からジャンプアップを迫られるケースがありそうです。たとえば Red Hat JBoss EAP の場合、Jakarta EE 8 互換の 7.x は Full support が 2023 年 12 月 31 日に終了しています。Maintenance support ends も 2025 年 6 月 30 日に控えており、最近 GA となった 8.x は Jakarta EE 10 互換ですから、デッドラインは近いです。1
GA | Full support | Maintenance support | ELS-1 | ELS-2 | |
---|---|---|---|---|---|
8.x | 2024-02-05 | 2028-02-05 | 2031-02-05 | 2033-02-05 | 2034-02-05 |
7.x | 2016-05-01 | 2023-12-31 | 2025-06-30 | 2027-10-31 | 2030-10-31 |
また、Red Hat による OpenJDK 8 サポートは 2026 年 11 月に Full support が終了します。2 EAP 7.x は Java SE 8 / 11 が前提ですので、ELS-1 でも実質的にここが潮時でしょう。
だからといって Jakarta EE 10 対応を急いでも、簡単にはコンパイルさえ通らない場合があります。単純に名前空間を置換するだけでは終わらないということですね。本稿ではその具体例として、Jakarta EE 10 から API と実装が分離された Specification を紹介します。これらをライブラリとして使用している場合、実装も依存に追加しなくてはなりません。なお、Jakarta EE 10 から参照実装(Reference Implementations)でなく互換実装(Compatible Implementations)と呼ぶことになっています。
Jakarta Activation 2.1
互換実装は Eclipse Angus Activation です(GitHub)。
<dependency>
<groupId>org.eclipse.angus</groupId>
<artifactId>angus-activation</artifactId>
<version>2.0.2</version>
</dependency>
Eclipse Angus は Jakarta Activation および Jakarta Mail に実装を提供するプロジェクトです。Sun の時代から JAF (JavaBeans Activation Framework) と JavaMail はセットでしたから、そのままお引越ししたような形ですね。
Jakarta JSON Binding 3.0
互換実装は Eclipse Yasson です(GitHub)。
<dependency>
<groupId>org.eclipse</groupId>
<artifactId>yasson</artifactId>
<version>3.0.3</version>
</dependency>
Yasson という名前は古代ギリシャ神話のイアーソーン(英語ではジェイソンと発音)に由来するそうです3。 JSON-B をもじって Jason Bourne と名付けたかったところ、法的な制限のため採用されなかったのだとか。ジェイソン・ボーン、私も好きな映画です。
Jakarta JSON Processing 2.1
互換実装は Eclipse Parsson です(GitHub)。
<dependency>
<groupId>org.eclipse.parsson</groupId>
<artifactId>parsson</artifactId>
<version>1.1.6</version>
</dependency>
Parsson という名前の由来は見つけられませんでしたが、Persson(スウェーデンで一般的な姓)と JSON-P をかけたものでしょうか。
Jakarta Mail 2.1
互換実装は Eclipse Angus Mail です(GitHub)。
<dependency>
<groupId>org.eclipse.angus</groupId>
<artifactId>angus-mail</artifactId>
<version>2.0.3</version>
</dependency>
Jakarta EE 10 を利用したい場合は自然と Java SE 11 以上を選択することになります。このとき、JEP 320 の影響により API および互換実装を依存に追加する必要があるケースで注意が必要です。
おまけ: Commons FileUpload 2.0
Commons FileUpload を利用している場合、Jakarta Servlet 6.0 に対応するため Commons FileUpload 2.0 への移行が必要となります。詳細は移行ガイドに従ってください。依存先が org.apache.commons:commons-fileupload2-jakarta-serverl6
に変更され、commons-fileupload2-core
にも依存します。
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-fileupload2-jakarta-servlet6</artifactId>
<version>2.0.0-M2</version>
</dependency>
なお、本稿投稿時点で Commons FileUpload 2.0 はマイルストーン 2 (M2)であり、正式版ではないことに注意してください。
参考リンク
- Jakarta® EE | Cloud Native Enterprise Java | Java EE | the Eclipse Foundation | The Eclipse Foundation
- 5年ぶりの本格的なメジャーバージョンアップ「Jakarta EE 10」正式リリース、クラウドネイティブなど対応 - Publickey
- Jakarta EE 10 変更内容総まとめ - A Memorandum
- Jakarta EE 10 アップデート | ドクセル
- Jakarta EE 10 - Feature by Feature - Speaker Deck
- OpenJDK 11 以降で JavaMail が使えない場合の対処法
- Java 9 で deprecated になったモジュールによる例外発生の問題にちゃんと対処したい - k11i.biz
- maven - Alpha, Beta, Snapshot, Release, Nightly, Milestone, Release Candidate(RC)... When to use which terminology - Stack Overflow