Red Hat build of Quarkus 3.27 のリリースノート
概要
第1章 Red Hat build of Quarkus 3.27 のリリースノート リンクのコピーリンクがクリップボードにコピーされました!
リリースノートでは、Red Hat build of Quarkus 3.27 の新機能、注目すべき技術的な変更、テクノロジープレビュー機能、バグ修正、既知の問題、関連するアドバイザリーの情報を提供します。
これには次のような注目すべき変更が含まれます。
以前のリリースからの移行に役立つように、アップグレードと下位互換性に関する情報も提供されます。
1.1. Red Hat build of Quarkus について リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Quarkus は、コンテナーおよび Red Hat OpenShift Container Platform 用に最適化された Kubernetes ネイティブ Java スタックです。Quarkus は、Eclipse MicroProfile、Eclipse Vert.x、Apache Camel、Apache Kafka、Hibernate ORM with Jakarta Persistence、Jakarta REST などの一般的な Java 標準、フレームワーク、ライブラリーと連携するように設計されています。
開発者は、Java アプリケーションに必要な Java フレームワークを選択できます。これは、Java 仮想マシン (JVM) モードで実行することも、ネイティブモードでコンパイルして実行することもできます。Quarkus は、コンテナーファーストという手法で Java アプリケーションをビルドします。コンテナーファーストのアプローチにより、コンテナー化と、マイクロサービスと関数の効率的な実行が容易になります。このため、Quarkus アプリケーションのメモリーフットプリントは小さく、起動時間が短縮されます。
Quarkus は、統一された設定、未設定のサービスの自動プロビジョニング、ライブコーディング、継続的なテストなどの機能を使用してアプリケーション開発プロセスを最適化します。これにより、コードの変更に関する即時フィードバックが提供されます。
1.2. Quarkus コミュニティーバージョンと Red Hat build of Quarkus の違い リンクのコピーリンクがクリップボードにコピーされました!
アプリケーション開発者は、Quarkus の 2 つの異なるバージョン (Quarkus コミュニティーバージョンと製品バージョンである Red Hat build of Quarkus) にアクセスできます。
次の表は、Quarkus コミュニティーバージョンと Red Hat build of Quarkus の違いを説明しています。
| 機能 | Quarkus コミュニティーバージョン | Red Hat build of Quarkus バージョン | 説明 |
|---|---|---|---|
| 最新のコミュニティー機能へのアクセス | はい | いいえ | Quarkus コミュニティーバージョンを使用すると、最新の機能開発にアクセスできます。 Red Hat は、コミュニティーがリリースするすべてのバージョンに対応する Red Hat build of Quarkus をリリースするわけではありません。Red Hat build of Quarkus 機能リリースの頻度は、約 6 カ月ごとです。 |
| Red Hat によるエンタープライズサポート | いいえ | はい | Red Hat は、Red Hat build of Quarkus に対してのみエンタープライズサポートを提供します。Quarkus コミュニティーバージョンに関する問題を報告するには、quarkusio/quarkus - Issues を参照してください。 |
| 長期サポートへのアクセス | いいえ | はい | Red Hat build of Quarkus のメジャーリリースのライフサイクルは、フルサポートとメンテナンスサポートの 2 つのサポートフェーズに分かれています。 Red Hat build of Quarkus の製品ライフサイクル、タイムライン、サポートポリシーの詳細は、Red Hat カスタマーポータルにログインし、ナレッジベースの記事である 製品ライフサイクル および Red Hat build of Quarkus のライフサイクルとサポートポリシー を参照してください。 |
| 以前のリリースにバックポートされた Common Vulnerabilities and Exposures (CVE) の修正とバグ修正 | いいえ | はい | Red Hat build of Quarkus では、選択された CVE 修正とバグ修正がサポートされているストリームに定期的にバックポートされます。 メンテナンスサポートの詳細は、Red Hat build of Quarkus のライフサイクルとサポートポリシー を参照してください。 |
| Red Hat OpenShift Container Platform および Red Hat Enterprise Linux (RHEL) でテストおよび検証済み | いいえ | はい | Red Hat build of Quarkus は、Red Hat OpenShift Container Platform および RHEL でビルド、テスト、および検証されています。Red Hat は、サブスクリプション契約に従って、サポートされる構成とテスト済みのインテグレーションについて、実稼働と開発の両方のサポートを提供します。詳細は、Red Hat build of Quarkus でサポートされる構成 を参照してください。 |
| 安全なビルドシステムを使用したソースからのビルド | いいえ | はい | Red Hat build of Quarkus では、コアプラットフォームとサポートされているすべてのエクステンションは、安全なソフトウェア配信を使用して Red Hat によって提供されます。つまり、それらはソースから構築され、セキュリティー上の問題がスキャンされ、ライセンスの使用が検証されています。 |
| JDK および Red Hat Build of Quarkus ネイティブビルダーディストリビューションのサポートへのアクセス | いいえ | はい | Red Hat build of Quarkus は、認定された OpenJDK ビルドと認定されたネイティブ実行可能ビルダーをサポートします。以下の警告を参照してください。詳細は、Red Hat build of Quarkus でサポートされる構成 を参照してください。 |
ネイティブ Linux 実行可能ファイルをビルドする ために、Red Hat build of Quarkus は GraalVM Mandrel に基づく Red Hat build of Quarkus Native Builder イメージ (quarkus/mandrel-for-jdk-21-rhel8) の使用をサポートしています。
Red Hat build of Quarkus は、Oracle GraalVM Community Edition (CE)、Mandrel コミュニティーエディション、またはその他の GraalVM ディストリビューションを使用したネイティブ実行可能ファイルのビルドをサポートしていません。詳細は、Red Hat build of Quarkus アプリケーションのネイティブ実行可能ファイルへのコンパイル を参照してください。
1.3. 新機能、機能拡張、および技術的な変更 リンクのコピーリンクがクリップボードにコピーされました!
このセクションでは、Red Hat build of Quarkus 3.27 で導入された新機能、機能拡張、および技術的な変更点を概説します。
1.3.1. AI/ML リンクのコピーリンクがクリップボードにコピーされました!
1.3.1.1. Dev Assistant: 例外処理のための AI 搭載開発アシスタント リンクのコピーリンクがクリップボードにコピーされました!
Quarkus のコミュニティーエクステンションハブである Quarkiverse が、Quarkus Chappie エクステンション (quarkus-chappie) を通じて、Dev Assistant を導入します。Dev Assistant は、開発モード中に AI を活用した支援を提供することで、例外のトラブルシューティング、テストコードの生成、TODO セクションの完了、複雑なコードの理解を支援します。この機能は、OpenAI 互換サービスまたはローカルの Ollama インスタンスと統合し、Dev UI から設定されます。実稼働アプリケーションのオーバーヘッドを増やすことはありません。
このエクステンションは、Red Hat build of Quarkus ではサポートされている機能ではありません。
詳細は、Quarkus の Dev Assistant ガイドを参照してください。
1.3.2. データ リンクのコピーリンクがクリップボードにコピーされました!
1.3.2.1. Hibernate ORM と Hibernate Reactive: 同じ永続ユニット内での併用 リンクのコピーリンクがクリップボードにコピーされました!
今回のリリースでは、同じ永続性ユニット内で Hibernate ORM と Hibernate Reactive を一緒に使用できます。
この機能により、アプリケーションはブロッキングとリアクティブの永続性を組み合わせることができ、混合ワークロードや、命令型コードと並行したリアクティブ機能の一部導入が可能になります。
詳細は、GitHub Pull Request #44473 を参照してください。
1.3.2.2. Hibernate ORM: Jakarta Data の導入 リンクのコピーリンクがクリップボードにコピーされました!
現在のリリースでは、Red Hat build of Quarkus に、Hibernate ORM エクステンション quarkus-hibernate-orm を通じて Jakarta Data 統合が導入されています。
Jakarta EE 11 仕様の Jakarta Data API は、Java アプリケーションでデータベースやその他のデータソースにアクセスして操作する方法を簡素化します。リポジトリーを定義する標準化された方法と、型安全な方法でクエリーを構築する機能を提供します。
Jakarta Data では、pom.xml ファイルに別のランタイム依存関係を追加する必要があります。
1.3.2.2.1. スタートガイド リンクのコピーリンクがクリップボードにコピーされました!
ビルドツールで
hibernate-processorアノテーションプロセッサーを設定します。<plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <annotationProcessorPathsUseDepMgmt>true</annotationProcessorPathsUseDepMgmt> <annotationProcessorPaths> <path> <groupId>org.hibernate.orm</groupId> <artifactId>hibernate-processor</artifactId> <!-- No artifact version is required as it is managed by {ProductLongName}. --> </path> <!-- Other processors that might be required by your application --> </annotationProcessorPaths> <!-- Other compiler plugin configuration options --> </configuration> </plugin>pom.xmlファイルに依存関係を追加します。<dependency> <groupId>jakarta.data</groupId> <artifactId>jakarta.data-api</artifactId> </dependency>
1.3.2.2.2. リポジトリーの定義 リンクのコピーリンクがクリップボードにコピーされました!
この依存関係と hibernate-processor アノテーションプロセッサーを設定すると、他の Bean と同じように使用できるリポジトリーを作成できます。
以下に例を示します。
エンティティーがあると仮定します。以下に例を示します。
@Entity public class MyEntity { @Id @GeneratedValue public Integer id; @Column(unique = true) public String name; }このエンティティーのリポジトリーを定義します。
@Repository public interface MyRepository extends CrudRepository<MyEntity, Integer> {1 @Query("select e from MyEntity e where e.name like :name")2 List<MyEntity> findByName(String name); @Delete3 void delete(String name); }
1.3.2.2.3. 型安全な方法でクエリーを構築する リンクのコピーリンクがクリップボードにコピーされました!
Jakarta Data の静的メタモデル を使用すると、いくつかのクエリーパラメーターを型安全に定義できます。
たとえば、sort by 句を構築する場合などです。
前の例のエンティティーを使用して、並べ替えパラメーターを受け入れる追加のクエリーメソッドでリポジトリーを継承します。
@Repository public interface MyRepository extends CrudRepository<MyEntity, Integer> { // other query methods ... @Query("select e from MyEntity e where e.name like :name") List<MyEntity> findByName(String name, Order<MyEntity> sorts);1 }- 1
sortsパラメーターを追加して、このリポジトリーメソッドを呼び出すときに返されるエンティティーの順序をユーザーが指定できるようにします。
メタモデルクラスを活用して、メソッドに順序を渡します。
@Inject MyRepository repository; public void someMethod(){ var entities = repository.findByName( "some name", Order.by(_MyEntity.name.asc())1 ); }- 1
- 生成された静的メタモデルクラス
_MyEntityとそのname属性参照を使用して、クエリーのOrder句を構築します。
この変更を適用するには、このリリースノートに記載されている追加の手順を手動で実行します。Red Hat build of Quarkus 3.27 へのアプリケーションの移行ガイド の自動更新プロセスには、この変更は含まれません。
詳細は、以下の資料を参照してください。
- Quarkus の「Hibernate ORM と Jakarta Persistence の使用」ガイドの 静的メタモデルと Jakarta Data セクション
- Jakarta データ ドキュメント
1.3.2.3. Hibernate ORM: オフライン起動とダイアレクト設定 リンクのコピーリンクがクリップボードにコピーされました!
今回のリリースでは、Hibernate ORM はデータベース接続を必要とせずにオフラインで起動できます。Hibernate は、データベースのダイアレクトとバージョンに適切なデフォルトを指定します。ターゲットデータベースが共通のデフォルトと異なる場合は、ダイアレクト、バージョン、および ダイアレクト固有 の設定を行えます。
起動時に接続は開かれません。アプリケーションを起動する前にデータベーススキーマが正しく作成されていることを確認してください。データの永続性を確保したりクエリーを実行したりするには、実行時にライブデータベース接続が必要です。
詳細は、以下の資料を参照してください。
- Quarkus の「Using Hibernate ORM and Jakarta Persistence」ガイドの Hibernate ORM configuration properties セクション。
- GitHub Pull Request #49408
- Quarkus 3.26 release blog – Hibernate section
1.3.2.4. Hibernate ORM のバージョン 7.1 へのアップグレード リンクのコピーリンクがクリップボードにコピーされました!
Hibernate ORM は標準の Jakarta Persistence 実装であり、現在のリリースでは、Hibernate ORM は Jakarta Persistence バージョン 3.2 とともにバージョン 7.1 にアップグレードされています。
Hibernate ORM 7 リリースシリーズへのアップグレードでは、多くの新機能と拡張機能が導入されています。
変更点の完全なリストについては、次の Hibernate 移行ドキュメントを参照してください。
このアップグレードにより、Red Hat build of Quarkus に重大な変更が導入されます。
重大な変更点については、Hibernate ORM: バージョン 7.1 へのアップグレード リリースノートを参照してください。
詳細は、以下の資料を参照してください。
1.3.2.5. Hibernate Reactive: 名前付き永続ユニットとデータソース リンクのコピーリンクがクリップボードにコピーされました!
現在のリリースでは、名前付き永続ユニットとデータソースが Hibernate Reactive で提供されます。
この機能は テクノロジープレビュー として利用できます。
この機能により Hibernate Reactive は Hibernate ORM と連携し、開発者はリアクティブアプリケーションで複数の永続性ユニットまたはデータソースを定義して使用できるようになります。
詳細は、以下の資料を参照してください。
- GitHub Pull Request #48007
- Quarkus 3.26 release blog – Hibernate section
- Quarkus の「Using Hibernate Reactive」ガイドの Multiple persistence units セクション。
1.3.2.6. Hibernate Reactive のバージョン 3.1 へのアップグレード リンクのコピーリンクがクリップボードにコピーされました!
現在のリリースでは、Hibernate Reactive がバージョン 3.1 にアップグレードされました。
詳細は、以下の資料を参照してください。
- Quarkus Hibernate Reactive ガイドの使用
- Hibernate Reactive 3.1 シリーズのリリースと互換性
1.3.2.7. Hibernate Search のバージョン 8.1 へのアップグレード リンクのコピーリンクがクリップボードにコピーされました!
現在のリリースでは、Hibernate Search がバージョン 8.1 にアップグレードされました。
8.x シリーズへのアップグレードでは、Hibernate Search DSL の改善や、メトリクス集計の計算を簡素化し、バケット集計を作成するのに役立つ集計など、いくつかの新機能が導入されています。
Hibernate Search 8.1 はバージョン 7.2 と互換性があります。
Hibernate Search 8.1 の機能と拡張機能の詳細は、次の Hibernate ドキュメントを参照してください。
1.3.2.8. Hibernate Validator: Hibernate Reactive との統合 リンクのコピーリンクがクリップボードにコピーされました!
今回のリリースでは、Hibernate Validator と Hibernate Reactive の統合が拡張されました。この機能によりエンティティーの検証が可能になり、Hibernate Reactive のデータベーススキーマが強化されました。
たとえば、エンティティー属性の @NotNull アノテーションにより、対応する列定義に not null 句が生成されます。この動作により、Hibernate ORM との一貫性が確保され、リアクティブアプリケーション全体のデータ整合性が向上します。
制約宣言では、XML (validation.xml) で定義された制約マッピングが適用されます。Quarkus では、XML を介した ValidatorFactory の設定はサポートされていません。
この機能は テクノロジープレビュー として利用できます。したがって、いくつかの制限が適用されます。たとえば、遅延関連付け全体の検証は適切に機能しない可能性があります。
詳細は、以下の資料を参照してください。
- Quarkus「Using Hibernate ORM and Jakarta Persistence」ガイドの Validation modes and Hibernate Validator integration セクション
- Quarkus "Validation with Hibernate Validator" ガイドの Bean 検証ガイド: の制限事項 セクション
- Hibernate Validator reference: XML constraint mapping
- Quarkus GitHub issue #49865: Known limitation: validation with lazy associations
1.3.2.9. Hibernate Validator: バージョン 9.0 にアップグレード リンクのコピーリンクがクリップボードにコピーされました!
現在のリリースでは、Hibernate Validator はバージョン 9.0 にアップグレードされています。
Hibernate Validator 9.0 は、Jakarta EE 11 用の Jakarta Validation 3.1 を実装しています。Jakarta EE 11 を使用する場合は、Hibernate Validator 9.0 へのアップグレードが必要です。
Hibernate Validator 9.0 では、非推奨の制約とプロパティーが多数削除されました。これらの削除の詳細は、Hibernate Validator 9.0 移行 ガイドを参照してください。
詳細は、以下の資料を参照してください。
1.3.2.10. MongoDB クライアント: Quarkus TLS レジストリーとの接続を設定する リンクのコピーリンクがクリップボードにコピーされました!
今回のリリースでは、Quarkus TLS レジストリーを使用して MongoDB クライアント (quarkus-mongodb-client) 接続を設定できます。
- 定義されると、TLS 設定は他の Mongo 接続や TLS レジストリーをサポートする他のクライアントで再利用できます。
- TLS レジストリー設定には、トラストストア、キーストア、mTLS、ホスト名検証など、TLS 関連のすべての設定が含まれています。
例: TLS レジストリーを使用して MongoDB TLS を設定する
# Configure MongoDB connection
quarkus.mongodb.connection-string=mongodb://localhost:27017?tls=true
# Define a named TLS configuration for MongoDB
quarkus.tls.my-mongo.trust-store.pem.certs=server-cert.pem
quarkus.tls.my-mongo.key-store.pem.0.key=client-key.pem
quarkus.tls.my-mongo.key-store.pem.0.cert=client-cert.pem
# Reference the named configuration in MongoDB client
quarkus.mongodb.tls-configuration-name=my-mongo
# Reuse the same TLS configuration for additional MongoDB connections
# quarkus.mongodb.db2.tls-configuration-name=my-mongo
# quarkus.mongodb.db3.tls-configuration-name=my-mongo
例: ホスト名検証を無効にする
quarkus.tls.my-mongo.hostname-verification-algorithm=NONE
quarkus.mongodb.tls-configuration-name=my-mongo
詳細は、Quarkus の「MongoDB クライアントの使用」ガイドの TLS 設定 セクションを参照してください。
1.3.3. メッセージング リンクのコピーリンクがクリップボードにコピーされました!
1.3.3.1. gRPC: サーバーのカスタマイズ リンクのコピーリンクがクリップボードにコピーされました!
今回のリリースでは、gRPC エクステンションにより、gRPC サーバーのビルドプロセスのカスタマイズが導入されました。
この機能により、実行時の ServerBuilder インスタンスまたはサーバーオプションのチューニングなど、高度なシナリオが可能になります。
詳細は、以下の資料を参照してください。
1.3.4. 可観測性 リンクのコピーリンクがクリップボードにコピーされました!
1.3.4.1. Micrometer-OpenTelemetry Bridge エクステンションが導入されました リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Quarkus 3.27 では、Micrometer-OpenTelemetry Bridge (quarkus-micrometer-opentelemetry) エクステンションが導入され、Red Hat build of Quarkus アプリケーションで OpenTelemetry API を使用して実装された Micrometer レジストリーを作成できるようになりました。
この機能は テクノロジープレビュー として利用できます。
quarkus-micrometer-opentelemetry エクステンションは、quarkus-opentelemetry と quarkus-micrometer の両方の機能を組み込むことで統合を効率化し、Micrometer API の通常使用を可能にしながら、OpenTelemetry を通じてメトリクスを処理します。
この新しいエクステンションにより、Micrometer メトリクス、OpenTelemetry トレース、ログ、OpenTelemetry メトリクスをデフォルトで生成できるようになりました。
詳細は、Quarkus の Micrometer and OpenTelemetry extension ガイドを参照してください。
この変更を適用するには、このリリースノートに記載されている追加の手順を手動で実行します。Red Hat build of Quarkus 3.27 へのアプリケーションの移行ガイド の自動更新プロセスには、この変更は含まれません。
1.3.5. セキュリティー リンクのコピーリンクがクリップボードにコピーされました!
1.3.5.1. OIDC クライアント: 定期的な非同期トークン更新 リンクのコピーリンクがクリップボードにコピーされました!
今回のリリースでは、OpenID Connect (OIDC) クライアント (quarkus-oidc-client) エクステンションを設定して、トークンをバックグラウンドで非同期的に更新し、重要なアプリケーションのパフォーマンスを高めることができます。
デフォルトでは、OIDC クライアントは有効期限が切れた、または切れそうなことを検出すると、現在のリクエスト中にトークンを更新します。これにより、高スループットのアプリケーションでパフォーマンスのボトルネックが発生する可能性があります。新しい非同期更新機能は、トークンの有効期限が切れる前にバックグラウンドでトークンをプロアクティブに更新し、トークン更新操作によって受信リクエストがブロックされることを防ぎます。これは、レイテンシー要件が厳しいアプリケーションやリクエスト量が多いアプリケーションに特に役立ちます。
例: 定期的な非同期トークン更新の設定
# Configure OIDC client connection
quarkus.oidc-client.auth-server-url=https://auth.example.com/realms/myrealm
quarkus.oidc-client.client-id=my-client
quarkus.oidc-client.credentials.secret=my-secret
# Enable periodic asynchronous token refresh
quarkus.oidc-client.refresh-interval=1m
# Optional: Configure refresh token time skew
quarkus.oidc-client.refresh-token-time-skew=30s
詳細は、「OpenID Connect (OIDC) クライアントおよびトークン伝播」ガイドの アクセストークンの更新 セクションを参照してください。
1.3.5.2. OIDC: ログアウト時の Clear-Site-Data のサポート リンクのコピーリンクがクリップボードにコピーされました!
今回のリリースでは、OIDC エクステンションにより、ログアウト時に Clear-Site-Data HTTP レスポンスヘッダーを設定する機能が追加されました。
このヘッダーは、ユーザーがログアウトしたときに、Cookie、キャッシュ、ストレージなどのローカルデータを消去するようにブラウザーに指示し、エンドユーザーのセキュリティーとプライバシーを向上させます。
詳細は、以下の資料を参照してください。
- GitHub Pull Request #46864
- Quarkus の Logout and expiration ガイド
1.3.5.3. OIDC: ヘルスレディネスチェックを導入 リンクのコピーリンクがクリップボードにコピーされました!
現在のリリースでは、Quarkus OpenID Connect (quarkus-oidc) エクステンションでヘルスレディネスチェックがサポートされるようになりました。この機能を使用すると、リクエストを処理する前に、アプリケーションが OIDC サーバーに接続できることを確認します。
OIDC ヘルスチェックを有効にするには、以下を実行します。
-
プロジェクトの依存関係に、
quarkus-oidcエクステンションとヘルスチェック機能 (quarkus-smallrye-healthなど) が含まれていることを確認します。 application.propertiesファイルで次のプロパティーを設定します。quarkus.oidc.health.enabled=true
ヘルスチェックはデフォルトで無効になっています。有効にすると、設定された各 OIDC テナントの検出エンドポイントに ping が送信されます。少なくとも 1 つのテナントが OK ステータスを報告した場合、チェックは UP を返します。利用可能なテナントがないか、すべてのテナントが OK 以外のステータス (DISABLED、UNKNOWN、ERROR) を報告した場合は DOWN を返します。
詳細は、「Quarkus OpenId Connect (OIDC) Expanded Configuration Reference」ガイドの Create OIDC configuration at request time セクションを参照してください。
1.3.5.4. REST および RESTEasy クライアント OIDC フィルター: 401 レスポンスに対する自動トークン更新を導入 リンクのコピーリンクがクリップボードにコピーされました!
今回のリリースでは、REST Client - OpenID Connect Filter (quarkus-rest-client-oidc-filter) および RESTEasy Client - OpenID Connect Filter (quarkus-resteasy-client-oidc-filter) エクステンションが、REST クライアントリクエストが "401 Unauthorized" レスポンスを受け取ったときに自動的にトークンを更新する機能をサポートしています。この機能を使用すると、手動による介入なしに、期限切れまたは取り消し済みアクセストークンを処理できます。
自動トークン更新をグローバルで有効にするには、エクステンションに一致するプロパティーを設定します。
quarkus.rest-client-oidc-filter.refresh-on-unauthorized=true
quarkus.resteasy-client-oidc-filter.refresh-on-unauthorized=true
特定のクライアントエンドポイントのトークン更新を有効にするには、カスタムフィルターを作成します。
REST クライアントの場合:
@Priority(Priorities.AUTHENTICATION) public class OidcClientRequestCustomFilter extends AbstractOidcClientRequestReactiveFilter { @Override protected boolean refreshOnUnauthorized() { return true; } }RESTeasy クライアントの場合:
@Priority(Priorities.AUTHENTICATION) public class OidcClientRequestCustomFilter extends AbstractOidcClientRequestFilter { @Override protected boolean refreshOnUnauthorized() { return true; } }
この機能は、同期 REST クライアントとリアクティブ REST クライアントの両方で動作します。リクエストが 401 を返すと、フィルターはアクセストークンを自動的に更新し、リクエストを再試行します。
詳細は、「OpenID Connect (OIDC) クライアントとトークンの伝播」ガイドの RestClient Reactive ClientFilter での OidcClient の使用 および RestClient ClientFilter での OidcClient の使用 セクションを参照してください。
1.3.5.5. OIDC: OAuth2 Protected Resource Metadata のサポート リンクのコピーリンクがクリップボードにコピーされました!
今回のリリースでは、Quarkus OIDC (quarkus-oidc) エクステンションを使用して、保護対象のリソースを設定し、既知のエンドポイントを介して OAuth2 Protected Resource Metadata (RFC 9728) をアドバタイズできます。このエンドポイントは、リソース識別子を返すほか、それを保護する認可サーバーを含むメタデータを必要に応じて返します。このメタデータを使用すると、手動設定不要で、クライアントが認証要件を自動的に検出できるようになります。
この機能を有効にするには、次のプロパティーを設定します。
quarkus.oidc.resource-metadata.enabled=true
メタデータエンドポイントはデフォルトでは無効になっています。認可サーバー情報をパブリッククライアントに公開すると、機密のセキュリティー情報が漏洩する可能性があるためです。この機能は、クライアント検出の要件が、潜在的なセキュリティー上の影響よりも重要である場合にのみ有効にしてください。
詳細は、「Quarkus OpenId Connect (OIDC) Expanded Configuration Reference」ガイドの Protected Resource Metadata セクションを参照してください。
1.3.5.6. OIDC: リクエストとレスポンス本文のカスタマイズをサポート リンクのコピーリンクがクリップボードにコピーされました!
今回のリリースでは、Quarkus OIDC エクステンション (quarkus-oidc) が、OIDC フィルター内のリクエストボディーとレスポンスボディーのカスタマイズをサポートしています。この機能を使用すると、OIDC 認証およびトークン交換データを変更できます。
OIDC リクエストまたはレスポンスをカスタマイズするには、以下を実行します。
-
OidcRequestFilterまたはOidcResponseFilterを実装するクラスを作成します。 -
@OidcEndpointアノテーションを使用して、Type.TOKEN、Type.USERINFO、Type.INTROSPECTIONなどの特定のエンドポイントをターゲットにします。 -
データをカスタマイズするには、
filter()メソッドを実装します。
以下に例を示します。
@OidcEndpoint(value = Type.TOKEN)
public class TokenRequestFilter implements OidcRequestFilter {
@Override
public void filter(OidcRequestContext rc) {
rc.requestBody(Buffer.buffer(rc.requestBody().toString() +
"&custom_param=custom_value"));
}
}
OIDC フィルターを使用すると、カスタムパラメーターの追加、ヘッダーの変更、レスポンス形式の変換、検証ロジックの実装が可能になります。
詳細は、以下の資料を参照してください。
- 「OpenID Connect (OIDC) 認証」ガイドの OIDC リクエスト フィルターのセクション
- 「OpenID Connect (OIDC) クライアントとトークンの伝播ガイドの OIDC リクエストフィルター と OIDC レスポンスフィルター のセクション
- Quarkus の「OpenID Connect (OIDC) と OAuth2 の動的クライアント登録」ガイドの OIDC リクエストフィルター と OIDC レスポンスフィルター のセクション
1.3.5.7. VertX HTTP: パス固有の認可のための Fluent API リンクのコピーリンクがクリップボードにコピーされました!
今回のリリースでは、Quarkus VertX HTTP (quarkus-vertx-http) エクステンションを使用することで、Fluent API を使用してプログラムによってパス固有の認可を設定できます。この API は、io.quarkus.vertx.http.security.HttpSecurity CDI イベントを使用し、設定プロパティーの代替としてより柔軟な手段を提供します。
この機能は テクノロジープレビュー として利用できます。
以前は、開発者はパス固有の認可を設定するには設定プロパティーを使用する必要がありました。これは詳細すぎて、複雑なアプリケーションでは管理が困難になる可能性がありました。新しい Fluent API を使用すると、Java コードで直接認可ルールを定義できるため、セキュリティー設定の保守性が向上し、より動的になります。このアプローチは、認可要件が複雑なアプリケーションや、実行時の条件に基づいて権限を設定する必要があるアプリケーションに特に役立ちます。
例: Fluent API を使用したパス固有の認可の設定
package org.acme.http.security;
import io.quarkus.vertx.http.security.HttpSecurity;
import jakarta.enterprise.event.Observes;
public class HttpSecurityConfiguration {
void configure(@Observes HttpSecurity httpSecurity) {
httpSecurity
.get("/public/*").permit()
.path("/roles-secured/*", "/other/*", "/api/*").roles("admin", "user")
.path("/forbidden").authorization().deny();
}
}
さらに、Fluent API では、さまざまなパスに対して特定の認証メカニズムとカスタムセキュリティーポリシーを設定できます。Basic 認証、ベアラートークン、認可コードフローなどの認証方法を、ロールベースのアクセス制御や権限チェックカスタム認可ポリシーと組み合わせることができます。
詳細は、「Web エンドポイントの認可」ガイドの パス固有の認可をプログラムでセットアップする セクションを参照してください。
1.3.6. ツール リンクのコピーリンクがクリップボードにコピーされました!
1.3.6.1. Dev UI: 基本的なワークスペース機能 リンクのコピーリンクがクリップボードにコピーされました!
今回のリリースでは、Dev UI に基本的なワークスペース機能が導入されています。
開発モードでは、Dev UI でプロジェクトのソースファイルを直接参照および編集できます。
詳細は、以下の資料を参照してください。
1.3.6.2. Dev Services: Compose のサポート リンクのコピーリンクがクリップボードにコピーされました!
今回のリリースでは、Dev Services に Compose のサポートが追加されています。
この機能により、開発者は Docker または Podman で Compose 記述を使用して Dev Services 用カスタムコンテナーの定義およびオーケストレーションを行うことができ、Dev Services フレームワークによってサービスの起動、設定、ライフサイクルが自動的に管理されます。
詳細は、以下の資料を参照してください。
1.3.6.3. テストインフラストラクチャー: テストクラスの読み込みの改善 リンクのコピーリンクがクリップボードにコピーされました!
今回のリリースでは、Quarkus のテストクラスの読み込みインフラストラクチャーが改善されます。この機能拡張により、さまざまな環境でのテスト実行の信頼性と一貫性が向上します。
詳細は、GitHub Pull Request #34681 を参照してください。
1.3.7. Web リンクのコピーリンクがクリップボードにコピーされました!
1.3.7.1. SmallRye GraphQL: 仮想スレッドのサポート リンクのコピーリンクがクリップボードにコピーされました!
現在のリリースでは、SmallRye GraphQL は Java 仮想スレッドでの操作の実行をサポートしています。ブロッキング操作に @RunOnVirtualThread のアノテーションを付け、プラットフォームスレッドを管理せずに仮想スレッドで実行します。ブロッキング操作には @RunOnVirtualThread を使用し、@Blocking または @NonBlocking と組み合わせないようにしてください。仮想スレッドは、コードのシンプルに保ち、ワーカースレッドと比較して同時実行性を高めることができます。リアクティブモデルは、最もリソース効率が高く、非常に高い同時実行性を確保します。
詳細は、以下の資料を参照してください。
1.4. サポートおよび互換性 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Quarkus 3.27 と互換性のあるサポートされる構成とアーティファクトの詳細、およびサポートライフサイクルポリシーの概要は、次の Red Hat カスタマーサポートポータルで参照できます。
- サポートされる構成、OpenJDK バージョン、およびテスト済みインテグレーションのリストは、Red Hat build of Quarkus でサポートされる構成 を参照してください。
- Red Hat build of Quarkus でサポートされている Maven アーティファクト、エクステンション、BOM のリストは、Red Hat build of Quarkus コンポーネントの詳細 を参照してください。
- すべての Red Hat 製品の一般提供、フルサポート、およびメンテナンスサポートの日付は、Red Hat Application Services 製品のアップデートとサポートポリシー を参照してください。
1.4.1. 製品の更新とサポートライフサイクルポリシー リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Quarkus では、機能リリースはメジャーリリースまたはマイナーリリースのいずれかになります。
- メジャーリリースでは、新しい機能が導入され、最低 3 年間のサポートライフサイクル (フルサポートとメンテナンスサポート) が適用されます。
- マイナーリリースでは、以前のリリースとの互換性に影響を与えない新しい機能や変更 (重大な変更) が導入されます。最新のマイナーバージョンは完全にサポートされ、新しいマイナーバージョンがリリースされてから 6 カ月間、以前のバージョンはメンテナンスサポートの対象となります。
詳細は、Red Hat ライフサイクルおよびサポートポリシー を参照してください。
Red Hat build of Quarkus リリースのバージョン番号は、Quarkus コミュニティープロジェクト の長期サポート (LTS) バージョンと直接一致しています。詳細は、ブログ記事 Long-Term Support (LTS) for Quarkus を参照してください。
Red Hat build of Quarkus 機能リリースのバージョン番号は、ベースとなる Quarkus コミュニティーのバージョンと一致します。
Red Hat は、コミュニティーがリリースするすべてのバージョンに対して、Quarkus の製品版をリリースするわけではありません。Red Hat build of Quarkus 機能リリースの頻度は、約 6 カ月ごとです。
Red Hat build of Quarkus は、後続のバージョンのリリースまで、機能リリースの完全なサポートを提供します。機能リリースが新しいバージョンに置き換えられた場合、Red Hat は、以下のサポートライフサイクルチャート [図 1] に示すように、そのリリースに対してさらに 6 カ月間のメンテナンスサポートを提供し続けます。
図1.1 図 1 Red Hat build of Quarkus の機能リリースの頻度とサポートライフサイクル
リリースのフルサポートフェーズとメンテナンスサポートフェーズの期間中、Red Hat はバグや Common Vulnerabilities and Exposures (CVE) を修正するための 'service-pack (SP)' 更新と 'マイクロ' リリースも提供します。
Red Hat build of Quarkus の後続の機能リリースの新機能により、基盤となるテクノロジーまたはプラットフォームの依存関係に機能拡張、革新、および変更が導入される可能性があります。後続の機能リリースにおける新機能または変更点の詳細は、新機能、機能拡張、および技術的な変更 を参照してください。
Red Hat build of Quarkus のほとんどの機能は、最新リリースにアップグレードした後も期待どおりに動作し続けますが、特定のシナリオでは、既存のアプリケーションを変更したり、環境や依存関係に追加の設定を実行したりすることが必要になる場合があります。したがって、Red Hat build of Quarkus を最新リリースにアップグレードする前に、必ずリリースノートの 以前のバージョンとの互換性に影響を与える変更 および 非推奨のコンポーネントおよび機能 のセクションを確認してください。
Red Hat build of Quarkus の製品ライフサイクル、タイムライン、サポートポリシーの詳細は、Red Hat カスタマーポータルにログインし、ナレッジベースの記事である Red Hat build of Quarkus のライフサイクルとサポートポリシー を参照してください。
1.4.2. テスト済みおよび検証済みの環境 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Quarkus 3.27 は、Red Hat OpenShift Container Platform のバージョン 4.19、4.12 および Red Hat Enterprise Linux 8.10 で利用できます。
サポートされる構成のリストは、Red Hat カスタマーポータルにログインし、ナレッジベースのソリューション記事 Red Hat build of Quarkus でサポートされる構成 を参照してください。
1.4.3. 開発サポート リンクのコピーリンクがクリップボードにコピーされました!
Red Hat は、以下の Red Hat build of Quarkus の機能、プラグイン、エクステンション、および依存関係の 開発サポート を提供します。
機能
- 継続的テスト
- Dev Services
- Dev UI
- ローカル開発モード
- リモート開発モード
プラグイン
- Maven Protocol Buffers プラグイン
1.4.3.1. 開発ツール リンクのコピーリンクがクリップボードにコピーされました!
Red Hat は、Quarkus CLI、Maven および Gradle プラグインなどの Quarkus 開発ツールを使用して、Red Hat build of Quarkus アプリケーションのプロトタイプを作成、開発、テスト、デプロイするための 開発サポート を提供します。
Red Hat は、実稼働環境での Quarkus 開発ツールの使用をサポートしていません。詳細は、Red Hat ナレッジベースの記事 Development Support Scope of Coverage を参照してください。
1.5. 非推奨のコンポーネントおよび機能 リンクのコピーリンクがクリップボードにコピーされました!
このセクションにリストされているコンポーネントと機能は、Red Hat build of Quarkus 3.27 では非推奨になっているか、非推奨になっているコンポーネントと機能を含んでいます。これらはこのリリースに含まれており、サポートされています。ただし、これらのコンポーネントと機能は拡張されず、今後削除される可能性があります。
このリリースで非推奨となったコンポーネントと機能のリストは、Red Hat カスタマーポータルにログインし、Red Hat build of Quarkus コンポーネントの詳細 ページを参照してください。
1.6. テクノロジープレビュー リンクのコピーリンクがクリップボードにコピーされました!
このセクションには、Red Hat build of Quarkus 3.27 でテクノロジープレビューとして使用できるようになった機能とエクステンションを記載しています。
テクノロジープレビュー機能は、Red Hat 製品サポートのサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではない可能性があるため、Red Hat では実稼働環境での使用を推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat テクノロジープレビュー機能の範囲の詳細は、テクノロジープレビュー を参照してください。
1.6.1. 新しいテクノロジープレビュー機能 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Quarkus 3.27 では、次のテクノロジープレビュー機能が導入されています。
1.6.2. 継続中のテクノロジープレビュー機能 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Quarkus 3.27 では、以前のバージョンで導入された次のテクノロジープレビュー機能が引き続き提供されます。
Red Hat build of Quarkus 3.20:
Red Hat build of Quarkus 3.15:
1.7. 以前のバージョンとの互換性に影響を与える変更 リンクのコピーリンクがクリップボードにコピーされました!
このセクションでは、以前の製品バージョンでビルドされたアプリケーションの互換性に影響を与える、Red Hat build of Quarkus 3.27 の変更点を説明します。
これらの重大な変更を確認し、アプリケーションを Red Hat build of Quarkus 3.27 に更新した後も、アプリケーションが引き続き機能するように必要な手順を実行してください。
アプリケーションプロジェクトを Red Hat build of Quarkus 3.27 に更新するには、Red Hat build of Quarkus 3.27 へのアプリケーションの移行 ガイドを参照してください。
1.7.1. 互換性 リンクのコピーリンクがクリップボードにコピーされました!
1.7.1.1. トランザクション: QuarkusTransaction.isActive() が非推奨になりました リンクのコピーリンクがクリップボードにコピーされました!
今回のリリースでは、QuarkusTransaction.isActive() メソッドが非推奨になりました。
このメソッドの動作は曖昧であり、トランザクションの状態を確実に示すものではありません。
現在のトランザクションステータスを確認するには、getStatus() メソッドを使用してください。正常な動作を確保するために、既存の isActive() の使用をすべて getStatus() に更新してください。
この変更を適用するには、このリリースノートに記載されている追加の手順を手動で実行します。Red Hat build of Quarkus 3.27 へのアプリケーションの移行ガイド の自動更新プロセスには、この変更は含まれません。
詳細は、Quarkus の Migration guide 3.22 を参照してください。
1.7.2. コア リンクのコピーリンクがクリップボードにコピーされました!
1.7.2.1. 設定: レガシー設定クラスが削除されました リンクのコピーリンクがクリップボードにコピーされました!
今回のリリースでは、Quarkus はレガシー設定クラスのサポートを削除しました。レガシー設定クラスに基づいてビルドされたカスタムエクステンションを含め、エクステンションに依存するアプリケーションは、ビルドに失敗します。
影響を受けるエクステンションは、@io.smallrye.config.ConfigMapping を使用するバージョンに更新してください。または、カスタムエクステンションをそれに合わせて移行してください。
たとえば、互換性クラス GlobalDevServicesConfig は DevServicesConfig に置き換えます。
この変更を適用するには、このリリースノートに記載されている追加の手順を手動で実行します。Red Hat build of Quarkus 3.27 へのアプリケーションの移行ガイド の自動更新プロセスには、この変更は含まれません。
詳細は、以下の資料を参照してください。
1.7.2.2. 設定: 設定プロパティーで .enable の代わりに .enabled を使用する リンクのコピーリンクがクリップボードにコピーされました!
今回のリリースでは、設定内の機能トグルが .enable ではなく .enabled 接尾辞を使用します。この変更により、設定プロパティー間の一貫性が向上し、接尾辞の混在が防止されます。古い .enable プロパティーは下位互換性のために引き続き認識されますが、非推奨です。
設定を自動的に移行するには、quarkus update を実行してください。手動で更新する場合は、非推奨の警告を回避するために、quarkus.log.console.enable などのキーの名前を quarkus.log.console.enabled に変更してください。名前付きログハンドラーも同じルールに従い、quarkus.log.handler.*."handler-name".enabled を使用します。
例1.1 影響を受けるプロパティーは次のとおりです。
-
quarkus.keycloak.policy-enforcer.enable→quarkus.keycloak.policy-enforcer.enabled -
quarkus.log.console.enable→quarkus.log.console.enabled -
quarkus.log.console.async.enable→quarkus.log.console.async.enabled -
quarkus.log.file.enable→quarkus.log.file.enabled -
quarkus.log.file.async.enable→quarkus.log.file.async.enabled -
quarkus.log.syslog.enable→quarkus.log.syslog.enabled -
quarkus.log.syslog.async.enable→quarkus.log.syslog.async.enabled -
quarkus.log.socket.enable→quarkus.log.socket.enabled -
quarkus.log.socket.async.enable→quarkus.log.socket.async.enabled -
quarkus.snapstart.enable→quarkus.snapstart.enabled -
quarkus.smallrye-health.ui.enable→quarkus.smallrye-health.ui.enabled -
quarkus.smallrye-graphql.ui.enable→quarkus.smallrye-graphql.ui.enabled -
quarkus.smallrye-openapi.enable→quarkus.smallrye-openapi.enabled -
quarkus.swagger-ui.enable→quarkus.swagger-ui.enabled
この変更を適用するには、Red Hat build of Quarkus 3.27 へのアプリケーションの移行 ガイドで説明されている自動更新プロセスを実行します。
詳細は、Quarkus の Migration guide 3.26: `.enable` to `.enabled` in configuration properties を参照してください。
1.7.2.3. JGit: quarkus-bom から依存関係が削除されました リンクのコピーリンクがクリップボードにコピーされました!
今回のリリースでは、org.eclipse.jgit 依存関係が quarkus-bom で管理されなくなりました。
現在、アプリケーションが JGit に依存している場合は、ネイティブイメージの互換性を確保し、互換性のあるライブラリーバージョンを使用するために、依存関係に quarkus-jgit エクステンションを追加してください。
quarkus-jgit エクステンションは Red Hat build of Quarkus ではサポートされていません。
この変更を適用するには、このリリースノートに記載されている追加の手順を手動で実行します。Red Hat build of Quarkus 3.27 へのアプリケーションの移行ガイド の自動更新プロセスには、この変更は含まれません。
詳細は、Quarkus の Migration guide 3.22 を参照してください。
1.7.2.4. JSON-RPC: エクステンションは常に JsonRPCProvidersBuildItem を生成する必要があります リンクのコピーリンクがクリップボードにコピーされました!
今回のリリースでは、ビルドモードに関係なく、JsonRPCProvidersBuildItem を生成する必要があります。
以前は、ほとんどのエクステンションが @BuildStep(onlyIf = IsDevelopment.class) を使用して、開発モードでのみこのビルド項目を生成していました。
現在は、JSON-RPC クラスで実行モデルの検証を有効にするために、ビルド時にビルドプロセスでこの項目が必要になります。
ビルドプロセスでは、この項目を使用して JSON-RPC エンドポイント、特に @Blocking、@NonBlocking、@RunOnVirtualThread などのアノテーションを使用するクラスを識別します。
移行するには、条件付きビルドステップを次のように置き換えます。
以前使用していたコード:
@BuildStep(onlyIf = IsDevelopment.class) JsonRPCProvidersBuildItem createJsonRPCService() { return new JsonRPCProvidersBuildItem(...); }更新後のコード:
@BuildStep JsonRPCProvidersBuildItem createJsonRPCService() { return new JsonRPCProvidersBuildItem(...); }
Quarkus は以前 JSON-RPC クラス用のフォールバック検出メカニズムを提供していました。今回のリリースではこのメカニズムは削除されています。
この変更を適用するには、このリリースノートに記載されている追加の手順を手動で実行します。Red Hat build of Quarkus 3.27 へのアプリケーションの移行ガイド の自動更新プロセスには、この変更は含まれません。
詳細は、Quarkus の Migration guide 3.22: extensions must produce JsonRPCProvidersBuildItem always を参照してください。
1.7.2.5. Stork: REST クライアントによる管理の終了 リンクのコピーリンクがクリップボードにコピーされました!
今回のリリースでは、Stork が REST クライアントの組み込み依存関係ではなくなりました。
現在は、REST クライアントで Stork を使用するには、プロジェクトの依存関係に quarkus-stork エクステンションを追加する必要があります。
この変更を適用するには、このリリースノートに記載されている追加の手順を手動で実行します。Red Hat build of Quarkus 3.27 へのアプリケーションの移行ガイド の自動更新プロセスには、この変更は含まれません。
詳細は、Quarkus の Migration guide 3.22 を参照してください。
1.7.2.6. テスト用の native-image-profile 設定プロパティーが削除されました リンクのコピーリンクがクリップボードにコピーされました!
互換性に影響する変更: 今回のリリースでは、長い間非推奨となっていた quarkus.test.native-image-profile 設定プロパティーが削除されました。削除されたプロパティーをまだ使用している設定がある場合は、代わりに最新の quarkus.test.integration-test-profile プロパティーを使用するようにその設定を更新してください。
quarkus.test.integration-test-profile プロパティーは、@QuarkusIntegrationTest を使用してテストを実行するときに使用する設定プロファイルを指定します。
- 型: 文字列
-
デフォルト値:
prod -
環境変数:
QUARKUS_TEST_INTEGRATION_TEST_PROFILE - 設定タイミング: ビルド時に固定
この変更を適用するには、このリリースノートに記載されている追加の手順を手動で実行します。Red Hat build of Quarkus 3.27 へのアプリケーションの移行ガイド の自動更新プロセスには、この変更は含まれません。
1.7.3. データ リンクのコピーリンクがクリップボードにコピーされました!
1.7.3.1. Apache Derby データベースサポートの削除 リンクのコピーリンクがクリップボードにコピーされました!
現在のリリースでは、Apache Derby データベースのサポートは Red Hat build of Quarkus から削除されました。
Apache Derby は以前のリリースで非推奨となり、現在は完全に削除されました。Derby を使用するアプリケーションは、サポートされる構成 に記載されている別のデータベース、PostgreSQL、MySQL、MariaDB などのサポート対象のデータベースに移行する必要があります。
アプリケーションが現在 Derby を使用している場合は、以下が必要になります。
- アプリケーション依存関係を更新して Derby JDBC ドライバーを削除する
-
application.propertiesまたはapplication.yamlを更新して、別のデータベースを設定する - 既存の Derby データベーススキーマとデータを新しいデータベースに移行する
Red Hat build of Quarkus でのデータソースの設定に関する詳細は、データソースの設定 を参照してください。
この変更を適用するには、このリリースノートに記載されている追加の手順を手動で実行します。Red Hat build of Quarkus 3.27 へのアプリケーションの移行ガイド の自動更新プロセスには、この変更は含まれません。
1.7.3.2. Dev Services のデフォルトイメージの更新 リンクのコピーリンクがクリップボードにコピーされました!
今回のリリースでは、以下の Dev Services のデフォルトイメージが以下のバージョンに更新されました。
- Elasticsearch バージョン 9.1
- OpenSearch バージョン 3.1
互換性に影響する変更: アプリケーションでこれらのイメージの特定のバージョンが必要な場合は、コンテナーイメージを明示的に設定する必要があります。以下に例を示します。
quarkus.elasticsearch.devservices.image-name=docker.io/elastic/elasticsearch:9.1.3
この変更を適用するには、このリリースノートに記載されている追加の手順を手動で実行します。Red Hat build of Quarkus 3.27 へのアプリケーションの移行ガイド の自動更新プロセスには、この変更は含まれません。
詳細は、Quarkus の「Dev Services for Elasticsearch」ガイドの Configuring the image セクションを参照してください。
1.7.3.3. Hibernate ORM: データベースのバージョンチェック リンクのコピーリンクがクリップボードにコピーされました!
今回のリリースでは、Hibernate ORM によってデータベースのバージョンチェックが改善されています。
このチェックは以前のリリースでもすでに適用されていました。この更新により、バージョン検出の精度が向上し、起動時に実行されるチェックの範囲が拡大されました。
アプリケーションの起動時にバージョンチェックに失敗した場合は、ダイアレクトに合わせて正しいデータベースバージョンを設定するか、データベースをサポートされているバージョンにアップグレードしてください。
CockroachDialect を使用する場合は、アプリケーションが接続するサーバーに合わせて (PostgreSQL バージョンではなく) CockroachDB バージョンを設定します。
この変更を適用するには、このリリースノートに記載されている追加の手順を手動で実行します。Red Hat build of Quarkus 3.27 へのアプリケーションの移行ガイド の自動更新プロセスには、この変更は含まれません。
詳細は、Quarkus の Migration guide 3.25 を参照してください。
1.7.3.4. Hibernate ORM: スキーマ管理設定プロパティーの名前が変更されました リンクのコピーリンクがクリップボードにコピーされました!
現在のリリースでは、YAML 設定を簡素化し、今後の変更に備えるために、次の Hibernate ORM (quarkus-hibernate-orm) エクステンションプロパティーの名前が変更されました。
古いプロパティーは現在のリリースでは認識されたままですが、非推奨となっており、今後のリリースでは削除される予定です。
現在のリリースにアップグレードするときに、新しいプロパティーを使用します。
| 以前のプロパティー名 | 新しいプロパティー名 |
|---|---|
| quarkus.hibernate-orm.database.generation | quarkus.hibernate-orm.schema-management.strategy |
| quarkus.hibernate-orm.database.generation.create-schemas | quarkus.hibernate-orm.schema-management.create-schemas |
| quarkus.hibernate-orm.database.generation.halt-on-error | quarkus.hibernate-orm.schema-management.halt-on-error |
この変更を適用するには、Red Hat build of Quarkus 3.27 へのアプリケーションの移行 ガイドで説明されている自動更新プロセスを実行します。
1.7.3.5. Hibernate ORM のバージョン 7.1 へのアップグレード リンクのコピーリンクがクリップボードにコピーされました!
現在のリリースでは、Hibernate ORM がバージョン 7.1 にアップグレードされました。このアップグレードでは、アプリケーションに影響を及ぼす可能性のある重大な変更が導入されます。
API の変更
非推奨の
Sessionメソッドは削除されたか、JPA の同等のメソッドに置き換えられました。"Automatic" とマークされた変更を適用するには、Red Hat build of Quarkus 3.27 へのアプリケーションの移行 ガイドに記載されている自動更新プロセスを実行します。それ以外の場合は、追加の手順を手動で実行します。
Expand 非推奨の SessionメソッドJPA と同等の新規メソッド 更新プロセス ロックオプションなしの load(…)
getReference(…)
Automatic
get(…)
find(…)
Automatic
delete(…)
remove(…)
Automatic
save(…)
persist(…)
Automatic
update(…)
merge(…)
Manual
ロックオプション付きの load(…)
find(…)
Manual
saveOrUpdate(…)
persist (新規エンティティー) / merge (永続化、その後デタッチされたエンティティー)
Manual
注記updateメソッドからmergeメソッドに移行する場合は、次の違いに注意してください。-
mergeは、永続コンテキストにアタッチされたエンティティーインスタンスを返します。そのエンティティーを使用し、引数として渡されたエンティティーを破棄するようにしてください。 -
適切なマージを確実に行うために、
mergeはエンティティーをロードできます。複数のエンティティーに対して連続してmergeを使用すると、N+1の select の問題が発生する可能性があります。この問題を回避するには、Session#findMultipleなどを使用して、merge呼び出しの前にセッション内の全エンティティーをロードします。
この変更を適用するには、このリリースノートに記載されている追加の手順を手動で実行します。
詳細は、Hibernate ORM Defer to JPA を参照してください。
-
- 非推奨のアノテーションは削除されたか、JPA の同等のものに置き換えられました。影響を受けるアノテーションを表示するには、Hibernate ORM Annotations を参照してください。
@CascadeとCascadeTypeは非推奨となり、@OneToMany(cascade = …)などの JPA の同等の機能に置き換えられました。この変更を適用するには、Red Hat build of Quarkus 3.27 へのアプリケーションの移行 ガイドで説明されている自動更新プロセスを実行します。
-
プロキシーのカスタマイズが変更されました。
@Proxyを使用していた場合は、代わりに@ConcreteProxyを検討するか、Session#getReferenceまたはHibernate#unproxyメソッドを使用してください。詳細は、Hibernate ORM Replace @Proxy を参照してください。 -
org.hibernate.Metamodelは削除され、org.hibernate.metamodel.model.domain.JpaMetamodelに置き換えられました。 -
UserTypeおよびCompositeTypeメソッドシグネチャーが変更され、内部タイプまたはサービスプロバイダーインターフェイス (SPI) タイプを参照しなくなりました。詳細は、Hibernate ORM UserType および CompositeUserType の変更 を参照してください。 -
さまざまな JDBC タイプが内部パッケージに移動されました。属性をこれらのタイプにマップするには、
@JdbcTypeではなく@JdbcTypeCodeを使用します。 -
LockOptionsクラスは非推奨になりました。影響を受けるメソッドにはLockModeを使用する代わりの手段があります。LockOptionsクラスのいくつかの非推奨機能も削除されました。詳細は、Hibernate ORM LockOptions を参照してください。 -
Session#getLobHelperメソッドは非推奨です。代わりにHibernate#getLobHelperを使用してください。詳細は、Hibernate ORMSession#getLobHelperを参照してください。
動作の変更
より厳格なアノテーション検証
不適切に配置されたマッピングアノテーションは無視されるのではなく、例外を発生させるようになりました。例としては、同じ属性に対する
@Basicアノテーションと@ManyToOneアノテーションの競合や、@Idおよび@Versionに対する属性コンバーターの使用などが挙げられます。詳細は、Hibernate ORM Domain model validations を参照してください。2 次キャッシュの使用
StatelessSessionは、デフォルトで 2 次キャッシュを使用するようになりました。この変更は、2 次キャッシュとStatelessSessionを使用するアプリケーションの移行に影響します。詳細は、Hibernate ORM StatelessSession and second-Level cache を参照してください。バッチ操作の変更
StatelessSessionはquarkus.hibernate-orm.jdbc.statement-batch-size設定を反映しません。StatelessSession操作は即時実行の設計になっているため、暗黙的なバッチ操作は必要ありません。代わりに、'insertMultiple()' などの明示的なバッチ操作を使用できます。詳細は、Hibernate ORM StatelessSession and JDBC batching を参照してください。クエリー検証
あいまいなクエリー文字列は受け入れられなくなりました。これは主に、クラスを
Session#createQueryに渡さない場合、または Panache を使用してクエリーを作成する場合に、type-unsafeクエリーに影響します。select句がなく、フェッチ以外のjoinを含むクエリーでは、意図した動作を指定する必要があります。詳細は、Query with implicit SELECT and no explicit result type を参照してください。ネイティブクエリーによって返される日付と時刻の値の型が変更されました。
以前は、ネイティブクエリーによって返される日付と時刻の型を表すために
java.sql型が使用されていました。現在、ネイティブクエリーは、特定の型指示がない場合にjava.time型を返します。詳細は、Hibernate ORM Temporal types returned by native queries を参照してください。
最小データベースバージョン
最低限必要なデータベースバージョンは、それぞれのベンダーがまだサポートしている最も古いバージョンを使用するように更新されました。
特に、次の更新に注意してください。
- IBM DB2: 最小バージョンが 10.5 から 11.1 に更新されました
- MariaDB: 最小バージョンが 10.4 から 10.6 に更新されました
- Microsoft SQL Server: 最小バージョンが 11.0 (2012) から 12.0 (2014) に更新されました
PostgreSQL: 最小バージョンが 12.0 から 13.0 に更新されました
現在の最小バージョンの詳細は、Hibernate ORM Supported dialects を参照してください。
MySQL/MariaDB ストレージエンジン
quarkus.hibernate-orm.dialect.storage-engineを使用して MySQL/MariaDB ストレージエンジンを設定することは非推奨になりました。代わりにquarkus.hibernate-orm.dialect.mariadb.storage-engine=…またはquarkus.hibernate-orm.dialect.mysql.storage-engine=…を使用してください。DDL/スキーマの変更
- 特に H2 データベースでは、引用符の使用を避けるためにカスタムデータベース初期化スクリプトを変更する必要がある場合があります。
-
基本配列は、バイナリーデータとしてシリアル化されるのではなく、データベース内の適切な配列構造にマップされるようになりました。
quarkus.hibernate-orm.unsupported-properties."hibernate.type.preferred_array_jdbc_type"をVARBINARYに設定して、この動作を元に戻すことができます。それ以外の場合、エンティティーマッピングに配列が含まれている場合は、データベーススキーマの更新とデータの手動更新が必要になります。詳細は、Hibernate ORM Array mapping changes を参照してください。 -
char/Character属性はchar(1)ではなくvarchar(1)にマップされるようになりました。 - Oracle と Microsoft SQL Server では、タイムスタンプ属性のデフォルトの 1 秒未満の精度が異なります。
-
Oracle では、
floatとdouble属性はfloat(p)、real、またはdoubleの精度を指定できる型ではなく、binary_floatおよびbinary_doubleにマップされます。詳細は、Hibernate ORM Changes affecting DDL を参照してください。
アノテーションプロセッサーの変更
-
Hibernate ORM アノテーションプロセッサーの Maven アーティファクトが
org.hibernate.orm:hibernate-jpamodelgenからorg.hibernate.orm:hibernate-processorに変更されました。Maven で、annotationProcessorPathを更新します。 アノテーションプロセッサー
org.hibernate.jpamodelgen.JPAMetaModelEntityProcessorは非推奨となり、代わりにorg.hibernate.processor.HibernateProcessorが推奨されます。この変更を適用するには、Red Hat build of Quarkus 3.27 へのアプリケーションの移行 ガイドで説明されている自動更新プロセスを実行します。
-
Hibernate ORM アノテーションプロセッサーの Maven アーティファクトが
Hibernate ORM コンポーネントのコンテキストと依存性注入 (CDI) の制限
CDI が初期化される前に取得される可能性のある一部のプラグ可能なコンポーネントは、CDI Bean として使用できなくなります。
このようなコンポーネントのカスタム実装を提供する必要があり、その実装内で CDI にアクセスする必要がある場合は、
Arc.container().instance(OtherBean.class).get()を使用して他の Bean を取得することを検討してください。影響を受けるコンポーネントのリストは、移行ガイド 3.24 を参照してください。
JSON/XML マッピング
以前は、データベース内の JSON/XML シリアル化のための Hibernate ORM の「フォーマットマッパー」は、デフォルトでグローバル REST レイヤーシリアル化設定に依存していました。
現在では、データベース形式の安定性を確保し、不要な移行を防ぐために、データベース層と REST 層のシリアル化を分離することが推奨されています。ただし、これが理由で次の条件が満たされた場合、現在のリリースはデフォルトで失敗します。
- アプリケーションには、データベースに保存された XML または JSON を含む Hibernate マッピングがある。
- REST レイヤーの XML または JSON シリアル化設定がカスタマイズされる。
この問題が発生した場合は、データベースのシリアル化設定を更新できます。
Jackson ベースの JSON シリアル化
アプリケーションに適用された
ObjectMapperのカスタマイズがデータベースに保存されている JSON の形式に影響を与えない場合は、quarkus.hibernate-orm.mapping.format.global=ignoreを指定してそのObjectMapperをバイパスします。それ以外の場合は、カスタム
FormatMapperBean を実装します。まず、フォーマットマッパーをグローバル REST レイヤーのシリアル化に委任します。詳細は、移行ガイド 3.26 および Quarkus の「Hibernate ORM と Jakarta Persistence の使用」ガイドの JSON/XML シリアル化/デシリアル化のカスタマイズ セクションを参照してください。
次に、以下のいずれかのアクションを実行します。
-
グローバルに設定された
ObjectMapperに依存し、REST レイヤーのシリアル化のニーズに依存する場合は、この委任形式マッパーを引き続き使用します。 -
JSON データを更新するための移行スクリプトを準備してテストします。Hibernate ORM のデフォルトの形式を使用することも、要件に応じて
FormatMapper実装を調整して JSON をフォーマットすることもできます。
-
グローバルに設定された
JSON-B ベースの JSON シリアル化
このシナリオは、Jackson ベースのマッパーのシナリオと同じです。詳細は、Migration guide 3.26 を参照してください。
JAXB ベースの XML シリアライゼーション
Hibernate ORM 7.0 での XML シリアル化形式の変更も影響があります。Quarkus に組み込まれている JAXB ベースの XML 形式マッパーは従来の形式を使用しますが、
quarkus.hibernate-orm.mapping.format.global=ignoreを使用して削除またはバイパスすると、形式の互換性がなくなります。(影響を) 軽減するには、Hibernate ORM のマッパーに委譲するマッパーを作成します。詳細は、Migration guide 3.26 を参照してください。
次に、以下のいずれかのアクションを実行します。
- 従来の形式に依存する場合は、この委任形式マッパーを引き続き使用してください。
-
XML データを更新するための移行スクリプトを準備してテストします。Hibernate ORM のデフォルトの形式を使用することも、要件に応じて
FormatMapper実装を調整して XML をフォーマットすることもできます。
この変更を適用するには、このリリースノートに記載されている追加の手順を手動で実行します。Red Hat build of Quarkus 3.27 へのアプリケーションの移行ガイド の自動更新プロセスには、この変更は含まれません。
詳細は、以下の資料を参照してください。
1.7.3.6. Hibernate Reactive: データベースのバージョンチェック リンクのコピーリンクがクリップボードにコピーされました!
今回のリリースでは、Hibernate Reactive が起動時にデータベースのバージョンを検証します。
この変更により、サポートされているデータベースとの互換性が確保され、サポートされていないバージョンや互換性のないバージョンに対してアプリケーションが実行されることが防止されます。
アプリケーションが Hibernate Reactive の要件を満たさないデータベースバージョンに接続すると、起動が失敗し、明確なエラーメッセージが表示されます。
この問題を解決するには、データベースをサポートされているバージョンにアップグレードするか、状況に合わせて設定を調整してください。
詳細は、Quarkus の Migration guide 3.25 を参照してください。
1.7.3.7. Hibernate Reactive のバージョン 3.1 へのアップグレード リンクのコピーリンクがクリップボードにコピーされました!
現在のリリースでは、Hibernate Reactive がバージョン 3.1 にアップグレードされました。
Hibernate Reactive 3.1 は、ほとんどのアプリケーションで 3.0 との互換性を維持していますが、Hibernate ORM にに加えられた重大な変更を引き継いでおり、影響が生じる場合があります。
Hibernate ORM の重大な変更の詳細は、Hibernate ORM: バージョン 7.1 へのアップグレード リリースノートを参照してください。
次の Hibernate Reactive の重大な変更も導入されています。
API の変更
ReactiveIdentifierGeneratorAPI が更新され、org.hibernate.generator.Generatorを継承するようになりました。これにより、追加のメソッドが必要です。この変更は、
@GenericGeneratorアノテーションを使用してカスタムの識別子ジェネレーターを定義し、独自のジェネレータークラスを実装するユーザーに影響します。新しい API を実装するには、
@GenericGeneratorで定義されているカスタム識別子ジェネレーターを更新します。Generatorインターフェイスで、次のメソッドを更新します。-
generatedOnExecution(): クエリー実行中に識別子が生成された場合にはtrueを返し、アプリケーションコードで生成された場合にはfalseを返します。 -
getEventTypes():insertまたはupdate操作中に識別子が変更するかどうかを指定します。
-
最小データベースバージョン
quarkus-hibernate-reactiveエクステンションは、サポートされるデータベースの最小バージョンを Hibernate ORM 7.1 方言の要件に合わせています。現在の最小バージョンの詳細は、Hibernate ORM Supported dialects を参照してください。
この変更を適用するには、このリリースノートに記載されている追加の手順を手動で実行します。Red Hat build of Quarkus 3.27 へのアプリケーションの移行ガイド の自動更新プロセスには、この変更は含まれません。
1.7.3.8. Hibernate Search のバージョン 8.1 へのアップグレード リンクのコピーリンクがクリップボードにコピーされました!
現在のリリースでは、Hibernate Search がバージョン 8.1 にアップグレードされました。
8.x バージョンシリーズへのアップグレードにより、アプリケーションに影響を及ぼす可能性のある重大な変更が導入されます。
-
非推奨のクラスは削除され、代わりに推奨されるクラスが使用されます。特に、
org.hibernate.search.mapper.orm.massindexing.MassIndexingMonitorはorg.hibernate.search.mapper.pojo.massindexing.MassIndexingMonitorに置き換えられました。 -
MassIndexingMonitor#addToTotalCountメソッドは非推奨となり、MassIndexingMonitor#typeGroupMonitor(..)に置き換えられました。 -
プロジェクション DSL の
multi()メソッドは非推奨となり、.list()/.set()/sortedSet()/collector(…)に置き換えられました。 -
ログ記録カテゴリーが更新されました。特に、Elasticsearch に送信されるすべてのリクエストをログに記録するために使用される
org.hibernate.search.elasticsearch.requestログカテゴリーの名前がorg.hibernate.search.elasticsearch.client.requestに変更されました。詳細は、使用可能なすべてのログカテゴリーのリスト を参照してください。 -
検索 DSL インターフェイスが拡張され、追加の
SRタイプ引数リファレンスガイドが含まれるようになりました。 - 大量インデックスログの形式が変更され、より多くの情報が凝縮された形式で表示されるようになりました。
-
メトリクス集計
countDistinct()は非推奨となり、count()集計のオプション.count().field(..).distinct()に置き換えられました。
詳細は、以下の資料を参照してください。
1.7.4. メッセージング リンクのコピーリンクがクリップボードにコピーされました!
1.7.4.1. Apache Kafka: クライアントがバージョン 4.0.0 にアップグレードされました リンクのコピーリンクがクリップボードにコピーされました!
現在のリリースでは、quarkus-kafka-client エクステンションで使用される Apache Kafka クライアントアーティファクト kafka-clients がバージョン 4.0.0 にアップグレードされました。
このバージョンでは、次の変更が導入されています。
- ZooKeeper への依存関係が削除されました
- 古いプロトコルまたは API バージョンのサポートが一部削除されました
- 非推奨機能に依存する以前のクライアントやブローカーとの互換性がなくなります
- Quarkus アプリケーションに対する Java バージョン 11 の最小要件が追加されました
- クライアントメトリクスが改善されました
Apache Kafka 3.x ブローカーには引き続き接続できます。削除されたプロトコルバージョンに依存する古いブローカーは互換性がない可能性があります。
詳細は、以下の資料を参照してください。
- Apache Kafka 4.0 ドキュメント
- Quarkus Apache Kafka リファレンスガイド
1.7.5. 可観測性 リンクのコピーリンクがクリップボードにコピーされました!
1.7.5.1. OpenTelemetry: メトリクスの変更 リンクのコピーリンクがクリップボードにコピーされました!
現在のリリースでは、quarkus-opentelemetry エクステンションによって提供される OpenTelemetry メトリクスが変更されました。
OpenTelemetry メトリクスはデフォルトで無効になっています。有効にすると、quarkus.otel.metrics.enabled=true を設定することで、JVM および HTTP サーバーに関連するメトリクスが収集されます。
次の表に、現在利用可能な OpenTelemetry メトリクスを示します。jvm.system.cpu.utilization メトリクスは JVM モードでは削除されました。代わりに jvm.cpu.recent_utilization を使用してください。
| メトリクス名 | 説明 | 型 | JVM で利用可能 | ネイティブで利用可能 | MP Telemetry 2.0 |
|---|---|---|---|---|---|
| http.server.request.duration | HTTP サーバーリクエストの持続時間 | HISTOGRAM | Y | 可能 | Y |
| jvm.memory.committed | コミットされたメモリーの測定 | LONG_SUM | Y | データは生成されませんでした | Y |
| jvm.memory.used | 使用されているメモリーの測定 | LONG_SUM | Y | データは生成されませんでした | Y |
| jvm.memory.limit | 取得可能な最大メモリーの測定 | LONG_SUM | Y | 存在しない | Y |
| jvm.memory.used_after_last_gc | 使用されたメモリーの量。このプールでの最新のガベージコレクションイベント後に測定されます。 | LONG_SUM | Y | データは生成されませんでした | Y |
| jvm.gc.duration | JVM ガベージコレクションアクションの期間 | HISTOGRAM | Y | 存在しない | Y |
| jvm.class.count | 現在ロードされているクラスの数 | LONG_SUM | Y | データは生成されませんでした | Y |
| jvm.class.loaded | JVM 起動以降にロードされたクラスの数 | LONG_SUM | Y | データは生成されませんでした | Y |
| jvm.class.unloaded | JVM 起動以降にアンロードされたクラスの数 | LONG_SUM | Y | データは生成されませんでした | Y |
| jvm.cpu.count | JVM で利用可能なプロセッサーの数 | LONG_SUM | Y | Y | N |
| jvm.cpu.limit | LONG_SUM | Y | データは生成されませんでした | N | |
| jvm.cpu.time | JVM によって報告されたプロセスで使用された CPU 時間 | DOUBLE_SUM | Y | 存在しない | N |
| jvm.system.cpu.utilization | JVM によって報告されたプロセスで使用された CPU 時間 | DOUBLE_SUM | 存在しない | データは生成されませんでした | N |
| jvm.cpu.recent_utilization | JVM によって報告されたプロセスの最近の CPU 使用率 | DOUBLE_GAUGE | Y | データは生成されませんでした | N |
| jvm.cpu.longlock | ロック時間が長い | HISTOGRAM | Y | Y | N |
| jvm.cpu.context_switch | DOUBLE_SUM | Y | データは生成されませんでした | N | |
| jvm.network.io | ネットワーク読み取り/書き込みバイト | HISTOGRAM | Y | 存在しない | N |
| jvm.network.time | ネットワークの読み取り/書き込み期間 | HISTOGRAM | Y | 存在しない | N |
| jvm.thread.count | 実行中のプラットフォームスレッドの数 | LONG_SUM | Y | 可能 | Y |
この変更を適用するには、このリリースノートに記載されている追加の手順を手動で実行します。Red Hat build of Quarkus 3.27 へのアプリケーションの移行ガイド の自動更新プロセスには、この変更は含まれません。
詳細は、以下の資料を参照してください。
- Quarkus Using OpenTelemetry Metrics ガイド
- Quarkus Migration guide 3.25: OpenTelemetry metrics
1.7.6. セキュリティー リンクのコピーリンクがクリップボードにコピーされました!
1.7.6.1. HTTP 認証: 非推奨の getCredentialTransport() メソッドが削除されました リンクのコピーリンクがクリップボードにコピーされました!
今回のリリースでは、非推奨のブロッキングメソッド HttpAuthenticationMechanism.getCredentialTransport() が削除されました。
アプリケーションまたはカスタムのセキュリティーエクステンションがこのメソッドをオーバーライドする場合は、コンパイルエラーを回避するために実装を更新する必要があります。
次の例のように、リアクティブバージョンを実装して、削除されたメソッドを置き換えてください。
Uni<HttpCredentialTransport> getCredentialTransport(RoutingContext context) {
return Uni.createFrom().item(myHttpCredentialTransport);
}
この変更を適用するには、このリリースノートに記載されている追加の手順を手動で実行します。Red Hat build of Quarkus 3.27 へのアプリケーションの移行ガイド の自動更新プロセスには、この変更は含まれません。
1.7.6.2. TLS レジストリーエクステンションの再構築 リンクのコピーリンクがクリップボードにコピーされました!
今回のリリースでは、runtime モジュールと spi モジュール間でパッケージが分割されないように、TLS レジストリーエクステンション (quarkus-tls-registry) が再構築されました。
この再編成の一環として、io.quarkus.tls.TlsRegistryBuildItem クラスの名前が io.quarkus.tls.deployment.spi.TlsRegistryBuildItem に変更されました。ただし、まだ spi モジュール内にあります。
以前の TlsRegistryBuildItem クラスの場所を参照する既存のコードがある場合は、現在のパッケージを使用するようにインポートを更新します。
// Earlier import
import io.quarkus.tls.TlsRegistryBuildItem;
// Current import
import io.quarkus.tls.deployment.spi.TlsRegistryBuildItem;
この変更は、デプロイメントとランタイムコンポーネントをより明確に分離するために Quarkus プロジェクトで提案されているアーキテクチャーの改善と方向性が一致しています。
この変更を適用するには、このリリースノートに記載されている追加の手順を手動で実行します。Red Hat build of Quarkus 3.27 へのアプリケーションの移行ガイド の自動更新プロセスには、この変更は含まれません。
1.7.7. ツール リンクのコピーリンクがクリップボードにコピーされました!
1.7.7.1. エクステンション開発者: レガシー設定クラスのサポートが削除されました リンクのコピーリンクがクリップボードにコピーされました!
互換性に影響する変更: レガシー設定クラスと -AlegacyConfigRoot=true アノテーションプロセッサーオプションを使用したエクステンションのビルドのサポートが削除されました。
エクステンションでは、@ConfigMapping および @ConfigRoot でアノテーションが付けられた設定インターフェイスを使用する必要があります。
この変更を適用するには、このリリースノートに記載されている追加の手順を手動で実行します。Red Hat build of Quarkus 3.27 へのアプリケーションの移行ガイド の自動更新プロセスには、この変更は含まれません。
詳細は、以下の資料を参照してください。
1.7.7.2. Gradle: testNative および quarkusIntTest タスクが test タスクに依存しなくなりました リンクのコピーリンクがクリップボードにコピーされました!
今回のリリースでは、Gradle タスクの testNative と quarkusIntTest が test タスクに依存しなくなりました。
これらのタスクは、それぞれネイティブテストと結合テストだけを実行するようになったため、テストの各段階を独立して実行できます。
ネイティブテストまたは結合テストを実行するときに、ユニットテストを含むデフォルトのタスク依存関係を使用していた場合は、ビルドスクリプトを更新してください。
この変更を適用するには、このリリースノートに記載されている追加の手順を手動で実行します。Red Hat build of Quarkus 3.27 へのアプリケーションの移行ガイド の自動更新プロセスには、この変更は含まれません。
詳細は、Quarkus の Migration guide 3.22 を参照してください。
1.7.8. Web リンクのコピーリンクがクリップボードにコピーされました!
1.7.8.1. ContextResolver: REST クライアントでのラムダの使用が禁止されました リンクのコピーリンクがクリップボードにコピーされました!
今回のリリースでは、ラムダを使用して REST クライアントで ContextResolver を定義すると、IllegalArgumentException が出力されます。
これが発生するのは、REST クライアントエクステンションがジェネリック型を推論できないためです。以前のバージョンでは、デフォルトで Object に設定されていました。
実行時エラーを回避し、正しい REST クライアント設定を確保するために、ラムダを具体的な ContextResolver 実装に置き換えてください。
この変更を適用するには、このリリースノートに記載されている追加の手順を手動で実行します。Red Hat build of Quarkus 3.27 へのアプリケーションの移行ガイド の自動更新プロセスには、この変更は含まれません。
詳細は、Quarkus の Migration guide 3.22 を参照してください。
1.7.8.2. Panache REST: Jakarta REST リソースは Quarkus REST でのみ動作します リンクのコピーリンクがクリップボードにコピーされました!
今回のリリースでは、Panache を使用する Jakarta REST リソースクラスは、Quarkus REST モジュールでのみ動作します。
REST Data Panache モジュールは、RESTEasy Classic モジュールでは動作しなくなりました。
影響を受けるモジュールのリスト:
-
quarkus-hibernate-orm-rest-data-panache -
quarkus-hibernate-reactive-rest-data-panache -
quarkus-mongodb-rest-data-panache -
spring-data-rest
実行時の障害を回避するために、RESTEasy Classic (quarkus-resteasy-*) ではなく、Quarkus REST (quarkus-rest-*) を使用してください。
この変更を適用するには、このリリースノートに記載されている追加の手順を手動で実行します。Red Hat build of Quarkus 3.27 へのアプリケーションの移行ガイド の自動更新プロセスには、この変更は含まれません。
詳細は、Quarkus の Migration guide 3.22 を参照してください。
1.7.8.3. REST: JsonView のデシリアライゼーション動作が変更されました リンクのコピーリンクがクリップボードにコピーされました!
今回のリリースでは、Quarkus REST はシリアライゼーションとデシリアライゼーションの両方に一貫して @JsonView を適用します。
リソースメソッドまたは DTO の @JsonView は、指定されたビュークラス (たとえば、Views.Public および Views.Private) に従って、入力から読み取るプロパティーと出力に書き込むプロパティーを制御するようになりました。
以前は、シリアライゼーションのみが @JsonView を適用していたため、デシリアライゼーションではアクティブビューの外部のプロパティーが受け入れられる可能性がありました。この動作に依存していたアプリケーションでは、新しい動作に合わせてコードまたは設定の変更が必要になる場合があります。
この変更を適用するには、このリリースノートに記載されている追加の手順を手動で実行します。Red Hat build of Quarkus 3.27 へのアプリケーションの移行ガイド の自動更新プロセスには、この変更は含まれません。
詳細は、Quarkus の Migration guide 3.21 を参照してください。
1.8. 既知の問題 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Quarkus 3.27 の制限事項と回避策は、次の既知の問題を確認してください。
1.8.1. FIPS: FIPS 対応環境でのテストにおける既知の制限 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Quarkus 3.27 では、FIPS (Federal Information Processing Standards) モードが有効になっている環境で、Quarkus アプリケーションがどのように動作するかを評価するためのテストが実施されました。
テストは一般的には正常に完了しますが、一部のテクノロジー統合とネイティブイメージ設定には現在、検証やコンパイルを妨げる制限があります。
FIPS 対応環境でのテストでは、OpenID Connect (OIDC)、サポート対象データベース、キャッシング、非ネイティブモードでの Kafka を使用したメッセージング、OpenTelemetry を含む、いくつかの主要コンポーネントで良好な結果が示されました。ただし、一部のテクノロジー統合とネイティブ設定は現在これらの環境では検証できません。
これらの結果は、Red Hat build of Quarkus またはそのコンポーネントが FIPS を公式にサポートしていることを示すものではありません。
検証できないシナリオ
現在、FIPS 対応環境では、次のテクノロジーの統合または設定は検証できません。
- MariaDB 11.x
- Mandrel 23.0 および 23.1 を使用した JVM モードとネイティブモードの両方での Infinispan クライアントエクステンション
- ネイティブモードで SCRAM と OAUTHBEARER SASL メカニズムを使用する Apache Kafka
- ネイティブモードの JDBC MSSQL ドライバー
- DB2
- ネイティブモードのリアクティブ MSSQL クライアント
- Red Hat Mandrel 23.1 ビルダーイメージを使用したネイティブイメージのコンパイル
注目すべき関連問題
次の公開 Jira チケットには、発生した制限に関する追加の詳細が記載されています。
- QUARKUS-5984: 互換性の問題により、MariaDB 11.x は FIPS 対応環境で接続できません。
- QUARKUS-2036: Infinispan クライアントエクステンションには FIPS 対応環境のサポートがありません。
- QUARKUS-2984: FIPS 対応の RHEL 8 では、JDBC MSSQL および Reactive MSSQL クライアントを使用したネイティブビルドが失敗します。
- QUARKUS-5232: SASL SCRAM メカニズムは、FIPS 対応環境内のネイティブモードでは使用できません。
- QUARKUS-5233: SASL OAUTHBEARER メカニズムは、FIPS 対応環境内のネイティブモードでは使用できません。
- MANDREL-254: Mandrel 23.1 ビルダーイメージは、FIPS 対応環境をサポートするために修正が必要です。
- QUARKUS-4387: Quarkus Reactive MySQL クライアントは FIPS 対応環境ではサポートされません。
- QUARKUS-4612: ネイティブ Mandrel 23.0 および 23.1 では、Infinispan クライアントエクステンションが FIPS で失敗します。
回避策
現在、回避策はありません。
このリリースノートは、より広範な互換性テストが継続される間に、既知の課題を事前に公開することを目的としています。
1.8.2. Kafka Streams エクステンションに Microsoft Windows のネイティブライブラリーがない リンクのコピーリンクがクリップボードにコピーされました!
Microsoft で quarkus-kafka-streams エクステンションを使用するアプリケーションは、ネイティブライブラリー librocksdbjni-win64.dll が見つからないため、ランタイムに失敗します。
起動中に、この問題により次のエラーが発生します。
java.lang.RuntimeException: librocksdbjni-win64.dll was not found inside JAR
このエラーにより、Kafka Streams アプリケーションに必要な RocksDB コンポーネントの初期化が妨げられます。
現時点で使用できる回避策はありません。
エラーの例
13:07:08,118 INFO [app] ERROR: Failed to start application (with profile [prod])
13:07:08,118 INFO [app] java.lang.RuntimeException: Failed to start quarkus
13:07:08,118 INFO [app] at io.quarkus.runner.ApplicationImpl.doStart(Unknown Source)
13:07:08,118 INFO [app] at io.quarkus.runtime.Application.start(Application.java:101)
13:07:08,118 INFO [app] at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:111)
13:07:08,118 INFO [app] at io.quarkus.runtime.Quarkus.run(Quarkus.java:71)
13:07:08,118 INFO [app] at io.quarkus.runtime.Quarkus.run(Quarkus.java:44)
13:07:08,118 INFO [app] at io.quarkus.runtime.Quarkus.run(Quarkus.java:124)
13:07:08,118 INFO [app] at io.quarkus.runner.GeneratedMain.main(Unknown Source)
13:07:08,118 INFO [app] Caused by: java.lang.ExceptionInInitializerError
13:07:08,118 INFO [app] at io.quarkus.kafka.streams.runtime.KafkaStreamsRecorder.loadRocksDb(KafkaStreamsRecorder.java:14)
13:07:08,118 INFO [app] at io.quarkus.deployment.steps.KafkaStreamsProcessor$loadRocksDb1611413226.deploy_0(Unknown Source)
13:07:08,118 INFO [app] at io.quarkus.deployment.steps.KafkaStreamsProcessor$loadRocksDb1611413226.deploy(Unknown Source)
13:07:08,118 INFO [app] ... 11 more
13:07:08,118 INFO [app] Caused by: java.lang.RuntimeException: librocksdbjni-win64.dll was not found inside JAR.
13:07:08,118 INFO [app] at org.rocksdb.NativeLibraryLoader.loadLibraryFromJarToTemp(NativeLibraryLoader.java:118)
13:07:08,118 INFO [app] at org.rocksdb.NativeLibraryLoader.loadLibraryFromJar(NativeLibraryLoader.java:102)
13:07:08,118 INFO [app] at org.rocksdb.NativeLibraryLoader.loadLibrary(NativeLibraryLoader.java:82)
13:07:08,118 INFO [app] at org.rocksdb.RocksDB.loadLibrary(RocksDB.java:70)
13:07:08,118 INFO [app] at org.rocksdb.RocksDB.<clinit>(RocksDB.java:39)
13:07:08,118 INFO [app] ... 14 more
詳細は、QUARKUS-3434 を参照してください。
1.8.3. Windows 上の Snappy のネイティブライブラリーが見つからない リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Quarkus 3.27 では、Windows 上で Snappy 圧縮ライブラリーを使用するアプリケーションを実行すると、ネイティブライブラリーが見つからないためエラーが発生します。
Windows 環境で Snappy を使用してデータを圧縮しようとすると、次の例のようなエラーメッセージが表示される場合があります。
エラーメッセージの例
...
org.eclipse.microprofile.reactive.messaging.Message$5@1e8dc267 from channel 'test' was not sent to Kafka topic 'test' - nacking message: org.apache.kafka.common.KafkaException: org.xerial.snappy.SnappyError: [FAILED_TO_LOAD_NATIVE_LIBRARY] no native library is found for os.name=Windows and os.arch=x86_64
...
回避策: 現時点では回避策はありません。この問題は今後のリリースで解決される予定です。
詳細は、QUARKUS-5983 を参照してください。
1.8.4. Mandrel 23.1 でネイティブイメージのビルドが断続的に失敗し、到達不能型エラーが発生する リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Quarkus 3.27 では、ヒープスナップショット検証エラーが原因で、Mandrel 23.1 ランタイムを使用したネイティブイメージのビルドが断続的に失敗する可能性があります。
ビルドプロセスは、型が到達可能としてマークされていないことを示すエラーで失敗します。
AnalysisType<... reachable: false>
これらのエラーは一貫しておらず、異なるアプリケーション間で発生する可能性があります。それらは管理された環境において確実に再現されていません。
エラーの例 1
com.oracle.graal.pointsto.util.AnalysisError: The heap snapshot verifier discovered a type not marked as reachable:
AnalysisType<VMOption$Origin[] -> HotSpotType<[Lcom/sun/management/VMOption$Origin;, resolved>, allocated: false, inHeap: false, reachable: false>
at com.oracle.graal.pointsto.heap.HeapSnapshotVerifier$ScanningObserver.ensureTypeScanned(HeapSnapshotVerifier.java:332)
...
エラーの例 2
AnalysisType<MemoryType[] -> HotSpotType<[Ljava/lang/management/MemoryType;, resolved>, allocated: false, inHeap: false, reachable: false>
AnalysisType<HotSpotDiagnosticMXBean$ThreadDumpFormat[] -> HotSpotType<[Lcom/sun/management/HotSpotDiagnosticMXBean$ThreadDumpFormat;, resolved>, allocated: false, inHeap: false, reachable: false>
エラーの例 3
AnalysisType<MemoryType[] -> HotSpotType<[Ljava/lang/management/MemoryType;, resolved>, allocated: false, inHeap: false, reachable: false>
回避策: ネイティブイメージのビルドを再試行します。問題は断続的に発生するため、次回の試行ではビルドが成功する可能性があります。
この問題は今後のリリースで解決される予定です。
詳細は、MANDREL-332 を参照してください。
1.8.5. Quarkus CLI が TLS レジストリー CLI プラグインを検出できない リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Quarkus 3.15 では、Quarkus CLI の TLS レジストリーサポートを有効にする quarkus-tls-registry-cli プラグインが導入されました。
ただし、開発ツールは現在、maven.repository.redhat.com でホストされている Quarkus CLI プラグインを検出しません。その結果、Quarkus CLI はデフォルトでは TLS レジストリー CLI プラグインを解決できません。
この問題が発生すると、CLI は次の出力のようなエラーを返します。
[jbang] [ERROR] Could not resolve dependencies: The following artifacts could not be resolved: io.quarkus:quarkus-tls-registry-cli:jar:3.27.0.redhat-00001 (absent): Could not find artifact io.quarkus:quarkus-tls-registry-cli:jar:3.27.0.redhat-00001 in central (https://repo1.maven.org/maven2/)
回避策: Quarkus CLI がプラグインを解決できるようにするには、https://maven.repository.redhat.com/ga/ にある Red Hat Maven リポジトリーを使用するように JBang を設定します。
次のいずれかの方法を使用できます。
次の内容を含む
jbang.propertiesファイルを作成します。run.repos=central,https://maven.repository.redhat.com/ga/この設定をローカルに適用するには、ファイルをプロジェクトのルートディレクトリーに配置します。設定をグローバルに適用するには、ファイルを
~/.jbangディレクトリーに配置します。JBang がすでにインストールされている場合は、次のコマンドを実行してリポジトリーをグローバルに設定します。
jbang config set run.repos central,https://maven.repository.redhat.com/ga/
詳細は、QUARKUS-5183 を参照してください。
1.8.6. Quarkus CLI が Red Hat build of Quarkus プラットフォームバージョンのみを更新する リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Quarkus 3.27 では、更新コマンドを実行すると、Red Hat build of Quarkus プラットフォーム (com.redhat.quarkus.platform) に含まれる BOM のみが更新されます。これらには、quarkus-camel-bom と quarkus-cxf-bom (リリースの一部である場合)、quarkus-qpid-jms-bom、quarkus-operator-sdk-bom などの BOM が含まれます。
ただし、このコマンドは、アップストリームコミュニティーリリースに関連付けられた BOM バージョンを更新しません。プロジェクトに Red Hat build of Quarkus とアップストリーム BOM の両方が含まれている場合、この問題により、Quarkus とアップストリーム BOM の組み合わせに互換性がなくなる可能性があります。
更新コマンドの例
$ mvn com.redhat.quarkus.platform:quarkus-maven-plugin:3.27.0.redhat-00001:update -Dmaven.repo.local=<path-to-local-repo>
問題のある pom.xml ファイルの例
<properties>
<quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
<quarkus.platform.group-id>com.redhat.quarkus.platform</quarkus.platform.group-id>
<quarkus.platform.version>3.27.0.redhat-00001</quarkus.platform.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>${quarkus.platform.group-id}</groupId>
<artifactId>${quarkus.platform.artifact-id}</artifactId>
<version>${quarkus.platform.version}</version>
</dependency>
<dependency>
<groupId>io.quarkus.platform</groupId>
<artifactId>quarkus-amazon-services-bom</artifactId>
<version>3.2.12.Final</version>
</dependency>
</dependencies>
</dependencyManagement>
- 1
- バージョンは更新されていません。
回避策: バージョン番号を手動で更新します。
詳細は、QUARKUS-5185 を参照してください。
1.8.7. mandrel-for-jdk-21-rhel8:23.1 および FIPS が有効になっているネイティブモードで、RSA 暗号の初期化により NPE がトリガーされる リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Quarkus 3.27 では、quarkus/mandrel-for-jdk-21-rhel8:23.1 Red Hat build of Quarkus Native Builder イメージを使用して、FIPS 対応環境内でネイティブモードで RSA 暗号を初期化すると、NullPointerException (NPE) エラーが発生します。
この問題は、FIPS が有効になっているネイティブモードでのみ発生し、FIPS が無効になっているネイティブモードには影響しません。また、FIPS が有効になっている Red Hat build of OpenJDK を使用する場合、JVM モードには影響しません。
FIPS 対応環境ではネイティブモードはサポートされません。
エラーメッセージの例
2024-10-17 10:45:01,931 ERROR [io.qua.ver.htt.run.QuarkusErrorHandler] (executor-thread-1) HTTP Request to /repro failed, error id: 9b1f5dbb-058b-4c9b-9377-f3acc0a6cba5-1: java.lang.RuntimeException: java.lang.NullPointerException
at org.acme.ReproResource.init(ReproResource.java:38)
...
回避策:
存在する場合は、
application.propertiesファイルから次のプロパティーを削除します。quarkus.security.security-providers=SunPKCS11ランタイムに
ReproResourceクラスを初期化するには、application.propertiesファイルに次のプロパティーを追加します。quarkus.native.additional-build-args=--initialize-at-run-time=org.acme.ReproResource
詳細は、MANDREL-245 を参照してください。
1.8.8. WebSockets Next: オープンイベント例外で接続エラーメトリクスが増加しない リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Quarkus 3.27 では、websockets-next エクステンションを使用して、@WebSocket エンドポイントが @OnOpen ライフサイクルメソッドで例外をスローすると、次のメトリクスが増分されません。
-
quarkus_websockets_server_connections_opened_errors_total{uri=${ENDPOINT}} -
quarkus_websockets_client_connections_opened_errors_total{uri=${ENDPOINT}}
この動作は、サーバー側とクライアント側の両方の WebSocket 接続メトリクスに影響します。
回避策: 現時点では回避策はありません。この問題は今後のリリースで解決される予定です。
詳細は、QUARKUS-5977 を参照してください。
1.9. Red Hat build of Quarkus 3.27.0 に関するアドバイザリー リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Quarkus 3.27.0 の使用とデプロイを開始する前に、このリリースに関連する次のアドバイザリーを確認してください。