Red Hat build of Quarkus 3.20 へのアプリケーションの移行


Red Hat build of Quarkus 3.20

Red Hat Customer Content Services

概要

このガイドでは、Red Hat build of Quarkus の以前のバージョンから現行バージョンにアプリケーションを移行する方法を説明します。

Red Hat build of Quarkus ドキュメントへのフィードバックの提供

エラーを報告したり、ドキュメントを改善したりするには、Red Hat Jira アカウントにログインし、課題を送信してください。Red Hat Jira アカウントをお持ちでない場合は、アカウントを作成するように求められます。

手順

  1. 次のリンクをクリックして チケットを作成します
  2. Summary に課題の簡単な説明を入力します。
  3. Description に課題や機能拡張の詳細な説明を入力します。問題があるドキュメントのセクションへの URL も記載してください。
  4. Submit をクリックすると、課題が作成され、適切なドキュメントチームに転送されます。

第1章 Red Hat build of Quarkus 3.20 へのアプリケーションの移行

アプリケーション開発者は、quarkus CLI または Maven を使用して、Red Hat build of Quarkus バージョン 3.2 以降をベースとするアプリケーションをバージョン 3.20 に移行できます。

重要

Quarkus CLI は、Quarkus プロジェクトの作成、更新、ビルドなどのタスクを含む開発目的で使用されます。Red Hat は、実稼働環境での Quarkus CLI の使用をサポートしていません。

1.1. プロジェクトを Red Hat build of Quarkus の最新バージョンに更新する

Red Hat build of Quarkus プロジェクトを最新バージョンに更新するには、このガイドの後半で詳しく説明する次の手順に従います。

  1. quarkus CLI または Maven コマンドを使用して、自動更新タスクを実行します。
  2. 以前のバージョンとの互換性に影響を与える変更 セクションを参照して、手動更新タスクを実行します。

1.1.1. 自動更新

quarkus CLI または Maven コマンドを実行すると、プロジェクトの依存関係とソースコードをアップグレードする OpenRewrite レシピがトリガーされます。この自動化されたアプローチにより、信頼性の高い便利な方法でプロジェクトを更新できます。

ただし、すべての移行タスクが自動化されるわけではありません。quarkus update コマンドまたは Maven の同等のコマンドを実行しても、特定の更新が適用されない場合は、次の理由が考えられます。

  • 必要な移行タスクが利用可能な OpenRewrite レシピの対象外である。
  • プロジェクトが依存するエクステンションと Red Hat build of Quarkus の最新バージョンの間に互換性がない。

1.1.2. 手動更新

手動更新では、あらゆる移行タスクに対応する柔軟性と制御性が得られ、プロジェクトを特定のニーズに合わせて調整できます。自動化されていないタスクは手動で処理する必要があります。

以前のリリースからこのリリースに更新するために必要な移行タスクのリストは、このガイドの 以前のバージョンとの互換性に影響を与える変更 セクションを参照してください。

アプリケーションプロジェクトの現在のバージョンからアップグレード先のバージョンまでの間にリリースされた各バージョンの移行ガイドを確認することが重要です。この確認作業により、更新プロセスについて十分な情報が得られ、準備が整います。たとえば、バージョン 3.15 から 3.20 にアップグレードする場合は、このガイドを確認するだけで済みます。バージョン 3.2 から 3.20 にアップグレードする場合は、各中間バージョンのガイドも確認する必要があります。

この移行ガイドの各タスクで、必要な変更の概要を示し、その変更が quarkus update コマンドとそれに相当する Maven によって自動的に処理されるかどうかを示します。

その他の背景情報は、Quarkus コミュニティーの Migration guides を参照してください。

1.2. quarkus CLI を使用したプロジェクトの更新

quarkus CLI を使用して Red Hat build of Quarkus プロジェクトを更新します。

重要

Quarkus CLI は、Quarkus プロジェクトの作成、更新、ビルドなどのタスクを含む開発目的で使用されます。Red Hat は、実稼働環境での Quarkus CLI の使用をサポートしていません。

前提条件

手順

  1. バージョン管理システムでプロジェクトの作業ブランチを作成します。
  2. インストールガイド に従って、最新バージョンの quarkus CLI をインストールします。
  3. 次のコマンドを実行して、インストールを確認します。

    quarkus -v
    3.20.2
    Copy to Clipboard Toggle word wrap
  4. 重要:「Red Hat build of Quarkus スタートガイド」の Red Hat build of Quarkus エクステンションレジストリークライアントの設定 セクションの手順に従って、エクステンションレジストリークライアントを設定します。
  5. ターミナルで、プロジェクトディレクトリーに移動します。
  6. プロジェクトを更新します。

    quarkus update
    Copy to Clipboard Toggle word wrap

    オプション: 特定のストリームに更新するには、--stream オプションを使用し、それに続けて特定のバージョンを指定します。次に例を示します。

    quarkus update --stream=3.20
    Copy to Clipboard Toggle word wrap
  7. 更新コマンドの出力で指示を確認し、推奨されるタスクを実行します。
  8. 差分ツールを使用して、更新プロセス中に行われたすべての変更を調べます。
  9. プロジェクトの更新によって処理されなかった変更を手動で実行します。詳細は、以下の 以前のバージョンとの互換性に影響を与える変更 セクションを参照してください。
  10. 実稼働環境にデプロイする前に、プロジェクトがエラーなくビルドされ、すべてのテストに合格し、アプリケーションが期待どおりに機能することを確認します。

1.3. Maven を使用したプロジェクトの更新

Maven を使用して Red Hat build of Quarkus プロジェクトを更新します。

前提条件

