今週2021年12月20日のJava総まとめでは、OpenJDKのValueオブジェクトに関する新しいドラフト、JDK 18、JDK 19、Project Loom、Log4Shellに関するベンダーからの追加ステートメント、多くのSpringおよびQuarkusの更新、Hibernate ORM 6.0.0-M3、Apache CamelとCamel Quarkusのポイントリリース、Apache Tika 2.2.1、およびGraalVM Native Build Tools 0.9.9からのニュースを特集する。
OpenJDK
新しい JEP ドラフトである Value Objects (Preview) が先週リストに追加された。この新しい言語と VM のプレビュー機能は、Value 型が ID フリーの Value クラスとインスタンスの動作を指定して定義されるよう Java オブジェクトモデルを拡張することを提案する。これらのクラスには final インスタンスフィールドのみが含まれ、オブジェクト ID はない。
JDK 18
JDK 18 早期アクセスビルドのビルド 29 が先週利用可能になった。さまざまな問題の修正などビルド 28から更新されている。詳細については、リリースノートに記載がある。
JDK 19
JDK 19 早期アクセスビルドのビルド 3も先週利用可能になった。さまざまな問題の修正を含むビルド 2から更新されている。
JDK 18 と JDK 19 では、開発者は Java Bug Database を介してバグのレポートが奨励されている。
Project Loom
Project Loom 早期アクセスビルドのビルド 19-loom+1-11 が Java コミュニティで利用可能になった。これは、JDK19 早期アクセスビルドのビルド 2に基づいている。
Log4Shell の脆弱性についてのベンダーの追加ステートメント
Oracle の Helidon についてのステートメント:
デフォルトでは、Log4j は Helidon ベースのアプリケーションでは使用されず、クラスパスに含まれません。ただし、Helidon はオプションの Log4j 統合モジュール (
helidon-logging-log4
) を提供していて、Helidon は Log4j のバージョンを管理しています。アプリケーションが
helidon-logging-log4
を使用している場合、またはアプリケーションが Log4j を直接使用している場合、アプリケーションは Log4j への明示的な依存関係を宣言していますが、この依存関係のバージョンは Helidon によって管理されている可能性があります。
JetBrains の JetBrains Marketplace にあるサードパーティプラグインについてのステートメント
IntelliJ ベースのプラグインがいくつもあるため、私達は最初 API Watcher を使って、どのプラグインが使用しているどの log4j の正確なバージョンであるかを確認しました。私達は一時的に log4j の使用を検出したすべてのプラグインバージョンを非表示にしました。
このような確認により、誤検知が発生する可能性があることを理解しています。しかし、log4j をリパッケージしたプラグインを見逃すのではなく、より安全に実行して、潜在的なリスクに多くのプラグイン作成者の注意を引きたいと思います。
Spring Framework
Spring は非常に忙しい1週間だった。さまざまな Spring プロジェクトで多くのポイントリリースがあった。
Spring Boot 2.6 と 2.5 のリリーストレインで2つのポイントリリースがあった:
バージョン 2.6.2 は、Log4j 2.17.0、Kotlin 1.6.10、Hibernate 5.6.3.Final および複数の Spring 関連プロジェクトなど多くの依存関係のアップグレードに加えて、55 のバグ修正とドキュメントの改善が行われている。
バージョン 2.5.8 は、Log4j 2.17.0、Kotlin 1.5.32、Hibernate 5.4.33、および複数の Spring 関連プロジェクトなど多くの依存関係のアップグレードに加えて、46 のバグ修正とドキュメントの改善が行われている。
Spring Cloud Square 0.4.0 がリリースされ、次の機能が追加された。負荷分散されていないユースケースの調整を提供するサポート。@RetrofitClient
アノテーションが付けられた Retrofit クライアントのインスタンスごとに異なる WebClient.Builder
の bean を構成する機能。OkHttpClient
クラスのインスタンスへの Spring Cloud Sleuth 統合。
Spring Native 0.11.1 が利用可能になった。Spring Boot 2.6.2 への依存関係のアップグレードに加えて、13 のバグ修正とドキュメントの改善などがある。
Spring Integration 5.5.7 がリリースされ、多数のバグ修正が行われた。詳細については、移行ガイド (潜在的な重大な変更) および変更ログに記載されている。
Spring Security バージョン 5.2.15、5.3.13、5.4.10、5.5.4、および 5.6.1 のポイントリリースが先週利用可能になった。バグ修正とマイナーな改善が行われている。
Quarkus
メンテナンスリリースである Quarkus 2.5.4.Final は、Jackson Databind のサービス拒否攻撃の可能性を修正するために、Jackson 2.12.6 へ依存関係がアップグレードされている。詳細については、変更ログに記載されている。
Quarkus 2.6.0.Final がリリースされた。SmallRye Reactive Messaging 3.13、Kafka 3.0、Kotlin 1.6、および Camel3.14 への依存関係のアップグレード。Neo4J、Amazon Alexa、Reactive Messaging HTTP などの拡張機能を Quarkiverse Hub に移動。新しいキャッシュのためのプログラム API。ネイティブ実行を可能にするための UBI Micro ベースの Docker イメージの小型化が行われている。このリリースには、Quarkus 2.5.4.Final からの修正を含まないが、Quarkus 2.6.1.Final には含まれている。
2021年最後のメンテナンスリリースである Quarkus2.6.1.Final には、Quarkus 2.5.4.Final のすべての修正と、いくつかの依存関係のアップグレードなどがある。詳細については、変更ログに記載されている。
Hibernate
Hibernate ORM 6.0 の3番目のベータリリースが先週利用可能になった。次の新しいアノテーションが追加された。@IdGeneratorType
を使用すると、タイプセーフな方法で IdentifierGenerator
インターフェイスを構成できる。@TenantId
は、列ベースのマルチテナンシーを使用して、テナントを定義する属性をマークする。@AttributeBinderType
を使用して、属性のマッピングの定義方法をカスタマイズできる。詳細については、Hibernate 6.0 ユーザガイドおよび移行ガイドに記載がある。
Apache Camel
Apache Software Foundation は、Camel 3.7 リリーストレインの最後のポイントリリースを提供した。バージョン 3.7.7 は、7 のバグ修正と改善、および Logback 1.2.8、Log4j 2.16.0、camel-nsq
および camel-corda
コンポーネントへの依存関係のアップグレードが行われた。詳細については、リリースノートに記載されている。
Quarkus との整合性を維持しながら、Apache は Camel 3.14.0、Quarkus2.6.0.Final および JFR のネイティブサポートを含む Camel Quarkus 2.6.0 もリリースした。
Apache Tika
Apache Tika は、メタデータ抽出ツールキットのバージョン 2.2.1 をリリースした。元は Apache Lucene のサブプロジェクトだったが、この最新バージョンでは、Log4j 2.17.0 へのアップグレードと、バージョン 2.2.0 で導入された Office Open XML (docx
/pptx
/xlsx
) リグレッションの重要な修正などがある。詳細については、リリースノートに記載されている。
GraalVM Native Build Tools
バージョン 1.0 への道のりで、Oracle Labs は Native Build Tools のバージョン 0.9.9 をリリースした。これは、GraalVM Native Image との相互運用性のためのプラグインで構成される GraalVM プロジェクトだ。この最新リリースでは、Gradle プラグインの修正が提供されている。つまり、クラスパスエントリが欠落している場合の寛容なリソース検出メカニズム。カスタムバイナリに関連付けられた適切なネイティブ推論タスク (つまり、main
バイナリと test
バイナリの外部にあるバイナリ)。ツールチェーン検出を無効にする操作のリワーク。