9.6.2 トランザクション参加側としてのJAX-RSアプリケーションの構成

開始する前に、MicroTxライブラリのプロパティ値を構成していることを確認してください。

  1. MicroTx Javaライブラリ・ファイルをアプリケーションのpom.xmlファイルにmaven依存関係として含めます。次のサンプル・コードは24.4リリース用です。使用するリリース・バージョンに基づいて、正しいバージョンを指定してください。
    • Helidon 2.xなどのJakarta EE8環境では、TmmLibファイルを使用します。

      <dependency>
           <groupId>com.oracle.tmm.jta</groupId>
           <artifactId>TmmLib</artifactId>
           <version>24.4</version>
      </dependency>
    • Helidon 3.xアプリケーションなどのJakarta EE9環境では、TmmLib-jakartaファイルを使用します。

      <dependency>
           <groupId>com.oracle.tmm.jta</groupId>
           <artifactId>TmmLib-jakarta</artifactId>
           <version>24.4</version>
      </dependency>
  2. 次のパッケージをインポートします。
    import oracle.trm.tcc.annotation.TCC;
    import javax.ws.rs.core.Application;
  3. トランザクション参加側アプリケーション・コードに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 extends Application {
        // Service code that is specific to the transaction participant service. 
    }
  4. トランザクション参加側アプリケーション・コードで、tccClientServiceオブジェクトを注入してから、このオブジェクトでaddTccParticipant(String uri)メソッドをコールして、参加側サービスをTCCトランザクションに登録します。参加側サービスは、MicroTxがトランザクションの確定または取消しに使用するURIを公開します。MicroTxは、トランザクションを確定するためにPUTメソッドをコールし、トランザクションを取り消して予約済リソースを解放するためにDELETEメソッドをコールします。これらのメソッドが存在し、確定と取消しのロジックが実装されていることを確認します。トランザクションを確定または取り消すために、MicroTxはすべての参加側サービスの公開URIにコールを送信します。

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

    
    public class myTransactionParticipantApp extends Application {
        // Service code that is specific to the transaction participant service.
    
        @Inject
        TccClientService 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です。
  5. 変更内容を保存します。
このような変更をすべてのトランザクション参加側サービスのコードで行ってください。
MicroTxライブラリを使用するサンプルJAX-RSトランザクション参加側アプリケーションのソース・コードは、microtx-samples GitHubリポジトリにあるFlightBookingAppResource.javaファイルにあります。これは、MicroTxライブラリとアプリケーションの統合時に参照として使用できます。