手順

  1. バージョン管理システムでプロジェクトの作業ブランチを作成します。
  2. 重要:「Red Hat build of Quarkus スタートガイド」の Red Hat build of Quarkus エクステンションレジストリークライアントの設定 セクションに記載されているように、エクステンションレジストリークライアントを設定します。
  3. ターミナルを開き、プロジェクトディレクトリーに移動します。
  4. Red Hat build of Quarkus Maven プラグインのバージョンが、サポートされている最新バージョンと一致していることを確認します。Red Hat build of Quarkus スタートガイド に従ってプロジェクトを設定し、次を実行します。

    mvn com.redhat.quarkus.platform:quarkus-maven-plugin:3.20.2.SP1-redhat-00003:update
    Copy to Clipboard Toggle word wrap

    オプション: 特定のストリームに更新するには、-Dstream オプションを使用し、それに続けて目的のバージョンを指定します。次に例を示します。

    mvn com.redhat.quarkus.platform:quarkus-maven-plugin:3.20.2.SP1-redhat-00003:update -Dstream=3.20
    Copy to Clipboard Toggle word wrap
  5. 更新コマンドの出力で指示を確認し、推奨されるタスクを実行します。
  6. 差分ツールを使用して、更新プロセス中に行われたすべての変更を調べます。
  7. プロジェクトの更新によって処理されなかった変更を手動で実行します。詳細は、以下の 以前のバージョンとの互換性に影響を与える変更 セクションを参照してください。
  8. 実稼働環境にデプロイする前に、プロジェクトがエラーなくビルドされ、すべてのテストに合格し、アプリケーションが期待どおりに機能することを確認します。

1.4. 以前のバージョンとの互換性に影響を与える変更

このセクションでは、以前の製品バージョンでビルドされたアプリケーションの互換性に影響を与える、Red Hat build of Quarkus 3.20 の変更点を説明します。

これらの重大な変更を確認し、アプリケーションを Red Hat build of Quarkus 3.20 に更新した後もアプリケーションが引き続き機能するように必要な手順を実行してください。

このセクションに記載されている更新の多くは、quarkus update または同等の Maven コマンドで実行できます。これにより、プロジェクトの依存関係とソースコードを Red Hat build of Quarkus の最新バージョンに更新する自動 OpenRewrite レシピがトリガーされます。

ただし、すべての移行タスクが自動化されるわけではありません。自動更新によって特定の更新が適用されない場合は、必要な移行タスクが利用可能な OpenRewrite レシピの対象外であるか、プロジェクトが依存するエクステンションと最新バージョンの間に互換性がないことが原因である可能性があります。このような場合は、手動で更新を実行する必要があります。手動の移行タスクを特定して対処するには、次の項目を必ず確認してください。

1.4.1. クラウド

1.4.1.1. OpenShift および Kubernetes: バージョン 7.1 への Fabric8 Kubernetes Client のアップグレード

Red Hat build of Quarkus 3.20 では、次のエクステンションによって Fabric8 Kubernetes Client がバージョン 6.13 から 7.1 にアップグレードされます。

  • quarkus-openshift
  • quarkus-openshift-client
  • quarkus-kubernetes
  • quarkus-kubernetes-client

互換性を失わせる変更点

アップグレードされた Fabric8 Kubernetes クライアントには、quarkus-kubernetes-client および quarkus-openshift-client エクステンションに影響する、互換性を失わせる変更点が含まれています。

quarkus-openshift および quarkus-kubernetes エクステンションは、Fabric8 を使用しますが、機能は変更されていないため、更新する必要はありません。

このアップグレードの一環として、io.quarkus:quarkus-test-openshift-client モジュールが削除されました。テストでこのモジュールを使用する場合は、同等の機能を提供する io.quarkus:quarkus-test-kubernetes-client に移行してください。詳細は、Quarkus ガイド「Kubernetes Client」の OpenShift Client セクションを参照してください。

アップグレードされた Fabric8 Kubernetes Client では、一部のモデルタイプとクラスが再編成されています。一部は別のモジュールに移動されました。新しい場所を確認するには、Fabric8 公式の Kubernetes Client: Migration from 6.x to 7.x ガイドを参照してください。

影響を受ける依存関係、設定、または API の使用状況をアプリケーションで確認し、必要に応じて更新してください。その後、アプリケーションを十分にテストして、Fabric8 7.1 との完全な互換性を確保します。

注記

Red Hat build of Quarkus 3.20 では、quarkus-kubernetes エクステンションは開発者プレビューとしてサポートされており、quarkus-kubernetes-client エクステンションは現在サポートされていません。これらのエクステンションを使用すると、前述の変更点が移行に影響する可能性があります。

この変更には手動による介入が必要です。これは、Red Hat build of Quarkus 3.20 へのアプリケーションの移行 ガイドで説明されている自動更新プロセスには含まれていません。

1.4.2. 互換性

1.4.2.1. Reactive 名前変更の互換性レイヤーの削除

Red Hat build of Quarkus 3.15 で、RESTEasy Reactive から Quarkus REST へ、Reactive Messaging から Quarkus Messaging へブランド変更の一環として、多くのエクステンションと設定プロパティーの名前が変更されました。この変更に対応するために、アーティファクトの再配置と設定のフォールバックが導入されました。

Red Hat build of Quarkus 3.20 では、このアーティファクトの再配置と設定のフォールバックが削除されました。新しいアーティファクト名と設定プロパティーを使用する必要があります。

関連する背景情報は、「Red Hat build of Quarkus 3.15 のリリースノート」ガイドの RESTEasy Reactive エクステンションの名前が Quarkus REST に変更される セクションを参照してください。

1.4.3. コア

1.4.3.1. デフォルトのロケール設定の強化

Red Hat build of Quarkus 3.20 では、Mandrel バージョン 24.2 以降に合わせてロケール処理が更新されています。

互換性を失わせる変更点

