BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Quarkus2.8.0がきめ細かく制御できるトランザクションAPIを導入

Quarkus2.8.0がきめ細かく制御できるトランザクションAPIを導入

ブックマーク

原文(投稿日:2022/05/05)へのリンク

RedHatはQuarkus 2.8.0をリリースした。Quarkus 2.8.0では、デフォルトでRESTEasy Reactive RESTレイヤとGraalVM 22.0との統合が提供される。きめ細かく設定できるプログラマティックトランザクションAPIを使うと、トランザクションをより細かく制御できるようになる。

Quarkus 1.11ではRESTEasy Reactive統合が導入された。この統合は、JAX-RSのリアクティブな実装であり、Vert.xで実装されている。このバージョンでは、RESTEasy Reactiveがデフォルトの実装になり、ブロッキングとリアクティブコールをサポートする。これは、エンドポイントのリターンタイプに応じて自動的に選択される。たとえば、Studentを返すとエンドポイントがブロッキングとなり、Uni<Student>を返すとエンドポイントがリアクティブになる。最近まで、デフォルトのRESTレイヤはRESTEasy Classicであった。これは、プロジェクトの依存関係に手動で追加することで引き続き使用できる。

RESTサーバのすべてのquarkus-resteasy*依存関係をquarkus-resteasy-reactive*依存関係に置き換える必要がある。ただし、機能がRESTEasy Reactiveに統合されているため、quarkus-resteasy-mutiny依存関係を除く。その後、org.jboss.resteasy.annotations.jaxrs.QueryParamなどのさまざまなアノテーションを、org.jboss.resteasy.reactive.RestQueryなどのorg.jboss.resteasy.reactive*アノテーションに置き換える必要がある。

同様に、RESTクライアントの実装では、quarkus-rest-client*依存関係を新しいquarkus-rest-client-reactive*依存関係に置き換える必要がある。

RESTEasy Reactive移行ガイドリファレンスガイドでは、さらに詳細の移行ガイドが提供されている。

QuarkusTransaction APIでは、トランザクションを制御するプログラムAPIが利用できるようになった。begin()メソッドとcommit()メソッドを明示的に呼び出すことで使用できる。

QuarkusTransaction.begin();
// implementation
QuarkusTransaction.commit();

このトランザクションはCDIリクエストスコープに関連付けられている。例外によってリクエストスコープが破棄されるたびに自動的にロールバックされる。あるいは、タイムアウトでトランザクションを開始し、タイムアウトが発生するたびにロールバックすることもできる。

QuarkusTransaction.begin(QuarkusTransaction.beginOptions()
    .timeout(42));
// implementation
QuarkusTransaction.rollback();

Lambdaスコープのトランザクションでは、別の代替手段が提供されている。トランザクション内でRunnable を実行することで使用できる。

QuarkusTransaction.run(() -> {
	// implementation
});

あるいは、例外処理と列挙セマンティクスDISALLOW_EXISTINGJOIN_EXISTINGSUSPEND_EXISTINGREQUIRE_NEW(デフォルト)をサポートするCallableソリューションを使うこともできる。

int answer = QuarkusTransaction.call(QuarkusTransaction.runOptions()
    .timeout(21)
    .exceptionHandler((throwable) -> {
    if (throwable instanceof RuntimeException) {
        return RunOptions.ExceptionResult.COMMIT;
    }
    return RunOptions.ExceptionResult.ROLLBACK;
    })
    .semantic(RunOptions.Semantic.REQUIRE_NEW), () -> {
    // implementation
    return 42;
});

GraalVM 22.0は、Quarkus 2.7リリースですでにサポートされているが、これがデフォルトで使用されるようになった。これにより、ネイティブイメージを構築する際のロギングが改善された。

Quarkusでは、OpenID Connect(OIDC)向けにProof Of Key for Code Exchange(PKCE)がサポートされるようになった。これはOAuth 2.0プロトコルの上位にあるIDレイヤである。PKCEはOAuth 2.0の拡張機能である。これは、パブリッククライアントがアクセストークンを要求する際のセキュリティの脅威を軽減するためのものである。

メンテナンス担当者は部品表(BOM)からAssertJ を削除することを決定した。新しいバージョンでは多くがバイナリ互換性が失われたためである。プロジェクトで、現在最新バージョンであるAssertJ 3.22.0を明示的に宣言する必要がある。

Elasticsearch Dev Servicesでは、開発でテストを実行するとElasticsearchコンテナが自動的に起動する。Elasticsearch拡張機能を使うと、たとえばquarkus.devservices.enabledfalseに設定して明示的に無効にしない限り、テストモードで起動する。

Quarkusは、バージョン2.8.0へ簡単に移行するための移行ガイドを提供している。

作者について

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

BT