7.3.3 SagaでのSpring RESTベース・アプリケーションの開発

Sagaトランザクション・プロトコルを使用するSpring RESTベースのアプリケーションでは、MicroTxによって提供されるJavaライブラリ・ファイルを使用する必要があります。

Spring RESTベースのアプリケーションのMicroTxライブラリのリファレンス情報は、Oracle® Transaction Manager for Microservices Spring Boot APIリファレンスfor Sagaを参照してください。

Spring RESTベースのアプリケーションのMicroTxライブラリ・ファイルおよびプロパティ値を含めるには:

  1. MicroTx Javaライブラリ・ファイルをSpring RESTベースのアプリケーションのpom.xmlファイルにmaven依存関係として含めます。次のサンプル・コードは23.4.1リリース用です。使用するリリース・バージョンに基づいて、正しいバージョンを指定してください。

    Spring Boot 3.xアプリケーションは、Jakarta EE9環境のJava 17で動作します。

    <dependency>
         <groupId>com.oracle.microtx.lra</groupId>
         <artifactId>microtx-lra-spring-boot-starter</artifactId>
         <version>23.4.1</version>
    </dependency>
  2. アプリケーションのapplication.propertiesファイルで、MicroTxライブラリ・プロパティの値を指定します。これにより、カスタム・ライブラリは、MicroTx Sagaコーディネータとの通信を確立し、Sagaトランザクションに参加して、調整されたトランザクションに関連するヘッダーを伝播できます。「JavaアプリケーションのMicroTxライブラリ・プロパティの構成」を参照してください。
  3. com.oracle.microtx.springboot.lra.annotation.*パッケージをインポートします。
    import com.oracle.microtx.springboot.lra.annotation.*
  4. オプション。次のステップは、SpringベースのREST参加側アプリケーションのメソッドを非同期で実行する場合にのみ実行します。コールされた参加側のメソッドが完全に実行されるまで待機してから別のメソッドをコールするかわりに、Async注釈を使用して、各メソッドを分離スレッドとして実行できます。
    1. com.oracle.microtx.springboot.lra.annotation.*パッケージをインポートします。
      import com.oracle.microtx.springboot.lra.annotation.*
    2. Springフレームワークで使用可能なSimpleAsyncTaskExecutorクラスをオーバーライドする、一意の名前のエグゼキュータBeanを作成します。エグゼキュータBeanの作成時に、MicroTxライブラリの一部であるMicroTxTaskDecoratorという名前のタスク・デコレータを設定する必要があります。次の例は、taskExecutorForTripBookingという名前のBeanを作成してから、MicroTxTaskDecorator (MicroTxタスク・デコレータ)を設定する方法を示しています。

      このタスクは、非同期で実行する各メソッドに対して実行します。

      コード例

      @Bean(name = "taskExecutorForTripBooking")
        public Executor asyncExecutor()
          {
              ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
              ... // application-specific code
              executor.setTaskDecorator(new MicroTxTaskDecorator());
              ... // application-specific code
              return executor;
          }

      Beanの名前を@Async注釈の属性として指定する必要があるため、この名前を書き留めます。

      アプリケーション・コードにすでにタスク・デコレータが含まれている場合は、新しいタスク・デコレータを作成するかわりに、MicroTxTaskDecoratorクラスのロジックを既存のタスク・デコレータに追加できます。

    3. 別のスレッドで実行するメソッドに@Async注釈を付けます。valueには、次の例に示すように、前のステップで作成したエグゼキュータBeanの名前を指定します。

      コード例

      @Async(value = "taskExecutorForTripBooking")
      @Override
      public CompletableFuture bookHotel(String name, String id) 
          {
      	//Code to implement the application's business logic
          }
MicroTxライブラリを使用するサンプルSpring RESTベースのトランザクション・イニシエータ・アプリケーションのソース・コードは、microtx-samples GitHubリポジトリのtrip-manager-springbootフォルダにあります。MicroTxライブラリを使用するサンプルSpring RESTベースのトランザクション参加側アプリケーションのソース・コードは、microtx-samples GitHubリポジトリのhotel-springbootフォルダにあります。これらのファイルは、MicroTxライブラリとアプリケーションの統合時に参照として使用できます。