以前のリリースでは、アプリケーションがビルドシステムからデフォルトのロケールを継承していました。

すべてのアプリケーションで一貫したロケールの動作を確保するために、Red Hat build of Quarkus は標準化されたデフォルトのロケールストラテジーを適用します。次の表を使用して、ロケール設定に応じてアプリケーションの動作がどのように変化するかを確認してください。

Expand
アプリケーションのプロパティーネイティブ実行可能ファイルに含まれるロケール実行時のデフォルトロケール

quarkus.localesquarkus.default-locale も設定されていない

en_US

en_US

quarkus.locales のみが設定されている

quarkus.locales にリストされているロケールおよび en_US

en_US

quarkus.default-locale のみが設定されている

en_US

quarkus.default-locale の値

quarkus.localesquarkus.default-locale の両方が設定されている

quarkus.locales にリストされているロケールおよび en_US

quarkus.default-locale の値

quarkus.locales の設定に関係なく、en_US ロケールは常にネイティブ実行可能ファイルに埋め込まれます。

注記

quarkus.default-locale を設定すると、Red Hat build of Quarkus が実行時に user.language および user.country システムプロパティーを設定します。GraalVM または Mandrel を使用する JDK 24 以降では、これらのプロパティーを直接オーバーライドすることもできます。

予期しない動作の変更を回避するために、設定プロパティーでアプリケーションのロケール設定を確認し、必要に応じて設定を更新してください。

この変更には手動による介入が必要です。これは、Red Hat build of Quarkus 3.20 へのアプリケーションの移行 ガイドで説明されている自動更新プロセスには含まれていません。

1.4.3.2. SmallRye Fault Tolerance: Fallback および BeforeRetry メソッドがビルド時に定義される

Red Hat build of Quarkus 3.20 では、@Fallback.fallbackMethod() および @BeforeRetry.methodName() の設定プロパティーがビルド時に解決され、ランタイムに変更できなくなりました。影響を受ける設定プロパティーは次のとおりです。

  • <class_name>/<method_name>/Fallback/fallbackMethod
  • <class_name>/Fallback/fallbackMethod
  • Fallback/fallbackMethod
  • <class_name>/<method_name>/BeforeRetry/methodName
  • <class_name>/BeforeRetry/methodName
  • BeforeRetry/methodName

この変更により、適切なリフレクション設定とネイティブイメージコンパイルとの互換性が確保されます。

1.4.3.3. SmallRye Fault Tolerance バージョン 6.7.0 で第一世代のプログラム API が非推奨に

Red Hat build of Quarkus 3.20 では、quarkus-smallrye-fault-tolerance エクステンションに SmallRye Fault Tolerance 6.7.0 が組み込まれています。これにより、互換性を失わせる変更点は導入されませんが、次の更新が導入されます。

  • プログラム API の最初のバージョン (FaultTolerance@ApplyFaultTolerance) は、非推奨になりました。SmallRye Fault Tolerance 7.0 で削除される予定です。2 番目のバージョン (GuardTypedGuard@ApplyGuard) が代わりとして機能しますが、大きな違いがあります。
  • 仕様によって定義された設定プロパティーは引き続き使用できます。ただし、Red Hat build of Quarkus では、代わりに使用できるネイティブ設定プロパティーが提供されるようになりました。

詳細は、SmallRye Fault Tolerance 6.7.0 のリリース告知を参照してください。これには、プログラム API の移行ガイドへのリンクと、新しい設定プロパティーの詳細が記載されています。Quarkus ガイド SmallRye のフォールトトレランス には、これらの設定プロパティーの詳細なリファレンスが記載されています。

1.4.3.4. スケジューラーメソッドで、起動されたスケジューラーが必須になる

Red Hat build of Quarkus 3.20 以降、io.quarkus.scheduler.Scheduler 内のメソッドの動作が変更されました。

スケジューラーが起動していない場合、ほぼすべてのメソッドが UnsupportedOperationException を出力するようになりました。

スケジューラーが実行中かどうかを確認するには、新しいメソッド Scheduler#isStarted() を使用できます。

この変更は、quarkus-scheduler および quarkus-quartz エクステンションに基づくスケジューラーインスタンスに影響します。

Red Hat build of Quarkus 3.20 以降、開発モードおよびテストモードを使用する場合、管理インターフェイスがデフォルトで 0.0.0.0 ではなく localhost インターフェイスでリッスンします。この変更により、メインインターフェイスの動作と同じになりました。

Windows Subsystem for Linux (WSL) を搭載した Windows では、管理インターフェイスもメインインターフェイスも、引き続き 0.0.0.0 でリッスンします。

詳細は、Quarkus ガイド Management interface reference を参照してください。

1.4.3.6. @ConfigMapping への移行と設定クラスの非推奨化

Red Hat build of Quarkus 3.20 では、設定が @ConfigMapping フレームワークに移行されました。この変更により、従来の設定クラスが非推奨になり、インターフェイスとメソッドシグネチャーに基づく統合設定モデルが導入されました。

一般的に使用される特定の設定クラスは、互換性レイヤーが残っています。ただし、このレイヤーは今後のリリースで削除される予定です。

1.4.3.7. ビルダーおよびランタイムベースイメージが UBI 9 にアップグレードされる

Red Hat build of Quarkus 3.20 以降、Red Hat のビルダーおよびランタイムベースイメージが、Red Hat Universal Base Image 9 (UBI 9) を使用するようにアップグレードされます。

UBI 8 から UBI 9 にアップグレードする場合、システム依存関係、ネイティブイメージビルド、またはパッケージおよび GNU C ライブラリー (glibc) バージョンの更新による変更が、アプリケーションの動作やランタイム環境に影響する可能性があることに注意してください。必要に応じて設定を確認して更新してください。

