2023年3月20日のJavaラウンドアップは、OpenJDK、JDK20、JDK21、Amazon Corretto 20、BellSoft Liberica JDK20、Springのマイルストーンとポイントリリース、Quarkus 3.0.0.0Beta1と2.16.5、Helidon 3.2.0、 Open Liberty 23.0.0.3-beta, Micronaut 4.0.0-M1, Camel Quarkus 3.0.0-M1, JBang 0.105.1, Failsafe 3.3.1, Maven 3.9.1 および Gradle 8.1-RC1のリリースニュースだ。
OpenJDK
JEP 431Sequenced Collectionsが、JDK21のProposedからTargetedに昇格した。このJEPは、"コレクションの構造的な特性として、その要素が明確に定義され順序またはシーケンスで配置しているコレクションの概念を表す新しいインターフェースのファミリーを導入する "ことを提案している。改修の動機はコレクションフレームワークの中に、よく定義された順序と統一した操作のセットがないことだ。JEP 431の詳細については、InfoQのニュース記事を参照されたい。
JEP 443Unnamed Patterns and Variables (Preview)は、先週、JEP Draft 8294349からCandidateに昇格した。このプレビューJEPは「無名パターン(コンポーネントの名前や型を明記せずにレコードのコンポーネントにマッチするパターン)と無名変数(初期化できるが使用されない変数)で言語を強化する」ことを提案している。いずれも以下のようにアンダースコア文字で表記される。
r instanceof _(int x, int y) and r instanceof _.
JDK20
オラクルは7つのJEPの最終機能セットを搭載したJavaプログラミング言語と仮想マシンのバージョン20をリリースした。詳細はInfoQのニュース記事に掲載している。
JDK21
またJDK21early-access buildsのBuild 15は、Build 14からのアップデートで、様々な問題の修正が含まれており、先週から利用可能になっている。このビルドの詳細は、release notesに記載されている。
JDK20とJDK21については、開発者はJava Bug Databaseを通じてバグを報告することが推奨されている。
Amazon Corretto
Amazonは、Linux、Windows、macOSで利用可能なOpenJDK20のdownstream distribution であるAmazon Corretto20をリリースした。開発者はこの最新版をこのサイトからダウンロードできる。
Liberica JDK
同様に、BellSoftはOpenJDK20のダウンストリームディストリビューションであるLiberica JDK20をリリースした。開発者はこのサイトから最新版をダウンロードできる。
Spring Framework
Spring Boot, Spring Framework, Spring Data, Spring Integration, Spring Vault, Spring for GraphQL, Spring Authorization Server, Spring HATEOAS, Spring Modulithのマイルストーンとポイントリリースをプロジェクトチームが提供し、Springは非常に忙しい1週間となった。これらのリリースの中には、これらのCommon Vulnerabilities and Exposures(CVEs)に対処しているものもある。
-
CVE-2023-20859, Insertion of Sensitive Information into Log Sourced from Failed Revocation of Tokens, Spring Vault batch tokenを取り消そうとした際に、アプリケーションがログファイルに機密情報を挿入される脆弱性がある。
-
CVE-2023-20860, Security Bypass With Un-Prefixed Double Wildcard Pattern,
MvcRequestMatcher
classを使用した Spring Security の設定において、パターンとして'**'
を使用すると Spring Security と Spring MVC 間のパターンマッチにミスマッチが生じ、セキュリティバイパスの可能性があるという脆弱性だ。 -
CVE-2023-20861, Spring Expression DoS Vulnerability, 攻撃者が特別に細工した Spring Expression Language (SpEL) 式を提供することで、サービス拒否状態に陥る可能性がある脆弱性だ。
Spring Boot 3.0.5のリリースでは、ドキュメントの改善、依存関係のアップグレード、および次のような注目すべきバグ修正が行われた。組み込みWebサーバーが構成されていないときにEnbeddedWebSorbeFactyCostomizarAutoConfiguration
クラスを起動しないこと、@ConfigurationProperties
annotationは変異するコットンデータクラスに作用しないこと、@EntityScan
annotationが使われるとAOTインスタンスのサプライヤーコード生成エラーが発生する。このリリースの詳細は、リリースノートに記載されている。
同様に、Spring Boot 2.7.10のリリースでは、ドキュメントの改善、依存関係のアップグレード、およびSnakeYAML 2.0の使用時にapplication.yml
ファイルの読み込みがNoSuchMethodError
が例外で発生する。クラスパスに'.'
文字が含まれているとStandardConfigDataResource
クラスのインスタンスが同じファイルを2回インポートできる。Mavenプラグインがproject.build.outputTimestamp
プロパティ使用時に timezone-local timestampsが使われるというバグフィックスの修正が含まれている。このリリースに関する詳細は、リリースノートに記載されている。
Spring Boot 3.1.0の第2回リリース候補では、SanitizableData
クラスにサニタイズされた値を持つ新しいインスタンスを返す新しいメソッドwithSanitizedValue()
、GraphQ paginationとソートの自動設定のサポート、Spring Authorization Serverのサポートなどの新機能を提供している。このリリースの詳細は、リリースノートに記載されている。
Spring Frameworkのバージョン6.0.7と5.3.26がリリースされ、主に前述のCVE-2023-20860とCVE-2023-20861の脆弱性に対応している。また、SpELのmatches
演算子や繰り返しテキストの診断機能の改善、HandlerMappingIntrospector
クラスの更新、SnakeYaml 2.0のランタイム互換性の確保などの新機能も提供される。これらのリリースの詳細は、バージョン6.0.7とバージョン5.3.26のリリースノートに記載されている。
Spring Framework 5.2.23のリリースでは、CVE-2023-20861の脆弱性にも対応し、Spring Framework 5.3.26と同じ新しいSpEL機能を提供する。このリリースの詳細は、リリースノートに記載されている。
Spring Dataのバージョン2023.0-M1(コードネーム:Ullman)、2022.0.4、2021.2.10がこの一週間でリリースされた。このサービスリリースには、バグ修正とドキュメントの改善が含まれており、それぞれSpring Boot 3.0.5と2.7.10で消費される可能性がある。マイルストーンリリースの新機能には、オフセットとキーベースのページネーションをサポートする新しいスクロールAPI、HQLとJPQLのJPAクエリパースの改善、MongoDBの明示的なフィールドレベルの暗号化のサポート、Spring Data RESTの集約参照リクエストパラメータがある。マイルストーンリリースの詳細は、リリースノートに記載されている。
Spring Integrationのバージョン6.1.0-M2、6.0.4、5.5.17がリリースされた。LockRegistryLeaderInitiator
クラスの改善(現在のスレッドが中断された場合にターゲットロックプロバイダの呼び出しが遅延)、AbstractRemoteFileStreamingMessageSource
クラスのリモート呼び出しの改善、コードカバレッジツールのソナーとジャコの関係修正などの目立った変更点があった。これらのリリースの詳細は、バージョン6.1.0-M2、バージョン6.0.4、バージョン5.5.17のリリースノートに記載されている。
Spring Vaultのバージョン3.0.2およびバージョン2.3.3がリリースされ、前述のCVE-2023-20859の脆弱性に対応するとともに、トークン失効失敗後のログの精密化、ClientHttpRequestFactoryFactory
およびClientHttpConnectorFactory
クラスにおけるライブラリ固有の設定コードの再利用、EnvironmentVaultConfiguration
クラスへのAWS IAM Authentication追加などの新機能が追加された。これらのリリースの詳細は、バージョン 3.0.2 およびバージョン 2.3.3 のリリースノートに記載されている。
Spring for GraphQL 1.2.0の最初のマイルストーン・リリースで、@SchemaMapping
アノテーションで定義されたメソッドにおけるページネーション戻り値およびページネーション要求のサポート、HandlerMethodArgumentResolver
インターフェースのカスタムインスタンスのサポート、およびGraphQL Java 20.0 への依存性アップグレードなどの新機能を提供する。このリリースの詳細は、リリースノートに記載されている。
Spring for GraphQLのバージョン1.1.3と1.0.4がリリースされ、新機能としてWebGraphQlInterceptor
インターフェイスのアクセスリクエスト属性とcookies、ContextDataFetcherDecorator
クラスのインスタンスが名前が変わったときにサブスクリプションを無視する不具合が修正された。これらのリリースは、それぞれSpring Boot 3.0.5と2.7.10で消費される。これらのリリースの詳細は、バージョン1.1.3およびバージョン1.0.4のリリースノートに記載されている。
Spring Authorization Server 1.1.0のsecond milestone releaseは、バグ修正、依存関係のアップグレード、新機能を搭載している。RFC 8628, OAuth 2.0 Device Authorization Grantの実装、OAuth2 client secretsのPasswordEncoder
interfaceで定義されたupgradeEncoding()
メソッドを有効にする。このリリースの詳細は、リリースノートに記載されている。
Spring HATEOASのバージョン2.1-M1、2.0.3、1.5.4がこの一週間でリリースされた。今回のサービスリリースでは、ドキュメントの改善や依存関係のアップグレードが行われている。マイルストーンリリースでは、JSR-303,Bean Validationで定義されている@Size
アノテーションを使用したフォーム上のプロパティメタデータのサポート、PagedModel
クラスの簡略版である新しいSlicedModelクラスでスライスをナビゲーションするが、合計は計算されないという特徴がある。これらのリリースの詳細は、バージョン 2.1-M1、バージョン 2.0.3、バージョン 1.5.4 のリリースノートに記載されている。
Spring Modulith 0.5.1のリリースでは、spring-modulith-runtime
モジュールに、テスト使用のみを目的としたLogback設定ファイルが誤って含まれていたバグが大幅に修正された。また、Spring Boot 3.0.5への依存関係のアップグレードが行われた。このリリースの詳細は、リリースノートに記載されている。
Spring Data JPAチームは、@Query
アノテーションと連携してSpring Data JPAアプリケーションのクエリをより簡単にカスタマイズできるよう、開発者向けにHQLとJPQLクエリパーサを導入した。
Quarkus
Quarkus 3.0.0のfirst beta releaseでは、選択したルート(管理ルート)を別のHTTPサーバーに公開する管理インターフェイスがサポートしている。このリリースに関する詳細は、変更履歴から見られる。
Quarkus 2.16.5.Finalでは、5回目のメンテナンスリリースとして、 テストクラスProviderConfigInjectionWarningsTest
の実行によるRESTEasy関連の警告のフィルタリング、ワークスペースモジュール読み込み時のNullPointerException
の修正、サーバーサイドイベントMessageBodyWriter
がヘッダーを蓄積する可能性を防ぐなどの変更点があった。このリリースに関する詳細は、変更履歴で見られる。
Helidon
Oracleは、WriteableMultiPart
クラスで定義されたオーバーロードされたcreate()
メソッドの修正、JtaConnection
クラスでデータベース接続を閉じる際の誤った動作の修正、SnakeYAML 2.0への依存性アップグレードなどの変更を含むHelidon 3.2.0を公開した。SnakeYAML 2.0には、破壊的な変更があることに注意することが重要だ。SnakeYAMLを直接使用すると、Helidonアプリケーションに影響を与える可能性がある。ただし、ダウングレードしたSnakeYAML 1.3.2でHelidon 3.2.0にアップグレードが可能だ。このリリースに関する詳細は、リリースノートで参照できる。
Open Liberty
IBMは、JDK20、Jakarta EE 10 Platform、MicroProfile 6.0をサポートしたOpen Liberty 23.0.0.3-βをリリースした。
Micronaut
Micronaut foundationは、Kotlin Symbol Processingの実験的サポート、 virtual threadsのサポート、Beanが見つからない場合のエラーメッセージの改善、フィルターメソッドのサポートなどを特徴とする最初のマイルストーンリリースMicronaut Framework 4.0.0 を提供した。
Apache Software Foundation
Apache Tomcatチームにより開示されているCVE-2023-28708の通り、RemoteIpFilter
クラスを使用して、X-Forwarded-ProtoヘッダーがHTTPSに設定されているHTTP経由でリバースプロキシから受け取ったリクエストで、Tomcatが作成したセッションクッキーにsecur
属性が含まれていない脆弱性だ。この脆弱性により、攻撃者はセッションクッキーを安全でないチャネルで送信する可能性がある。本脆弱性の影響を受けるTomcatのバージョンは以下の通りだ。 11.0.0-M1〜11.0.0-M2、10.1.0-M1〜10.1.5、 9.0.0-M1 〜 9.0.71 および 8.5.0 〜 8.5.85 だ。
Quarkus 3.0.0.Alpha5とCamel 4.0.0-M2を含む最初のマイルストーン・リリースであるCamel Quarkusは、JDK17とJakarta EE 10のベースラインを特徴とする最初のCamel Quarkusリリースである。その他の注目すべき変更点としては、ReflectiveClassBuildItem
クラスの廃止、Camel 4とQuarkus 3でテスト中にPerfRegressionIT
クラスを使用して発生する例外の修正、InfinispanテストのQuarkusおよびCamel管理クライアント用の別々のモジュールへの分割がある。このリリースの詳細は、リリースノートに記載されている。
JBang
JBangのバージョン0.105.1と0.105.2は、次のような顕著な変更を提供する。サポートされているJBang IDEプラグインの1つがインストールされていると仮定するjbang edit
コマンドの改良、クラスパスよりもモジュールパスを使用する改良の継続、jbang export jlinkコマンドは、開発者がJava runtimeを組み込んだJBangアプリケーションやスクリプトをエクスポートできるオプションとなった。Apple Silicon VSCodiumダウンロードに関する修正などだ。
Failsafe
Java 8+で失敗を処理するための軽量で依存性のないライブラリであるFailsafeは、Failsafe JARへの完全なJavaモジュール記述子の追加、Failsafeが提供するCompletableFuture
クラスのインスタンス内の実行参照の解放などのAPIの変更を含むバージョン3.3.1をリリースした。このリリースに関する詳細は、変更履歴から参照できる。
Maven
Maven 3.9.1がリリースされた。 "missing dependency "エラーメッセージの改善、replaceAll()
メソッドの正規表現以外のパターンをreplace()
メソッドに置き換える、またはプリコンパイルパターンを使用するといったパフォーマンス向上、${localRepository}
によって注入されたArtifactFactory
インターフェースのインスタンスはMaven ResolverインターフェースLocalRepositoryManagerとコンテキスト不足により互換しないためMojo pluginパラメータ表現、${localRepository}
は非推奨となっている。
Gradle
Gradle 8.1の最初のリリース候補は、安定とみなされるようになったConfiguration cacheの継続的な改善、Groovy DSLの代替であるKotlin DSLの継続的な改善、Kotlin DSLスクリプトでの実験的な単純プロパティ割り当て、およびJDK20のサポートを提供する。このリリースの詳細は、リリースノートに記載されている。