2023年5月8日のJavaラウンドアップは、OpenJDK、JDK 21、GraalVM Native Build Tools 0.9.22, Spring Framework, Spring Data and Spring Shell releases, Micronaut 4.0-M3, Quarkus 3. 0.3、Eclipse Vert.xリリース、Micrometer Metrics and Tracingリリース、Groovy 4.0.12、Tomcatリリース、Maven 3.9.2, Piranha 23.5.0, Reactor 2022.0.7, JobRunr 6.2, JDKMonリリース、Devoxx UKのニュースを掲載。
OpenJDK
JEP 448 Vector API (Sixth Incubator)は、Proposed からTargetに昇格し、JDK 21 をTargetedとすることになった。今回のJEPは、Project Panamaの支援のもと、過去5回のインキュベーションからのフィードバックに対応した機能強化が盛り込まれている。JEP 438, Vector API (Fifth Incubator) は JDK 20 で、JEP 426, Vector API (Fourth Incubator) は JDK 19 で、JEP 417, Vector API (Third Incubator) は JDK 18 で、JEP 414,Vector API (Second Incubator)は JDK 17 で、JEP 338,Vector API (Incubator)は JDK 16 でincubator moduleとして提供されている。この機能は、JEP 424 Foreign Function & Memory API (Preview)で定義されているように、MemorySegment
との間でベクターをロードおよびストアするためにVector APIを強化することを提案している。
JEP 441, Pattern Matching for switch は、Proposed からTargetに昇格し、JDK 21 をTargetedとすることになった。今回のJEPでは、この機能を最終的に決定し、過去4回のプレビューからのフィードバックに対応した機能強化を盛り込んだ。
JEP 433,Pattern Matching for switch (Fourth Preview),delivered in JDK 20; JEP 427,Pattern Matching for switch (Third Preview),delivered in JDK 19; JEP 420,Pattern Matching for switch (Second Preview),delivered in JDK 18; and JEP 406,Pattern Matching for switch (Preview),JDK 17で配信された。この機能は、switch式やステートメントのパターンマッチで言語を強化するものだ。InfoQでは、より詳細なニュースを追って伝える。
JEP 440, Record Patternsは、ProposedからTargetedに昇格しJDK 21 をTargetedとすることになった。今回のJEPはまた、この機能を最終化し、前の2回のプレビューからのフィードバックに対応した機能強化を組み込んでいる。JEP 432レコードパターン(セカンドプレビュー)(JDK 20で提供)、JEP 405レコードパターン(プレビュー)(JDK 19で提供)だ。この機能は、レコード値を分解するためのレコードパターンで言語を強化する。レコードパターンは、タイプパターンと併用することで、"強力で宣言的、かつ複合的なデータナビゲーションと処理の形式を可能にする"。型パターンは、最近、switch
ケースラベルで使用するために 拡張された。: JEP 420, Pattern Matching for switch (Second Preview), in JDK 18, and JEP 406, Pattern Matching for switch (Preview), in JDK 17. JEP 432からのもっとも大きな変更点は、拡張for
文のヘッダーに現れるレコードパターンのサポートを削除したことだ。InfoQでは、より詳細なニュースを追って伝える。
JEP 439Generation ZGCは、ProposedからTargetに昇格し、JDK 21 をTargetedとすることになった。このJEPは、"Zガーベッジコレクタ(ZGC)を拡張して、若いオブジェクトと古いオブジェクトの世代を別々に維持することにより、アプリケーションのパフォーマンスを改善することを提案している。これにより、ZGCは若くして死ぬ傾向にある若いオブジェクトをより頻繁に収集できる"。 InfoQでは、より詳細なニュースを追って伝える。
JEP 449Deprecate the Windows 32-bit x86 Port for RemovalがJDK 21のCandidateからProposedにTargetに昇格した。この機能JEPは、マイクロソフトのシニアプログラムマネージャーであるGeorge Adams氏によって紹介され、将来のリリースで削除することを意図して、Windows x86-32ポートを非推奨にすることを提案している。JEP 436 Virtual Threads (Second Preview)を32ビットプラットフォームで実装する意図がないため、このポートのサポートを削除することで、OpenJDK開発者は新機能の開発を加速させることができる。このレビューは2023年5月18日に終了する予定だ。
EP 443Unnamed Patterns and Variables (Preview)がJDK 21のCandidateからProposed、Targetに昇格した。このプレビューJEPは、"コンポーネントの名前やタイプを明記せずにレコードのコンポーネントにマッチする無名パターンと、初期化できるが使用されない無名変数を使用して言語を強化する "ことを提案している。いずれも、r instanceof _(int x, int y)
やr instanceof _
のようにアンダースコア文字で表記される。プレビューは2023年5月15日に終了する予定だ。
JEP 453, Structured Concurrency (Preview) は、JEP Draft 8306641 から Candidate ステータスに昇格した。以前はインキュベートAPIだったが、この最初のプレビューでは、過去2回のインキュベートからのフィードバックに対応した機能強化が盛り込まれている。 JEP 428 Structured Concurrency (Incubator)(JDK 19で提供)、JEP 437 Structured Concurrency (Second Incubator)(JDK 20で提供)だ。唯一の大きな変更点は、TaskHandle
インターフェースのget()
メソッドがFuture
インターフェースのresultNow()
メソッドと同じ動作をするように再構築されたため、StructuredTaskScope
クラスで定義されたfork()
メソッドがFuture
ではなくTaskHandle
のインスタンスを返す点だ。
JEP 452Key Encapsulation Mechanism APIは、JEP Draft 8301034 から Candidate ステータスに昇格した。この機能JEPタイプは、標準的なKey Encapsulation Mechanism(KEM)アルゴリズムの実装を満たすこと、より高度なセキュリティプロトコルによるKEMの使用例を満たすこと、サービスプロバイダがKEMアルゴリズムのJavaまたはネイティブ実装をプラグインできることを提案する。この草案は最近更新され、DerivedKeyParameterSpec
クラスを廃止し、encapsulate(int from, int to, String algorithm)
メソッドの引数リストにフィールドを配置するという大きな変更が加えられた。
JEP 451エージェントの動的ロードを許可しないための準備は、EP Draft 8306275からCandidateに昇格した。当初は、Disallow the Dynamic Loading of Agents by Defaultとして知られ、JEP Draft 8305968Integrity and Strong Encapsulationのアプローチに従って、このJEPは、実行中のJVMへのエージェントの動的ロードをデフォルトで禁止するという当初の意図から、実行中のJVMにエージェントが動的にロードされたときに警告を発するように発展している。このJEPの目標は、サービス性と完全性のバランスを再評価し、エージェントを動的にロードする必要がない大多数のツールが影響を受けないようにすることだ。
JEP 440, Record Patterns, および JEP 441, Pattern matching for switch の joint draft specification が、Javaコミュニティによるレビューのために、Oracleの技術スタッフのコンサルティングメンバーであるGavin Bierman氏によって更新されだ。レコードパターンの型推論の仕様が更新され、non-denotable型の「any」パターンとパターンの解決プロセスが削除され、型パターンが「ヌルマッチング」であるか否かのコンパイル時の概念が採用された。
オラクルのJVMアーキテクトであるJohn Rose氏は、オブジェクトヘッダを64ビットに削減することを目標とするProject LilliputがProject Valhallaの開発にどのような影響を及ぼすかについて懸念を示すホワイトペーパーを発表した。
JDK 21
また、JDK 21早期アクセスビルドのBuild 22も2023年5月に公開され、様々な問題の修正を含むBuild 21からの更新が行われている。このビルドの詳細は、リリースノートに記載されている。
JDK 21では、開発者はJava Bug Databaseを通じてバグを報告することが推奨されている。
GraalVM Native Build Tools
バージョン1.0に向け、Oracle Labsは、GraalVM Native Imageとの相互運用のためのプラグインからなるGraalVMプロジェクト、Native Build Toolsの version 0.9.22をリリースした。この最新リリースでは、GraalVM Reachability Metadata RepositoryのURLルックアップの修正、default-for
性のサポートの追加、Metadata 0.3.0への依存関係のアップグレードなど、注目すべき変更がされている。このリリースの詳細は、変更履歴に記載されている。
Oracle LabsのGraalVMチームの主任研究員であるFabio Niephaus氏は、ネイティブイメージビルドにおけるGraalVMのメモリ使用量の改善について発表した。特に、利用可能なメモリのみを使用する、全体のメモリ使用量が少ない、メモリ制限を32GBに引き上げた後の大規模アプリケーションのビルドが高速化された。
Spring Framework
Spring Framework 6.0.9では、バグフィックス、ドキュメントの改善、依存関係のアップグレード、およびCollectionFactory
クラスにおけるMultiValueMap
インターフェイスと共通のMap実装の一貫サポート、TypeUtils
クラスにおける暗黙境界の内部定数の導入、プロファイル式用の環境
インターフェースの新しいmatsProfiles()
メソッドを含む新機能がリリースされた。このリリースの詳細は、リリースノートに記載されている。
Spring Data MongoDB、Spring Data Neo4j、Spring Data JPAのキーセットベーススクロールが追加されたSpring Data 2023.0.0 (コードネーム:Ullman)がリリースされた。QuerydslとKotlinによるAOT処理のサポート強化、Spring Dataのサブプロジェクトのアップグレードが提供されている。このリリースの詳細は、リリースノートに記載されている。
Spring Dataのサービスリリースであるバージョン2022.0.6と2021.2.12は、バグ修正と以下のようなサブプロジェクトの依存関係のアップグレードを同梱している。 Spring Data Commons 3.0.6と2.7.12、Spring Data MongoDB 4.0.6と3.4.12、 Spring Data Elasticsearch 5.0.6と4.4.12、 Spring Data Neo4j 6.0.6 と 6.3.12だ。
Spring Shellのバージョン3.1.0-RC1、3.0.3、2.1.9がリリースされた。Asciidoctor Spring Backendsへの文書の移行が特徴だ。JLine 3.23.0への依存関係のアップグレード、およびバグ修正のバックポートだ。これらのバージョンは、それぞれSpring Bootのバージョン3.1.0-RC2、3.0.6、2.7.11をベースとしている。これらのリリースの詳細は、バージョン3.1.0-RC1、バージョン3.0.3、バージョン2.1.9のリリースノートに記載されている。
Micronaut
Micronaut Foundationは、Micronaut Framework 4.0.0の第2および第3マイルストーンリリースを提供した。バグフィックスや改善、新機能として、クライアントとサーバーの両方で使用できる新しいインターフェース、MessageBodyWriter
とMessageBodyReader
は、カスタム書き込みと読み取り応答を追加する単一の場所として、アノテーションベースCORS構成のサポート、service-http-client.enabled
プロパティのデフォルトがfalse
に設定、Micronaut注釈における編集時のチェック式サポートなどがある。これらのリリースの詳細は、バージョン4.0.0-M2およびバージョン4.0.0-M3のリリースノートに記載されている。
Quarkus
Quarkus 3.0.3.Finalは、3回目のメンテナンスリリースで、次のような重要な変更点がある。応答フィルターのSimpleResourceInfo
インターフェースのNULLパラメータが原因で発生する例外の修正、コンテナのランタイム検出の改善、Hibernate ORMの不要な情報ログに対する対処、Quarkus 3.0.1でのリアクティブネイティブモードにおける予期しない動作の解決である。このリリースの詳細については、変更履歴に記載されている。
WildFly
WildFlyチームは、WildFly 29からWildFly 34のベータ版および最終リリースを含む2023-2024年のリリース計画を発表した。Jakarta EE 10への移行期間中、リリースは一時的に機能ボックス型アプローチに移行していた。この新しいリリーススケジュールは、以前使用されていたタイムボックス型アプローチに戻るものだ。
Eclipse Vert.x
Eclipse Vert.x 4.4.2がリリースされ、依存関係のアップグレードや、メッセージをインターセプトするためのGraphQLWSHandlerクラスの新しいmessageHandler()
メソッド、SchemaRepository
インターフェースの同時アクセスによる不安定な動作を改善している点が特徴である。また、SQLRowStream
クラスのtoObservable()
メソッドを改良し、NullPointerException
が発生する可能性を排除した。このリリースの詳細は、リリースノートと非推奨事項および変更点に記載されている。
同様に、Eclipse Vert.x 3.9.16がリリースされ、Vert.x 3.9.14へのアップデート後にイベントループをブロックするメトリクス、およびSTOMPサーバープロセスのクライアントフレームが当初はコネクトフレームを送信しないといった目立った修正を実現している。3.9リリーストレインは2022年に耐用年数を迎えるが、サービスリリースは2023年の終わりまで維持される。このリリースの詳細は、リリースノートに記載されている。
Micrometer
DynatraceExporterV2
クラスを使用してメトリクスをエクスポートする際の全体的なメモリ割り当ての削減、CountedAspect
クラスのコンパイラパラメータのメタデータが不要になったこと、JVMで実行中のアプリケーションスレッドの総数に対するメトリクスの追加などの新機能を備えたMicrometer Metricsのバージョン1.11.0、1.10.7、1.9.11がリリースされた。これらのリリースの詳細は、バージョン1.11.0、バージョン1.10.7、バージョン1.9.11のリリースノートに記載されている。
同様に、ObservationAwareSpanThreadLocalAccessor
クラスにObservationRegistry
インターフェースのインスタンスを受け入れる新しいコンストラクタ、Micrometer Metricsの変更に対応したアノテーション、Propagator
, Propagator.Getter
, Propagator.Setter インターフェースのノーオープン実装など、注目すべき変更を提供するバージョン 1.1.1, 1.1.0, 1.0.5 のMicrometer Tracingがリリースされている。 また、BaggageManager
インターフェースのgetBaggage()
メソッドが改良され、Baggage
が存在しない場合にBaggageインターフェースのインスタンスを一貫して返すようになった。これらのリリースの詳細は、バージョン1.1.1、バージョン1.1.0、バージョン1.0.6、バージョン1.0.5のリリースノートに記載されている。
Apache Software Foundation
Apache Groovy 4.0.12のリリースでは、バグフィックス、依存関係のアップグレード、改良が行われている。抽象構文木(AST)変換でジェネリックを使用してClassNode
クラスのインスタンスを適用する際に、より詳細なエラーメッセージを表示するようにした。そのほか、Groovy-Integrated Query (GINQ)における仮想スレッドのサポート、およびJavaレコードを使用した生成メソッドのバイトコード最適化が盛り込まれている。本リリースの詳細は、リリースノートに記載されている。
Apache Tomcatのバージョン11.0.0-M6および9.0.75では、次のような顕著な変更が行われている。JsonAccessLogValve
クラスの改善により、ヘッダーと属性のより多くのパターンをサポートする。AccessLogValue
クラスで、縦書きタブの出力が\v
から\u000b
に変更され、SimpleDateFormat
クラスのインスタンスが逐語的な文字を含む場合にタイムスタンプの出力をエスケープするように改善した。HTTPコネクタの設定であるrejectIllegalHeader
とallowHostHeaderMismatch
のサポートは、バージョン9.0.75で非推奨となり、バージョン11.0.0-M6で削除されて、以前のデフォルト値にハードコーディングされるようになった。これらのリリースの詳細については、バージョン11.0.0-M6およびバージョン9.0.75のリリースノートに記載されている。
Apache Maven 3.9.2 がリリースされた。プラグインが Maven Compat に依存している場合に警告を表示する、Maven Mojo が失敗したときに例外を抑制して表示する、プラグイン検証の改善と拡張、コマンドライン引数 -Dmaven.repo.local.recordReverseTree=true
を使用したときの追加情報の表示などの改善点がある。このリリースの詳細は、リリースノートに記載されている。
Piranha
Piranha 23.5.0のリリースでは、外部コンポーネントのアップデート、JDK 20でリリースする際にJDK 18+モジュールがリリースされるようにする、-ssl-keystore-file
を --https-keystore-file
に変更するなど、注目すべき変更点がある。また、MimeTypeManager
とLoggingManagerのインターフェース、TEMPDIR
拡張、Piranha Namingモジュールはすべて非推奨となった。このリリースに関する詳細は、ドキュメントと問題追跡に記載されている。
Project Reactor
7回目のメンテナンスリリースとなるProject Reactor 2022.0.7では、reactor-core
3.5.6, reactor-netty
1.1.7, reactor-kafka
1.3.18 への依存関係のアップグレードが行われる。また、reactor-pool
1.0.0、reactor-addons
3.5.1、reactor-kotlin-extensions
1.2.2 の成果物が変更されないままバージョン 2022.0.7 に再調整されている。このリリースに関する詳細は、変更履歴に記載されている。
JobRunr
JobRunrとJobRunr Pro 6.2.0のリリースでは、WindowsプラットフォームのJobRunrの重要なバグフィックス、パフォーマンスの向上、Spring Boot 3.0 と Quarkus 3.0 をサポートするための依存関係のアップグレードが行われた。このリリースの詳細は、リリースノートに記載されている。
JDKMon
インストールされたJDKを監視し、アップデートするツールであるJDKMonのバージョン17.0.57、17.0.55、17.0.53が2023年5月から提供されている。AzulのプリンシパルエンジニアであるGerrit Grunwaldによって作成されたこれらの新バージョンは、以下のような変更点を提供する。 CVE検出がCVSS 2とCVSS 3に対応、OpenJDKのビルドのダウンロードダイアログが標準Cライブラリ(libc)の選択に対応(例:musl libc)、アプリケーションインストーラを構築するLinuxスクリプトの修正、AArch64アーキテクチャ用のLinux RPMビルドの追加である。
Devoxx United Kingdom
Devoxx United Kingdom氏は2023年5月、イギリス・ロンドンのBusiness Design Centreで開催され、Javaコミュニティからのスピーカーが以下のようなトピックで講演を行った。 Java、クラウド、データ、AI、機械学習、ロボティクス、プログラミング言語、セキュリティ、アーキテクチャ、開発者プラクティス、文化などのトピックについて、Javaコミュニティのスピーカーが講演した。