UBI 9 で問題が発生した場合は、手動で UBI 8 に戻すことができます。

Expand
表1.1 UBI 8 への切り替え
イメージアクション

ビルダーイメージ

次のようにビルダーイメージを手動で設定します。

  • -Dquarkus.native.container-build=true
  • registry.access.redhat.com/quarkus/mandrel-for-jdk-21-rhel8:23.1

ランタイムイメージ

モードに応じて、次の設定を適用します。

  • JVM モード:

    • src/main/docker/ ディレクトリーの Dockerfile で、コンテナーのベースイメージとして registry.access.redhat.com/ubi8/openjdk-21 を指定します。
  • ネイティブモード:

    • UBI 最小イメージを使用するには、registry.access.redhat.com/ubi8/ubi-minimal:8.10 を指定します。

詳細は、以下の資料を参照してください。

1.4.4. データ

1.4.4.1. データソース: リアクティブ SQL データソースの暗黙的なデフォルト URL の削除

Red Hat build of Quarkus の以前のバージョンでは、Dev Services が無効になっているか実稼働モードで実行されている場合、quarkus.datasource.reactive.url および quarkus.datasource.<datasource-name>.reactive.url プロパティーが、ドキュメント化されていないデフォルト値に暗黙的に設定され、データベース固有のポートを使用する localhost をターゲットとしていました。

Red Hat build of Quarkus 3.20 以降、Dev Services が無効になっている場合、またはアプリケーションが本番モードで実行されている場合、これらのプロパティーにデフォルト値が設定されなくなりました。プロパティーが設定されていない場合、対応するデータソースが非アクティブ化されます。非アクティブ化されたデータソースをアプリケーションが使用しようとすると、起動時にデータソースが失敗します。詳細は、リリースノート データソースが非アクティブ化されているか、URL が設定されていない場合、データソースの使用がすぐに失敗する を参照してください。

アプリケーションにアクティブなデータソースが必要で、それを localhost 上のデータベースに接続する場合は、quarkus.datasource.reactive.url または quarkus.datasource.<datasource-name>.reactive.url プロパティーを明示的に設定する必要があります。以下に例を示します。

quarkus.datasource.reactive.url=postgresql://localhost:5432/mydatabase
Copy to Clipboard Toggle word wrap

以前のバージョンでは、この設定は暗黙的に指定されていました。このリリース以降、データソースをアクティブ化するには、URL を定義する必要があります。

1.4.4.2. URL のないデータソースがヘルスチェックに影響しなくなる

以前は、Dev Services が無効になっているか本番モードの場合、quarkus.datasource.jdbc.urlquarkus.datasource.<datasource-name>.jdbc.urlquarkus.datasource.reactive.url、または quarkus.datasource.<datasource-name>.reactive.url プロパティーが設定されていない場合でも、Red Hat build of Quarkus がデータソースのヘルスチェックを実行していました。これにより、JDBC データソースでは常に成功し、リアクティブデータソースではほぼ常に失敗していたため、ヘルスチェックの信頼性が低下していました。

Red Hat build of Quarkus 3.20 以降、URL のないデータソースはヘルスチェックに影響しなくなりました。ヘルスチェックを確実に利用可能にするには、quarkus.datasource.jdbc.urlquarkus.datasource.<datasource-name>.jdbc.urlquarkus.datasource.reactive.url、または quarkus.datasource.<datasource-name>.reactive.url プロパティーを明示的に設定します。

Red Hat build of Quarkus 3.20 では、データソースが quarkus.datasource.active=false で非アクティブ化されている場合や URL が欠落している場合でも、アプリケーションが正常に起動します。この動作により、特に Dev Services が無効になっている場合や本番モードになっている場合に、データソースに初めてアクセスしたときにランタイムエラーが発生することがよくあります。

この更新により、データソースが使用されているものの、非アクティブ化されているか URL が欠落していることを Red Hat build of Quarkus が検出した場合、アプリケーションの起動が失敗するようになりました。

Red Hat build of Quarkus は、これらの問題を早期に検出するために、以下のように、より厳格な検証を起動時に実施するようになりました。

  • 静的な CDI 注入: @Inject DataSource または @Inject Pool を使用してデータソースが静的に注入されると、アプリケーションの起動が失敗し、実用的で明確なエラーメッセージが表示されます。
  • 動的な取得: Arc.container().instance()@Inject Instance<DataSource> などを使用して動的に取得されたデータソースは、起動時に検出されません。ただし、ランタイムにこれらの Bean を取得すると、実用的なガイダンスを含む明示的な例外が出力されます。

これと同じ検証が、Flyway および Liquibase エクステンションの Flyway および LiquibaseFactory CDI Bean にも適用されます。

注記

Red Hat build of Quarkus 3.20 は、現在 Flyway および Liquibase エクステンションをサポートしていません。これらのエクステンションを使用すると、前述の変更点が移行に影響する可能性があります。

アプリケーションへの影響

  • アプリケーションで、非アクティブ化されているか URL がない可能性のあるデータソース、Flyway、または LiquibaseFactory Bean を使用している場合、次のような起動エラーが発生する可能性があります。

    io.quarkus.arc.InactiveBeanException: Bean is not active: SYNTHETIC bean [class=io.agroal.api.AgroalDataSource, id=sqqLi56D50iCdXmOjyjPSAxbLu0]
    Reason: Datasource' <default>' was deactivated automatically because its URL was not set.
    Copy to Clipboard Toggle word wrap
  • データソースをアクティブ化するには、設定プロパティー quarkus.datasource.jdbc.url を設定します。

    詳細は、データソースの設定 ガイドを参照してください。

データソースをアクティブにする必要がある場合の解決方法

必要なすべての設定プロパティーが指定されていることを確認します。

  1. quarkus.datasource.jdbc.url またはデータソースタイプに適した設定を指定して、データソースが適切にアクティブ化されるようにします。

