6.7 XAでのSpring RESTアプリケーションの開発
Spring RESTアプリケーションでMicroTxライブラリを使用します。
- Spring RESTアプリケーションのライブラリ・プロパティの構成
すべてのSpring RESTアプリケーションのMicroTxライブラリ・プロパティの構成情報を指定します。指定する必要があるプロパティ値は、アプリケーションが参加側であるかイニシエータであるかに応じて異なります。 - トランザクション・イニシエータとしてのSpring RESTアプリケーションの構成
トランザクション・イニシエータ・サービスは、トランザクションを開始します。トランザクション・イニシエータ・サービスは、アプリケーションのビジネス・ロジックに基づいて、トランザクションの開始のみ、またはトランザクションの開始とトランザクションへの参加を行うことができます。 - トランザクション参加側としてのSpring RESTアプリケーションの構成
リソース・マネージャがXAに準拠しているかどうかに基づいて、環境変数を設定し、MicroTxライブラリの様々なクラスを実装してSpring REST参加側アプリケーションを構成します。
親トピック: XAでのアプリケーションの開発
6.7.1 Spring RESTアプリケーションのライブラリ・プロパティの構成
すべてのSpring RESTアプリケーションのMicroTxライブラリ・プロパティの構成情報を指定します。指定する必要があるプロパティ値は、アプリケーションが参加側であるかイニシエータであるかに応じて異なります。
application.yaml
ファイルでMicroTxライブラリのプロパティ値を指定します。
-
spring.microtx.coordinator-url
: MicroTxコーディネータにアクセスするためのURLを入力します。「MicroTxへのアクセス」を参照してください。この値はトランザクション・イニシエータ・アプリケーションの場合に入力する必要があります。トランザクション参加側アプリケーションの場合、この値を指定する必要はありません。 -
spring.microtx.participant-url
: 参加側サービスのURLを入力します。MicroTxは、指定されたURLを使用して参加側サービスに接続します。この値を次の形式で指定します。https://externalHostnameOfApp:externalPortOfApp/
説明externalHostnameOfApp
: イニシエータ・サービスまたは参加側サービスの外部ホスト名。たとえば、bookTicket-app
です。externalPortOfApp
: 参加側サービスにリモートでアクセスできるポート番号。たとえば、8081
です。
たとえば、
https://bookTicket-app:8081
です。 -
spring.microtx.propagation-active
: トランザクションを全面的にトレースする場合は、これをtrue
に設定します。これにより、すべての受信リクエストおよび送信リクエストのトレース・ヘッダーが伝播されます。 -
spring.microtx.http-client-connection-pool-size
: MicroTxライブラリへの接続数をMicroTxに入力します。デフォルト(最小)の接続数は10です。最大値は20です。この値は、サービスが実行する問合せ数に応じて変更できます。この値はイニシエータ・アプリケーションと参加側アプリケーションの両方に指定します。 spring.microtx.xa-transaction-timeout
: トランザクションをアクティブにしておく最長期間(ミリ秒)を指定します。トランザクションのコミットまたはロールバックが指定した期間内に行われないと、トランザクションはロールバックされます。デフォルト(最小)値は60000です。この値はイニシエータ・アプリケーションと参加側アプリケーションの両方に指定します。spring.microtx.xa-resource-manager-id
: XAトランザクションで使用するリソース・マネージャごとに一意の文字列値を指定します。RMIDとして指定する一意の値は、MicroTxがリソース・マネージャを識別するために使用されます。複数の参加側が同じリソース・マネージャを使用する場合、リソース・マネージャを共有する参加側に対して同じリソース・マネージャIDを指定します。この値は、データ・ストアのプロパティとは関係ありません。たとえば、174A5FF2-D8B2-47B0-AF09-DA5AFECA2F71
です。spring.microtx.xa-xa-support
: XA準拠リソースを使用する場合は、これをtrue
に設定します。これをfalse
に設定するのは、非XAリソースを使用する単一のトランザクション参加側サービスに対してのみです。デフォルト値はtrue
です。xa-xa-support
がtrue
に設定されると、xa-llr-support
およびxa-lrc-support
に設定された値は無視されます。spring.microtx.xa-llr-support
: ロギング・ラスト・リソース(LLR)の最適化を有効にするには、これをtrue
に設定します。この値は、非XAリソースをリソース・マネージャとして使用するトランザクション参加側サービスについてのみ設定します。デフォルト値はfalse
です。xa-llr-support
がtrue
に設定されると、xa-lrc-support
に設定された値は無視されます。このプロパティ値を
true
に設定した場合にのみ、xa-llr-delete-commit-record-interval
プロパティの値も指定できます。コミットされたレコードを保持する最長期間(ミリ秒)を指定します。デフォルト値は7,200,000ミリ秒または2時間です。ローカル・コミットを実行する前に、トランザクション・コーディネータはLLRブランチにコミット・レコードを作成します。コミット・レコードは、xa-llr-delete-commit-record-interval
プロパティで指定された期間の後に削除されます。この値は、非XAリソースをリソース・マネージャとして使用するサービスについてのみ指定します。spring.microtx.xa-lrc-support
: ラスト・リソース・コミット(LRC)の最適化を有効にするには、これをtrue
に設定します。この値は、非XAリソースをリソース・マネージャとして使用するトランザクション参加側サービスについてのみ設定します。デフォルト値はfalse
です。spring.microtx.xa-promotable-active
: ローカル・トランザクションを有効にするか、コーディネータを使用せずに特定のトランザクションをローカルで管理するには、これをtrue
に設定します。この値は、トランザクションにも参加するトランザクション・イニシエータ・サービスに対してのみ指定します。デフォルト値は
false
です。xa-promotable-active
の値をfalse
に設定すると、すべてのトランザクションがデフォルトでグローバル・トランザクションとして開始され、GTRIDに関連付けられます。ローカル・トランザクションは開始されません。「グローバルおよびローカル・トランザクションについて」を参照してください。spring.microtx.xa-rac-active
: これをtrue
に設定するのは、Oracle Real Application Clusters (RAC)データベースをリソース・マネージャとして使用するトランザクション参加側サービスに対してのみです。デフォルト値はfalse
です。
spring:
microtx:
coordinator-url: http://tmm-app:9000/api/v1
participant-url: https://bookTicket-app:8081
propagation-active: true
http-client-connection-pool-size: 60
xa-transaction-timeout: 60000
xa-xa-support: true
xa-llr-support: false
xa-lrc-support: false
xa-llr-delete-commit-record-interval: 720000
xa-resource-manager-id: 174A5FF2-D8B1-47B0-AF09-DA5AFECA2F61
xa-promotable-active: false
xa-rac-active: false
アプリケーションとMicroTxが同じKubernetesクラスタ内にある場合はHTTPプロトコルを使用し、それ以外の場合はHTTPSプロトコルを使用します。
これらの構成値を環境変数として指定することもできます。application.yaml
ファイルと環境変数の両方に値を指定した場合、環境変数に設定されている値がプロパティ・ファイルの値をオーバーライドすることに注意してください。
次の例は、環境変数を構成するためのサンプル値を示しています。
export SPRING_MICROTX_COORDINATOR_URL = http://tmm-app:9000/api/v1
export SPRING_MICROTX_PARTICIPANT_URL = http://bookTicket-app:8081
export SPRING_MICROTX_PROPAGATION_ACTIVE = true
export SPRING_MICROTX_HTTP_CLIENT_CONNECTION_POOL_SIZE = 15
export SPRING_MICROTX_XA_TRANSACTION_TIMEOUT = 60000
export SPRING_MICROTX_XA_XA_SUPPORT = true
export SPRING_MICROTX_XA_LLR_SUPPORT = false
export SPRING_MICROTX_XA_LLR_DELETE_COMMIT_RECORD_INTERVAL = 720000
export SPRING_MICROTX_XA_LRC_SUPPORT = false
export SPRING_MICROTX_XA_RESOURCE_MANAGER_ID = 174A5FF2-D8B1-47B0-AF09-DA5AFECA2F61
export SPRING_MICROTX_PROMOTABLE_ACTIVE = false
export SPRING_MICROTX_XA_RAC_ACTIVE = false
環境変数名では大/小文字が区別されることに注意してください。
親トピック: XAでのSpring RESTアプリケーションの開発
6.7.2 トランザクション・イニシエータとしてのSpring RESTアプリケーションの構成
トランザクション・イニシエータ・サービスは、トランザクションを開始します。トランザクション・イニシエータ・サービスは、アプリケーションのビジネス・ロジックに基づいて、トランザクションの開始のみ、またはトランザクションの開始とトランザクションへの参加を行うことができます。
開始する前に、アプリケーションがトランザクションを開始するだけか、トランザクションを開始して参加するのかを確認します。2つのシナリオでは要件が若干異なるため、それに応じてアプリケーションを構成します。
- シナリオ1: 銀行振込アプリケーションによって、ある部門から別の部門に送金します。この場合、振込アプリケーションはトランザクションを開始するだけで、トランザクションには参加しません。振込アプリケーションは、トランザクションを完了するためにビジネス・ロジックに基づいて様々なサービスをコールします。データベース・インスタンスは、振込アプリケーションにアタッチされる場合とアタッチされない場合があります。
- シナリオ2: 銀行振込アプリケーションによって、ある部門から別の部門に送金します。振込アプリケーションは、トランザクションごとに手数料として1%を請求します。この場合、振込アプリケーションはトランザクションを開始して参加します。データベース・インスタンスは、トランザクション情報を保存するために振込アプリケーションにアタッチされる必要があります。
installation_directory\otmm-RELEASE\samples\xa\java\teller-as-participant-spring
にあります。これは、Spring RESTイニシエータ・アプリケーションのビジネス・ロジックでMicroTx Spring RESTライブラリを使用する方法の例です。このサンプル・アプリケーションは振込(Teller)という名前です。これは2つの部門間のトランザクションを開始します。部門Aをコールして一定金額を引き出し、部門Bをコールして預け入れます。
親トピック: XAでのSpring RESTアプリケーションの開発
6.7.3 トランザクション参加側としてのSpring RESTアプリケーションの構成
リソース・マネージャがXAに準拠しているかどうかに基づいて、環境変数を設定し、MicroTxライブラリの様々なクラスを実装してSpring REST参加側アプリケーションを構成します。
ノート:
トランザクションに参加するすべてのREST APIで、レスポンス本文がnull
ではないことを確認してください。
- XA準拠リソース・マネージャを使用するSpring RESTアプリケーションの構成
XA準拠のリソース・マネージャを使用する場合は、この項に記載されている情報を使用してSpring RESTベースの参加側アプリケーションを構成します。 - 複数のXA準拠リソース・マネージャを使用するSpring RESTアプリケーションの構成
複数のXA準拠のリソース・マネージャを使用する場合は、この項に記載されている情報を使用してSpring REST参加側アプリケーションを構成します。 - 非XA JDBCリソースを使用するSpring RESTアプリケーションの構成
XAをサポートしないJDBCリソースを使用する場合は、この項に記載されている情報を使用してSpring REST参加側アプリケーションを構成します。 - 非XAかつ非JDBCのリソースを使用するSpring RESTアプリケーションの構成
XAもJDBCもサポートしないリソースを使用する場合は、この項に記載されている情報を使用してSpring REST参加側アプリケーションを構成します。 - XA準拠リソース・マネージャを使用するJPAベースのSpring RESTアプリケーションの構成
XA準拠のリソース・マネージャを使用する場合は、この項に記載されている情報を使用して、XAトランザクションに参加するHelidonまたはSpring RESTアプリケーションのJPAプロバイダとしてHibernateまたはEclipseLinkを構成します。
親トピック: XAでのSpring RESTアプリケーションの開発
6.7.3.1 XA準拠リソース・マネージャを使用するSpring RESTアプリケーションの構成
XA準拠のリソース・マネージャを使用する場合は、この項に記載されている情報を使用してSpring RESTベースの参加側アプリケーションを構成します。
6.7.3.2 複数のXA準拠リソース・マネージャを使用するSpring RESTアプリケーションの構成
複数のXA準拠のリソース・マネージャを使用する場合は、この項に記載されている情報を使用してSpring REST参加側アプリケーションを構成します。
6.7.3.3 非XA JDBCリソースを使用するSpring RESTアプリケーションの構成
XAをサポートしないJDBCリソースを使用する場合は、この項に記載されている情報を使用してSpring REST参加側アプリケーションを構成します。
6.7.3.4 非XAかつ非JDBCのリソースを使用するSpring RESTアプリケーションの構成
XAもJDBCもサポートしないリソースを使用する場合は、この項に記載されている情報を使用してSpring REST参加側アプリケーションを構成します。
6.7.3.5 XA準拠リソース・マネージャを使用するJPAベースのSpring RESTアプリケーションの構成
XA準拠のリソース・マネージャを使用する場合は、この項に記載されている情報を使用して、XAトランザクションに参加するHelidonまたはSpring RESTアプリケーションのJPAプロバイダとしてHibernateまたはEclipseLinkを構成します。