9.5.2 トランザクション参加側としてのSpring Bootアプリケーションの構成

  1. MicroTxライブラリのプロパティ値を指定します。ライブラリ・プロパティの構成を参照してください。
  2. 次のMicroTxライブラリ・ファイルをJDBCアプリケーションのpom.xmlファイルにmaven依存関係として含めます。次のサンプル・コードは24.4リリース用です。使用するリリース・バージョンに基づいて、正しいバージョンを指定してください。Spring Boot 3.xアプリケーションは、Java 17で動作します。
    <dependency>
         <groupId>com.oracle.microtx</groupId>
         <artifactId>microtx-spring-boot-starter</artifactId>
         <version>24.4</version>
    </dependency>
  3. 次のパッケージをインポートします。
    import com.oracle.microtx.tcc.MicroTxTccClient;
    import com.oracle.microtx.tcc.annotation.TCC;
  4. トランザクション参加側アプリケーション・コードにTCC注釈を挿入します。
    参加側サービスが既存のTCCトランザクションに参加できるようにするには、トランザクション参加側サービスのリソース・クラスの前に@TCC注釈を追加します。

    次のコードをトランザクション参加側コードに挿入します。次の例では、myTransactionParticipantAppクラスにトランザクション参加側サービスのコードが含まれています。ご自身の環境に基づいてクラス名を置き換えます。

    @Path("/")
    @TCC(timeLimit = 120, timeUnit = ChronoUnit.SECONDS)
    //Add @TCC annotation so that the transaction participant service joins an existing TCC transaction
    //The transaction initiator service passes the TCC context in the request header.
    public class myTransactionParticipantApp {
        // Service code that is specific to the transaction participant service. 
    }
  5. MicroTxライブラリによって提供されるSpring Boot RestTemplateを自動設定します。このオブジェクトを使用して、他のTCCトランザクション参加側サービスのエンドポイントをコールします。
    @Autowired
    @Qualifier("MicroTxTccRestTemplate")
    RestTemplate restTemplate;
  6. トランザクション参加側アプリケーション・コードで、MicroTxTccClientオブジェクトを注入してから、addTccParticipant(String uri)メソッドをコールして、参加側サービスをTCCトランザクションに登録します。参加側サービスは、MicroTxがトランザクションの確定または取消しに使用するURIを公開します。MicroTxは、トランザクションを確定するためにPUTメソッドをコールし、トランザクションを取り消して予約済リソースを解放するためにDELETEメソッドをコールします。これらのメソッドが存在し、確定と取消しのロジックが実装されていることを確認します。トランザクションを確定または取り消すために、MicroTxはすべての参加側サービスの公開URIにコールを送信します。

    次のコード例は、参加側アプリケーション・コードに加える必要がある変更を示しています。

    
    @TCC
    public class myTransactionParticipantApp {
        // Service code that is specific to the transaction participant service.
    
        @Autowired
        @Qualifier("MicroTxTccRestTemplate")
        RestTemplate restTemplate;
    
        @Autowired
        MicroTxTccClient tccClientService;
    
        @POST
        //The REST endpoint of the transaction participant service.
        @Path("bookings")
        @Consumes(MediaType.APPLICATION_JSON)
        public Response create() throws TccUnknownTransactionException
        // Business logic to create a booking.
          String bookingUri;
          // Register participant service with the TCC transaction
          tccClientService.addTccParticipant(bookingUri.toString());
        }
    
        @PUT
        @Path("bookings/{bookingId}")
        @Consumes(MediaType.APPLICATION_JSON)
        public Response confirm() throws TccUnknownTransactionException {
        //Application-specific code to confirm the booking.
        }
     
        @DELETE
        @Path("bookings/{bookingId}")
        @Consumes(MediaType.APPLICATION_JSON)
        public Response cancel() throws TccUnknownTransactionException {
        //Application-specific code to cancel the booking.
        }          
    }

    説明

    • myTransactionParticipantAppは、トランザクション参加側サービスのコードを含むクラスです。このクラスには、参加側サービスがトランザクションの確定または取消しに使用するユーザー定義メソッドがすでに含まれています。
    • bookingsは、トランザクション参加側サービスのRESTエンドポイントです。トランザクション・イニシエータ・サービスがこのエンドポイントをコールして、ホテル予約の作成などのタスクを実行します。
    • bookingUriには、参加側サービスが公開するリソースURIと、MicroTxがトランザクションの確定または取消しに使用するリソースURIが含まれます。
    • bookingIdは、確定するか取り消す予約の一意IDです。
  7. 変更内容を保存します。

このような変更をすべてのトランザクション参加側アプリケーションのコードで行ってください。

MicroTxライブラリを使用するサンプルSpring RESTトランザクション参加側アプリケーションのソース・コードは、microtx-samples GitHubリポジトリにあるflight-booking-springbootフォルダにあります。これは、MicroTxライブラリとアプリケーションの統合時に参照として使用できます。