データソースが非アクティブである可能性がある場合の解決方法

非アクティブなデータソースを適切に処理できるようにコードまたは設定を調整します。

  1. 使用されていないエクステンションを非アクティブ化する: アクティブでない可能性のあるデータソースにエクステンションが依存している場合は、active 設定プロパティーを false に設定して、エクステンションを明示的に非アクティブ化します。以下に例を示します。

    • quarkus.hibernate-search-standalone.active=false
    • quarkus.hibernate-search-orm.active=false
    • quarkus.hibernate-orm.active=false
    • quarkus.flyway.active=false
    • quarkus.datasource.active=false
  2. 動的に注入する: 静的な CDI 注入を使用する代わりに、@Inject InjectableInstance<DataSource> を使用してデータソース Bean がアクティブかどうかを確認してから、データソース Bean を使用します。

    if (ds.getHandle().getBean().isActive()) {
    DataSource dataSource = ds.get();
    // Use the datasource
    }
    Copy to Clipboard Toggle word wrap

    これらの変更により、誤って設定されたデータソースを早期に検出し、予期しないランタイムエラーを防ぐことで、アプリケーションの信頼性が向上します。

1.4.4.4. Flyway バージョン 11 により cleanOnValidationError が削除される

Red Hat build of Quarkus 3.20 では、quarkus-flyway エクステンションによって Flyway がバージョン 11 にアップグレードされます。これにより、cleanOnValidationError 設定パラメーターが削除されます。さらに、Flyway.validate() を呼び出しても検証エラーがクリーンアップされなくなりました。

この変更を緩和するために、Red Hat build of Quarkus 3.20 では、quarkus.flyway.validate-at-start.clean-on-validation-error 設定プロパティーが導入されました。これは cleanOnValidationError と同様の動作を提供するものですが、アプリケーションの起動時にのみ適用されます。

回避策: Flyway.validate() への明示的な呼び出しで cleanOnValidationError の以前の動作が必要な場合は、アプリケーションで検証エラーをキャッチし、Flyway.clean() を使用してデータベースのクリーンアップを明示的にトリガーすることを検討してください。

注記

Red Hat build of Quarkus 3.20 は、現在 Flyway エクステンションをサポートしていません。このエクステンションを使用すると、前述の変更点が移行に影響する可能性があります。

この変更には手動による介入が必要です。これは、Red Hat build of Quarkus 3.20 へのアプリケーションの移行 ガイドで説明されている自動更新プロセスには含まれていません。

詳細は、Quarkus ガイド Using Flyway を参照してください。

1.4.4.5. IBM Db2 ドライバーとコンテナーイメージがバージョン 12 にアップグレードされる

Red Hat build of Quarkus 3.20 では、Dev Services が使用する IBM Db2 ドライバーとコンテナーイメージがバージョン 12 にアップグレードされました。

IBM Db2 ドライバーとコンテナーイメージは、Red Hat build of Quarkus 3.20 へのアプリケーションの移行 ガイドで説明されている自動更新により、バージョン 12 にアップグレードされます。

互換性を失わせる変更点

このアップグレードでは、ライセンス登録プロセスと接続設定に、互換性を失わせる変更が導入されます。

Db2 Connect 12.1 にアップグレードする場合は、IBM の Features with behavior changes when upgrading to the Db2 Connect 12.1 driver に記載されている新しいライセンス要件、設定手順、および SSL/TLS 設定を確認してください。

この変更には手動による介入が必要です。これは、Red Hat build of Quarkus 3.20 へのアプリケーションの移行 ガイドで説明されている自動更新プロセスには含まれていません。

1.4.4.6. Hibernate ORM の Bean Validation が DDL にデフォルトで影響する

Red Hat build of Quarkus 3.20 では、Hibernate ORM の Bean Validation 統合のデフォルト動作が変更されました。以前は、データ定義言語 (DDL) の生成時に検証制約が考慮されていませんでした。このリリースでは、Hibernate ORM がデフォルトで適用可能な検証制約を DDL に含めるようになりました。これにより、データベーススキーマとアプリケーションレベルの制約の整合性が向上します。

  • 以前の動作に戻し、検証制約が DDL の生成に影響を与えないようにするには、quarkus.hibernate-orm.validation.mode 設定プロパティーを callback に設定します。

    quarkus.hibernate-orm.validation.mode=callback
    Copy to Clipboard Toggle word wrap

quarkus.hibernate-orm.validation.enabled プロパティーも非推奨になりました。

  • Bean Validation の統合を無効にするには、次の設定を使用します。

    quarkus.hibernate-orm.validation.mode=none
    Copy to Clipboard Toggle word wrap

これらの変更の詳細とアプリケーションの移行に関するガイダンスは、Migration Guide 3.19 または次のリソースを参照してください。

1.4.5. ロギング

1.4.5.1. quarkus.log.*.json プロパティーが非推奨に

Red Hat build of Quarkus 3.20 では、quarkus.log.*.json 設定プロパティーが非推奨になりました。ロギングで JSON 形式を有効にするには、代わりに quarkus.log.*.json.enabled プロパティーを使用します。

  • 次のように設定を更新します。

    quarkus.log.console.json.enabled=true
    Copy to Clipboard Toggle word wrap

この変更は、YAML 設定との互換性を向上させるために導入されました。以前の構造では、ルートキーに値を割り当てるために ~ などの特殊な構文を使用する必要がありました。そのため、設定で混乱やエラーが発生しやすくなっていました。

詳細は、Migration Guide 3.19 を参照してください。

1.4.6. 可観測性

1.4.6.1. OpenTelemetry: 開発中のデータベース値が移動される

