8.5.1 トランザクション・イニシエータとしてのSpring RESTアプリケーションの構成

  1. MicroTxライブラリのプロパティ値を指定します。ライブラリ・プロパティの構成を参照してください。
  2. 次のMicroTxライブラリ・ファイルをJDBCアプリケーションのpom.xmlファイルにmaven依存関係として含めます。次のサンプル・コードは24.2リリース用です。使用するリリース・バージョンに基づいて、正しいバージョンを指定してください。Spring Boot 3.xアプリケーションは、Java 17で動作します。
    <dependency>
         <groupId>com.oracle.microtx</groupId>
         <artifactId>microtx-spring-boot-starter</artifactId>
         <version>24.2</version>
    </dependency>
  3. 次のパッケージをインポートします。
    import com.oracle.microtx.tcc.MicroTxTccClient;
    import com.oracle.microtx.tcc.annotation.TCC;
    import oracle.tmm.tcc.TccParticipantStatus;
    import oracle.tmm.tcc.exception.TccException;
    import oracle.tmm.tcc.exception.TccHeuristicException;
    import oracle.tmm.tcc.exception.TccUnknownTransactionException;
    import oracle.tmm.tcc.vo.CancelResponse;
    import oracle.tmm.tcc.vo.ConfirmResponse;
    import oracle.tmm.tcc.vo.TccParticipant;
  4. イニシエータ・アプリケーション・リソース・クラスの前に@TCC注釈を追加します。これにより、新しいTCCトランザクションが開始され、トランザクション・イニシエータからのすべての送信REST APIリクエストにヘッダーが追加されます。

    次のコードを使用して、トランザクション・イニシエータ・サービスに対してコールが行われたときに新しいTCCトランザクションを開始します。次の例では、サービスを開始するコードがクラスmyTransactionInitiatorAppに含まれています。ご自身の環境に基づいてクラス名を置き換えます。

    @TCC(timeLimit = 120, timeUnit = ChronoUnit.SECONDS)  //Add @TCC annotation before the initiator application resource class to start a TCC transaction
    public class myTransactionInitiatorApp {
        // Service code that is specific to the transaction initiator service.
    }

    @TCC注釈を使用して、次のオプション・パラメータを指定できます。

    • timeLimit: トランザクション・イニシエータ・サービスでリソースを予約する期間を整数で指定します。期限切れになった後でリソースを解放してTCCトランザクションのその部分を取り消すために必要なコードを用意するのは、アプリケーション開発者の責任です。業務要件に基づいて期限を決めてください。
    • timeUnit: 指定する期限の単位(ChronoUnit.SECONDSChronoUnit.MINUTESなど)を指定します。指定できる値は、java.time.temporal.ChronoUnitクラスのすべての列挙値です。https://docs.oracle.com/javase/8/docs/api/java/time/temporal/ChronoUnit.htmlを参照してください。
  5. MicroTxライブラリによって提供されるSpring Boot RestTemplateを自動設定します。このオブジェクトを使用して、他のTCCトランザクション参加側サービスのエンドポイントをコールします。トランザクション・イニシエータ・サービスはトランザクションを開始します。トランザクションを完了するために、イニシエータ・サービスは1つ以上の参加側サービスをコールする必要があります。参加側サービスをコールするときに、作成したオブジェクトを使用します。
    @Autowired
    @Qualifier("MicroTxTccRestTemplate")
    RestTemplate restTemplate;
  6. トランザクション・イニシエータ・アプリケーション・コードで、MicroTxTccClientオブジェクトを注入してから、注入されたオブジェクトを使用してトランザクションを確認または取り消します。

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

    
    @TCC
    public class myTransactionParticipantApp {
        // Service code that is specific to the transaction participant service.
    
        @Autowired
        @Qualifier("MicroTxTccRestTemplate")
        RestTemplate restTemplate;
    
        @Autowired
        MicroTxTccClient tccClientService;
        ...          
    }
  7. 変更内容を保存します。
MicroTxライブラリを使用するサンプルSpring RESTトランザクション・イニシエータ・アプリケーションのソース・コードは、microtx-samples GitHubリポジトリにあるtravel-agent-springbootフォルダにあります。これは、MicroTxライブラリとアプリケーションの統合時に参照として使用できます。