2023年5月15日の週のJavaラウンドアップは、OpenJDK、JDK21、Azul Zulu、Spring Bootのポイントリリース、Spring Security、Spring Security Kerberos、Spring Integration、Spring Batch、Spring for GraphQL、Spring Authorization Server、Spring LDAP、Micronaut、Open Liberty、TornadoVM、Hibernate ORM、Apache TomEE、Apache Tika、OpenXava、JBang、JDKMonとSpring I/O カンファレンスからのニュースである。
OpenJDK###
JEP449,Deprecate the Windows 32-bit x86 Port for Removal,が、ProposedからTargetに昇格し、JDK21のTargetedになった。この機能JEPは、Microsoftのシニア・プログラム・マネージャーであるGeorge Adams氏によって紹介され、将来のリリースで削除することを目的として、Windows x86-32ポートを非推奨を提案しています。JEP436,仮想スレッド(セカンドプレビュー,を32ビットプラットフォームで実装する予定がないため、このポートのサポートを削除することで、OpenJDK開発者は新機能の開発を加速できる。
JEP445,無名クラスとインスタンスメインメソッド(プレビュー),は、提案からターゲットに昇格し、JDK21のターゲットになった。この機能JEPは、以前は 柔軟なメインメソッド と匿名メインクラス(プレビュー)」と「暗黙のクラスと拡張されたメインメソッド(プレビュー)」として知られており、"大規模プログラム向けに設計された言語機能を理解する必要がなく、学生が最初のプログラムを書けるようにJava言語を進化させる "という提案をしている。このJEPは、オラクルのJava言語アーキテクトであるBrian Goetz氏による2022年9月のブログ記事Paving the on-rampを前進させるものだ。オラクルの技術スタッフのコンサルティングメンバーであるGavin Bierman氏は、Javaコミュニティによるレビューのために、仕様書の最初のドラフトを公開した。InfoQでは、より詳細なニュースを追って伝える。
JEP443「Unnamed Patterns and Variables (Preview)」は、ProposedからTargetに昇格し、JDK21のTargetedになった。このプレビューJEPは、"コンポーネントの名前やタイプを明記せずにレコードのコンポーネントにマッチする無名パターン、および初期化できるが使用されない無名変数で言語を強化する "ことを提案している。これらはいずれも、r instanceof _(int x, int y)
やr instanceof _
のようにアンダースコア文字で表記される。
JEP404「Generation Shenandoah (Experimental)」は、ProposedからTargetedに昇格し、JDK21のTargetedになった。このJEPは、"Shenandoahガベージコレクタを世代別コレクション機能で強化し、持続可能なスループット、ロードスパイク耐性、およびメモリ使用率を向上させる "ことを提案している。G1、CMS、Parallelなどの他のガベージコレクタと比較して、Shenandoahは現在、追加のヒープヘッドルームを必要とし、到達不可能なオブジェクトによって占有されたスペースの回復がより困難であることを示しているのだ。InfoQでは、より詳細なニュース記事をフォローする予定である。
JEP452「鍵カプセル化メカニズム API」は、JDK21の候補から提案、ターゲットに昇格した。この機能JEPタイプは、標準的なKey Encapsulation Mechanism(KEM)アルゴリズムの実装を満たすこと、より高度なセキュリティプロトコルによるKEMの使用例を満たすこと、サービスプロバイダーがKEMアルゴリズムのJavaまたはネイティブ実装をプラグインできるように提案している。このドラフトは最近更新され、DerivedKeyParameterSpec
クラスを廃止し、encapsulate(int from, int to, String algorithm)
メソッドの引数リストにフィールドを配置する大きな変更を含む。このレビューは2023年5月26日に終了する予定だ。InfoQでは、より詳細なニュースを追って伝える予定である。
OracleのProject Loomのアーキテクト兼技術責任者であるRon Pressler氏は、JEP453Structured Concurrency(プレビュー)に対するいくつかの変更を発表した。まだ候補状態であるこの機能の変更点には、TaskHandleインターフェースの名前がSubtaskに変更されたこと、handleComplete()メソッドのジェネリックシグネチャを修正したこと、キャンセル時のサブタスクの状態と動作の変更、Threadsクラスで新たに定義したcurrentThreadEnclosingScopes()というメソッドが現在の構造化コンテキストの説明を文字列にした状態で返ってきたことである。
JDK21
今週、JDK21早期アクセスビルドのビルド23が公開された。ビルド22からのアップデートで、さまざまな問題の修正が含まれている。このビルドの詳細については、リリースノートに記載されている。
JDK21については、開発者はJava Bug Databaseを通じてバグを報告することが推奨される。
Azul
Azulは、OpenJDKのダウンストリームディストリビューションであるZuluが、Javaアプリケーションの起動時間とウォームアップ時間を短縮するためのチェックポイントでの協調復元(CRaC) をサポートするようになったと発表した。InfoQでは、より詳細なニュースを追って伝える。
Spring Framework
Spring Boot 3.1.0のリリースでは、TestcontainersとDocker Composeを使った開発時の外部サービス管理のサポート、統合テストにおけるTestcontainersの設定の簡素化、接続用のSSLトラストマテリアルの設定の集中化と拡張、Spring Authorization Serverの自動設定などの注目すべき新機能が提供される。また、Spring Data 2023.0、Spring GraphQL 1.2、Spring Integration 6.1、Spring Security 6.1、Spring Session 3.1への依存関係のアップグレードがあった。このリリースの詳細は、リリースノートに記載されている。
Spring Bootのバージョン3.0.7、2.7.12、2.6.15、2.5.15は、バグ修正、ドキュメントの改善、依存関係のアップグレード、軽減のための解決策を特徴としてリリースされた: CVE-2023-20883, Spring Boot Welcome Page DoS Vulnerability, Spring MVCがリバースプロキシキャッシュと一緒に使われている場合、サービス拒否(DoS)攻撃を受ける可能性がある脆弱性, CVE-2023-20873, Security Bypass With Wildcard Pattern Matching on Cloud Foundry, Cloud Foundryに展開したアプリケーションが、/cloudfoundryapplication/**
エンドポイントと一致する要求により、セキュリティバイパスする脆弱性がある. これらのリリースの詳細は、バージョン3.0.7、バージョン2.7.12、バージョン2.6.15、バージョン2.5.15のリリースノートに記載されている。
Spring Security 6.1.0のリリースについては、Spring Securityの設定においてand()メソッド
を廃止し、ラムダDSLを採用したことについて、より包括的に説明し、クロスサイトリクエストフォージェリ (CSRF) に関するドキュメントを改善した。このリリースの詳細は、リリースノートに記載されている。
Spring Security Kerberos 2.0.0の最初のリリース候補は、ドキュメントの改善と、Apacheディレクトリサーバーライブラリが多くのリファクタリングを受けたため、spring-security-kerberos-test
のユーティリティの再実装/移行が特徴だ。このリリースの詳細は、リリースノートに記載されている。
Spring Integration 6.1のリリースでは、SftpRemoteFileTemplateTests
クラスをテストするための追加診断、FluxMessageChannel
クラスのメモリリークの修正、ImapMailReceiverTests
クラスの改善とクリーンアップ、パーティション化したメッセージディスパッチ用の新しいPartitionedChannel
クラスなどの重要な変更が行われている。このリリースの詳細は、リリースノートに記載されている。
Spring Batch 5.0.2がリリースされた。バグ修正、ドキュメントの改善、新機能として、StaxEventItemReader
クラスが入力ファイルのエンコーディングを自動検出する。JobParameters
クラスがコンストラクタとgetParameters
メソッドでHashMap
ではなくLinkedHashMap
のインスタンスを使用して入力順序を保証するように変更されており、非推奨のAPIの使用も少なくしているのだ。このリリースに関する詳細は、リリースノートを見て欲しい。
Spring for GraphQL 1.2.0がリリースされ、AOTプロセッサの@GraphQlExceptionHandler
アノテーションメソッドのサポート、GraphQlTester
インターフェースのネストされたパス、@BatchMapping
アノテーションメソッドのスキーママッピング検査などの新機能を追加した。このリリースの詳細は、リリースノートに記載されている。
同様に、Spring for GraphQL 1.1.4もリリースされ、バグ修正、依存関係のアップグレード、ドキュメントの改善、ClientGraphQlRequest
インターフェースがWebClient
インターフェースからのリクエストに属性を渡すという新機能が提供された。このリリースの詳細は、リリースノートに記載されている。
Spring Authorization Server 1.1.0のリリースについては、依存関係のアップグレードと新機能として、デモサンプルの連携ログインの簡略化とUIデザインの更新、デフォルトのクライアントサンプルへのログアウト成功ページの追加、認証コードが複数回使われた場合のトークンの失効が追加されている。本リリースに関する詳細は、リリースノートを見て欲しい。
Spring Security 5.8.3と5.7.8、Jackson 2.15.0と2.14.3といった依存関係のアップグレード、バージョン3.0.3の新機能である@DnAttribute
アノテーションによる属性マッピングの使用に関する計算が、Spring LDAP 3.1.0 と 3.0.0 で発表された。これらのリリースの詳細については、バージョン3.1.0およびバージョン3.0.3のリリースノートに記載されている。
Micronaut
Micronaut Foundationは、バグ修正とモジュールのアップデートを含むMicronaut Framework 3.9.2をリリースした: Micronaut Azure、Micronaut AWS、Micronaut GCP、Micronaut OpenAPI、Micronaut SQL、Micronaut Kubernetesの各モジュールのバグ修正とアップデートをする。本リリースに関する詳細は、リリースノートを見て欲しい。
Open Liberty
IBMは、Open Liberty 23.0.0.5-betaをリリースした。MicroProfileとJakarta EEアプリケーションの起動時間を短縮する新機能InstantOnを引き続き強化し、Jakarta Data仕様のプレビューに最新の更新を加えている。
TornadoVM
オープンソースのソフトウェア技術会社であるTornadoVMは、TornadoVMバージョン0.15.1をリリースし、以下のようなバグ修正と顕著な改善を行った: OpenCLバックエンドによるApple M1/M2との互換性の向上、デバイスの計算能力に基づくデバイス選択ヒューリスティックの導入、Graal 22. 3.2 JITコンパイラーとの統合と互換性、Tornadoデータフローグラフに基づくホスト(CPU)とデバイス(GPU)間の読み取り専用および書き込み専用バッファの冗長なデータコピーを削除する最適化、GraalVM/Truffleプログラムの統合改善、ユニットテスト用にTornadoVMバイトコードをダンプするオプション。このリリースに関する詳細は、リリースノートに記載されている。
マンチェスター大学のAdvanced Processor Technologies Research Groupの研究員であるJuan Fumero氏は、2020年3月のQCon LondonでTornadoVMを紹介し、その後、この最新のInfoQ技術記事を寄稿している。
Hibernate
Hibernate ORM 6.2.3.Finalがリリースされ、バグ修正、パフォーマンス改善、ネイティブのPostGIS距離演算子に対するHQLサポートが行われた。このリリースの詳細は、変更点のリストに記載されている。
Apache Software Foundation
Apache TomEE 8.0.15のリリースでは、バグ修正、依存関係のアップグレード、および緩和のための解決策が提供されている: CVE-2022-1471:SnakeYAMLコンストラクタ()
クラスを使用した型のデシリアライズにより、攻撃者が悪意のあるリモートコード実行を開始できる脆弱性;CVE-2023-28708:HTTP経由でリバースプロキシから受け取ったリクエストで、X-Forwarded-ProtoヘッダーをHTTPSに設定しているRemoteIpFilterクラスを使用して、Tomcatが作成したセッションクッキーに Secure属性がない脆弱性である。また、CVE-2023-24998は、Apache Commons FileUploadの脆弱性で、処理されるリクエストパートの数が制限されていないため、攻撃者が悪意のあるアップロードでサービス拒否を引き起こす可能性がある。このリリースの詳細は、リリースノートに記載されている。
Apache Tika 2.8.0がリリースされ、次のような新機能が追加された:PDFの増分更新のカウントや解析が可能、FileSystemFetcher
クラスでファイルシステムメタデータのオプション抽出が可能、FileSystemEmitter
クラスでpretty printingが可能、PDFからの埋め込みファイル抽出が改善。このリリースの詳細は、リリースノートに記載されている。
OpenXava
OpenXava 7.1がリリースされ、バグフィックス、依存関係のアップグレード、および以下のような新機能が搭載された:リストモードのカレンダー、CVEの緩和を含むWebセキュリティの強化、新しい@Mask
アノテーションによるデータ入力マスクを示すプロパティへの注釈付け機能、および豊富な新しいテキストエディタ。このリリースの詳細は、リリースノートに記載されている。
JBang
JBang 0.107.0では、新しいenable-preview
フラグでJDK21をサポートし、次のような注目すべき修正が行われた:エクスポートで不足している出力フォルダが作成されるようになった;PicoCLIが特定の設定値で例外をスローしなくなった;JBangエイリアスリストの不要な検索が解決された。
JDKMon
インストールされたJDKを監視し、アップデートするツールであるJDKMonのバージョン17.0.59が、公開された。AzulのプリンシパルエンジニアであるGerrit Grunwald氏によって作成されたこの新バージョンでは、Linuxでのサポートの向上、CVE検出に関する修正などの変更が行われている。
Spring I/O カンファレンス
スペイン・バルセロナのモンジュイックにあるFira de Barcelonaで、第10回Spring I/Oカンファレンスが開催された。10周年を記念して、Javaコミュニティの講演者が、Springプロジェクト、GraalVM、ネイティブJava、エンタープライズセキュリティ、ドメイン駆動設計、クラウドコンピューティングに関するセッションやワークショップを発表したのである。