Red Hat build of Quarkus 3.20 では、quarkus-opentelemetry エクステンションによって互換性を失わせる変更が導入されました。これは、開発中のデータベース値 (Redis に関連する値など) が別のパッケージに移動されたためです。

OpenTelemetry では、データベースのセマンティック規則がまだ安定していないため、変更のリストが保持されていません。

手動計装を使用する場合、この変更によって手動による介入が必要になる可能性があります。これは、Red Hat build of Quarkus 3.20 へのアプリケーションの移行 ガイドで説明されている自動更新プロセスには含まれていません。

1.4.6.2. SmallRye OpenTracing: エクステンションと関連する JDBC トレーシング設定が削除される

Red Hat build of Quarkus 3.20 では、以前非推奨になった quarkus-smallrye-opentracing エクステンションと、関連する設定プロパティー quarkus.datasource.jdbc.tracing が削除されました。

現在は、quarkus-opentelemetry エクステンションが推奨されるトレーシングソリューションです。OpenTelemetry で JDBC トレーシングを有効にするには、次の設定プロパティーを使用します。

quarkus.datasource.jdbc.telemetry=true
Copy to Clipboard Toggle word wrap

移行するには、OpenTracing エクステンションを OpenTelemetry に置き換え、それに応じて設定を更新します。

1.4.7. セキュリティー

1.4.7.1. OIDC クライアント: クライアントに URL がない場合の動作が変更される

Red Hat build of Quarkus 3.20 以降、quarkus-oidc-client エクステンションを使用する場合に、OpenID Connect (OIDC) クライアントが特定の URL を参照するように設定していないと、Dev Services for Keycloak が自動的に開発モードで起動します。

この動作を無効にするには、次のプロパティーを application.properties ファイルに追加します。

quarkus.keycloak.devservices.enabled=false
Copy to Clipboard Toggle word wrap
1.4.7.2. Security WebAuthn: WebAuthn4J を使用した再実装

Red Hat build of Quarkus 3.20 では、セキュリティーの強化、業界標準への準拠、長期的な保守性の向上のために、WebAuthn4J を使用して quarkus-security-webauthn エクステンションが再実装されました。

そのため、この更新は以前のバージョンのエクステンションと互換性がありません。

重要

このリリースノートは、quarkus-security-webauthn エクステンションのユーザー向けに提供されています。Red Hat build of Quarkus 3.20 はまだこのエクステンションをサポートしていませんが、この変更が移行に影響する可能性があることに注意してください。

新しい実装にスムーズに移行するために、次の情報を使用してください。

userName の変更

  • すべての userName の参照が username に置き換えられました。

Authenticator クラスの変更

  • Authenticator クラス (Vert.x からのもの) は使用されなくなり、機能的に WebAuthnCredentialRecord に置き換えられました。この新しいクラスは同様のデータを保持しますが、WebAuthn4J のサブタイプであるため、コンテンツにアクセスするために異なる方法が必要です。

    • WebAuthnCredentialRecord.getRequiredPersistedData() は、必要なすべての永続データを含む RequiredPersistedData レコードを返すため、ストレージ管理が簡素化されます。
    • static メソッドである WebAuthnCredentialRecord.fromRequiredPersistedData(RequiredPersistedData) は、保存されたデータから WebAuthnCredentialRecord を再構築します。
  • アプリケーションが JPA エンティティーまたはデータベーステーブルに Authenticator データを保存する場合は、新しい WebAuthnCredentialRecord フォーマットに移行する必要があります。問題が発生した場合は、プロジェクトのリポジトリーに報告してください。

WebAuthnUserProvider クラスの変更

  • findWebAuthnCredentialsByUserName()findByUsername() になりました。
  • findWebAuthnCredentialsByCredID()findByCredentialId() になりました。
  • updateOrStoreWebAuthnCredentials() が次のように分割されました。

    • update(String credentialId, long counter)
    • store(WebAuthnCredentialRecord credentialRecord)

デフォルトのエンドポイントの変更

  • /q/webauthn/login/q/webauthn/login-options-challenge になりました。
  • /q/webauthn/register/q/webauthn/register-options-challenge になりました。
  • /q/webauthn/callback が次のエンドポイントに分割されました。これらはセキュリティー上の理由からデフォルトでオフになっています。

    • /q/webauthn/login

      有効にするには、quarkus.webauthn.enable-login-endpoint プロパティーを設定します。

    • /q/webauthn/register

      有効にするには、quarkus.webauthn.enable-registration-endpoint プロパティーを設定します。

  • 新しい /q/webauthn/register エンドポイントには、username クエリーパラメーターが必要です。
  • 許可される関連オリジンのリストを返すために、/.well-known/webauthn が追加されました。
  • login および login-options-challenge のユーザー名が任意になりました。
  • /q/webauthn/login-options-challenge エンドポイントと /q/webauthn/register エンドポイントが、POST メソッドから GET メソッドに移行し、JSON ボディーではなくクエリーパラメーターとしてパラメーターを受け入れるようになりました。

WebAuthnSecurity クラスの変更

  • 次の 2 つのメソッドが追加されました。

    • getLoginOptionsChallenge()
    • getRegisterOptionsChallenge()
  • login() および loginOptionsChallenge()username パラメーターが任意になりました。
  • username の Cookie が削除されたため、register() メソッドで username パラメーターが必須になりました。

設定変更

  • quarkus.webauthn.require-resident-key (ブール値、デフォルト: false) が、quarkus.webauthn.resident-key (データ列挙、デフォルト: REQUIRED) に置き換えられました。
  • quarkus.webauthn.challenge-username-cookie-name 設定とそれに関連する Cookie が削除されました。
  • 次の新しい設定が追加されました。

    • quarkus.webauthn.load-metadata (ブール値、デフォルト: false) は、Fast Identity Online (FIDO) メタデータの読み込みを制御します。
    • quarkus.webauthn.user-presence-required (ブール値、デフォルト: true) は、ユーザーの存在が必須かどうかを指定します。
  • quarkus.webauthn.user-verification のデフォルトが、DISCOURAGED ではなく REQUIRED になりました。
  • quarkus.webauthn.timeout のデフォルトが、WebAuthn 標準に従って、1 minute ではなく 5 minutes になりました。
  • quarkus.webauthn.pub-key-cred-paramsquarkus.webauthn.public-key-credential-parameters になりました。
  • quarkus.webauthn.originquarkus.webauthn.origins (複数形) になり、WebAuthn 標準に従って、複数のオリジンをサポートするようになりました。
  • 次の新しいブール型の設定オプションが追加されました。

    • quarkus.webauthn.enable-registration-endpoint (ブール値、デフォルト: false) は、デフォルトの登録エンドポイントを有効にします。
    • quarkus.webauthn.enable-login-endpoint (ブール値、デフォルト: false) は、デフォルトのログインエンドポイントを有効にします。

WebAuthn 認証情報検証の変更

  • WebAuthn 認証情報設定アテステーションの検証は、quarkus.security.webauthn.attestation 設定が NONE (デフォルト) 以外の場合、異なる動作をする可能性があります。

quarkus-test-security-webauthn テストモジュールの変更

  • WebAuthnHardware コンストラクターには、エンドポイントの場所を表す URL パラメーターが必須になりました。この URL は、@TestHTTPResource URL url を使用して、テストクラスから取得できます。
  • WebAuthnEndpointHelper.invokeRegistration()obtainRegistrationChallenge() になりました。
  • WebAuthnEndpointHelper.invokeLogin() が、obtainLoginChallenge() に変更され、オプションの username パラメーターを受け入れるようになりました。
  • WebAuthnEndpointHelper.invokeCallback() が次のように分割されました。

    • WebAuthnEndpointHelper.invokeRegistration() には username パラメーターが必須です。
    • WebAuthnEndpointHelper.invokeLogin() は、オプションの username パラメーターを受け入れます。

JavaScript ライブラリーの変更

  • registerOnly()registerClientSteps() になりました。
  • loginOnly()loginClientSteps() になりました。
  • login()loginClientSteps() が、オプションの user パラメーターを受け入れるようになりました。
  • コンストラクターパラメーター registerPath が、registerOptionsChallengePath (デフォルト: /q/webauthn/register-options-challenge) になりました。
  • コンストラクターパラメーター loginPath が、loginOptionsChallengePath (デフォルト: /q/webauthn/login-options-challenge) になりました。
  • コンストラクターパラメーター callbackPath が次のように分割されました。

    • registerPath (デフォルト: /q/webauthn/register)
    • loginPath (デフォルト: /q/webauthn/login)
  • コンストラクターが、次の 2 つのキーを持つ JsonObject 型の csrf オプションを受け入れるようになりました。

    • header: クロスサイトリクエストフォージェリー対策 (CSRF) トークンを含めるために使用されるヘッダー名を指定します。
    • value: CSRF トークンの値を指定します。

      この更新により、quarkus-rest-csrf エクステンションによって保護されるカスタムエンドポイントのセキュリティーが向上します。詳細は、Quarkus ガイド Cross-Site Request Forgery Prevention を参照してください。

この機能のステータスは、さらなる安定化を図るために preview から experimental にダウングレードされました。

詳細は、Quarkus ガイド Using Security with WebAuthn を参照してください。

この変更には手動による介入が必要です。これは、Red Hat build of Quarkus 3.20 へのアプリケーションの移行 ガイドで説明されている自動更新プロセスには含まれていません。

1.4.8. ツール

1.4.8.1. @WithTestResource の不具合修正: restrictToAnnotatedClass が scope に置き換えられる

以前は、Red Hat build of Quarkus 3.15 に、不具合がある未発表のバージョンの @WithTestResource が同梱されていました。

Red Hat build of Quarkus 3.20 では、この不具合が修正されました。これにより、互換性を失わせる変更が生じました。このリリースでは、以前の restrictToAnnotatedClass フィールドが scope に置き換えられました。

1.4.8.2. JUnit 5 Mockito: デフォルトのモッキングストラテジーがインラインに変更される

以前のリリースでは、quarkus-junit5-mockito 依存関係が、subclass モッキングストラテジーを使用してモックオブジェクトを作成するように設定されていました。

Red Hat build of Quarkus 3.20 以降、この依存関係はデフォルトで inline モッキングストラテジーを使用するように設定されます。

1.4.8.3. Quarkus テストフレームワークでの JUnit 5 Mockito バージョンの調整

Red Hat build of Quarkus 3.20.0 では、依存関係バージョンの意図的な不一致により、quarkus-junit5-mockito 依存関係が一時的に機能しなくなっていました。使用中の Mockito のバージョンには JUnit 5.11 以降が必要でしたが、プラットフォームには JUnit 5.10 が含まれていました。

この問題を解決するために、Red Hat build of Quarkus 3.20.1 では JUnit をバージョン 5.12.1 にアップグレードします。この更新により、JUnit と Mockito のバージョンが調整され、quarkus-junit5-mockito 依存関係の互換性が回復されます。

この更新の影響は最小限になると予想されます。コミュニティーと Camel Quarkus でのテストでは、リグレッションは発生しませんでした。詳細は、関連する問題 https://github.com/quarkusio/quarkus/issues/46858 を参照してください。

注記

quarkus-junit5-mockito エクステンションは、Red Hat build of Quarkus ではサポートもテストもされていません。ここでは、ユーザーがアプリケーションの依存関係にこれを含めている場合に備えて注意しておくために言及しています。

回避策

JUnit 5.12.1 で互換性の問題が発生した場合は、Maven プロジェクトで JUnit バージョンをオーバーライドして、Red Hat build of Quarkus 3.20.0 バージョンを使用できます。

すべての JUnit アーティファクトにわたって一貫したアライメントを確保するには、次のように 3.20.0 で使用される JUnit BOM バージョンをインポートします。

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.junit</groupId>
      <artifactId>junit-bom</artifactId>
      <version>5.10.5</version>
      <scope>import</scope>
      <type>pom</type>
    </dependency>
  </dependencies>
</dependencyManagement>
Copy to Clipboard Toggle word wrap
注記

junit-bom は、Red Hat build of Quarkus 3.20.0 でサポートされているテストライブラリーではありません。BOM を使用して JUnit の依存関係を調整する場合は、JUnit プロジェクトのアップストリームバージョンを使用します。

1.4.9. Web

1.4.9.1. HTTP 圧縮にデフォルトで application/json と application/xhtml+xml が追加される

HTTP 圧縮が有効な場合、quarkus.http.compress-media-types 設定プロパティーで、圧縮するメディアタイプのリストが定義されます。Red Hat build of Quarkus 3.20 では、このプロパティーのデフォルト値が変更されました。新しく圧縮されるメディアタイプに、application/jsonapplication/xhtml+xml が追加されました。

1.4.9.2. REST Client: 検索を最適化するための設定の厳格化

Red Hat build of Quarkus 3.20 では、REST Client の設定がより厳格になり、設定を取得するために必要な検索と組み合わせの数が削減されました。

  • MicroProfile Rest Client の設定スタイル [Simple Class Name]/mp-rest は機能しなくなりました。仕様ではこのスタイルは指定されていません。FQCN/mp-rest スタイルは、MicroProfile Rest Client で指定されたとおりに、引き続き期待どおりに機能します。
  • Red Hat build of Quarkus によって検出された REST Client のみが、RestClientsConfig および RestClientsBuildTimeConfig によってロードされます。
  • RestClientsConfig#clients マップと RestClientsBuildTimeConfig#client マップで、REST Client インターフェイスの完全修飾コレクション名 (FQCN) が常に使用されます。以前は、同じ REST Client の重複エントリーに関連する場合でも、検出されたすべてのキーが使用されていました。
  • 従来の設定名 quarkus.rest.client.max-redirectsquarkus.rest.client.multipart-post-encoder-mode が削除されました。
1.4.9.3. Qute: JSON テンプレートにおけるデフォルトの文字エスケープ

Red Hat build of Quarkus 3.20 以降、quarkus-qute エクステンションは、対応するテンプレートのバリアントが設定されている場合、JSON テンプレート内の二重引用符 (")、バックスラッシュ (\)、および制御文字 (U+0000 から U+001F) を自動的にエスケープします。このエクステンションは、src/main/resources/templates ディレクトリーにあるテンプレートにバリアントを自動的に割り当てます。

デフォルトでは、java.net.URLConnection#getFileNameMap() によってテンプレートファイルのコンテンツタイプが決定されます。quarkus.qute.content-types 設定を使用しすると、追加の接尾辞とコンテンツタイプのマッピングを定義できます。

エスケープされていない値をレンダリングするには、java.lang.Object の拡張メソッドとして実装されている raw プロパティーまたは safe プロパティーを使用するか、文字列値を io.quarkus.qute.RawString クラスでラップします。

詳細は、Quarkus ガイド「Qute reference」の Character escapes セクションを参照してください。

Red Hat build of Quarkus 3.20 では、quarkus-rest-jackson エクステンションにより、修飾子のない ObjectMapperCustomizer Bean のみが Jackson JSON プロセッサーのデフォルトの ObjectMapper インスタンスに適用されます。

以前のバージョンでは、カスタム修飾子を持つものも含め、すべての Customizer Bean がデフォルトの ObjectMapper インスタンスに適用されていました。

この変更には手動による介入が必要です。これは、Red Hat build of Quarkus 3.20 へのアプリケーションの移行 ガイドで説明されている自動更新プロセスには含まれていません。

詳細は、以下の資料を参照してください。

以前のリリースでは、quarkus-rest エクステンションでは、?foo= などの空の値を持つクエリーパラメーターが、次のようにデシリアライズされていました。

  • @RestQuery String foo では、空の文字列 ("") が生成されていました。
  • @RestQuery List<String> foo では、1 つの空の文字列を含むコレクションが生成されていました。

Red Hat build of Quarkus 3.20 では、この動作が次のように変更されました。

  • @RestQuery String foo は、null としてデシリアライズされるようになりました。
  • @RestQuery List<String> foo は、空のコレクションとしてデシリアライズされるようになりました。

これに応じてコードを更新してください。

この変更には手動による介入が必要です。これは、Red Hat build of Quarkus 3.20 へのアプリケーションの移行 ガイドで説明されている自動更新プロセスには含まれていません。

1.4.9.6. WebSocket および WebSocket クライアントエクステンションが非推奨に

Red Hat build of Quarkus 3.20 では、Jakarta WebSocket 仕様を実装する quarkus-websockets および quarkus-websockets-client エクステンションが非推奨になりました。

Red Hat build of Quarkus は、今後のリリースでこれらのエクステンションのサポートを停止する予定です。

今後のバージョンとの互換性を確保するには、Quarkus WebSockets Next エクステンション (quarkus-websockets-next) に移行してください。このエクステンションは、より効率的な最新の WebSocket API を提供します。

詳細は、次の Quarkus リソースを参照してください。

この変更には手動による介入が必要です。これは、Red Hat build of Quarkus 3.20 へのアプリケーションの移行 ガイドで説明されている自動更新プロセスには含まれていません。

法律上の通知

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat
トップに戻る