7.14.7.5 TmmStart関数

グローバル・トランザクションでMicroTx XAコーディネータを使用してトランザクション参加側サービスを登録し、XAトランザクション境界を起動し、コールバックREST APIを登録して、トランザクション・メタデータを返します。

構文

TmmStart (
   callBackUrl        IN VARCHAR2, 
   linkUrl            IN VARCHAR2,
   requestId          IN VARCHAR2,
   authorizationToken IN VARCHAR2,
   tmmTxToken         IN VARCHAR2)
RETURN TmmReturn;

TmmStart関数のパラメータ

パラメータ 説明
callBackUrl

必須。参加側サービスのURLを入力し、ORDS RESTモジュールの名前で接尾辞を付けます。MicroTxは、指定したURLを使用して参加側ORDSサービスに接続します。たとえば、http://tmm-app:8080/ords/otmm/accountsです。ここで、/accountsはORDS RESTモジュール・エンドポイントです。

linkUrl 必須。
requestId 必須。マイクロサービス間でトランザクションをトレースするための一意のID。
authorizationToken 必須。

コーディネータのvalues.yamlファイルでtmmConfiguration.authorization.authTokenPropagationEnabledtrueに設定して認可を有効にした場合、アプリケーションは認可トークンを転送する必要があります。

tmmTxToken 必須。

コーディネータのvalues.yamlファイルでtmmConfiguration.transactionToken.transactionTokenEnabledtrueに設定した場合、アプリケーションはトランザクション・トークンを転送する必要があります。

戻り値

TmmStart関数は、トランザクション・メタデータを持つTmmReturnオブジェクトを返します。TmmReturnオブジェクトには属性proceedがあり、これはTmmStart関数が正常に実行されたかどうか、トランザクションが進行できるかどうかを示します。

TmmReturn.proceed 意味
0 XAトランザクション内でTmmStart関数がコールされましたが、XAの初期化は成功しませんでした。つまり、アプリケーション・コードでXAトランザクションを進めることはできません。
1 XAトランザクション内でTmmStart関数がコールされ、XAの初期化が成功しました。つまり、アプリケーション・コードでXAトランザクションを進める必要があります。
2 MicroTx XAトランザクションがなく、ローカル・トランザクション内で関数が実行されています。つまり、アプリケーション・コードを通常どおりに進めます。

次のサンプル・コード・スニペットは、TmmStart関数をコールして値を渡す方法を示しています。これはMicroTxTransactionオブジェクトを返します。

..
//In the example callback URL below, account is the name of the ORDS REST module. 
l_callBackUrl VARCHAR2(256) := get_microtx_config(''callback-url'') || ''/accounts'';
//Call the TmmStart function to initiate the transaction. Pass the parameters, other than callBackUrl, as shown in the example below.
l_microTxTransaction := TmmStart(callBackUrl => l_callBackUrl, linkUrl => :linkUrl, requestId => :requestId, authorizationToken => :authorization, tmmTxToken => :tmmTxToken);
//Check if the transaction should proceed or not
IF (l_microTxTransaction.proceed > 0) THEN       
//Run the application's business logic
...
END IF;

後で指定してトランザクション・ステータスの取得、トランザクションのコミットまたはロールバックを行うため、戻り値の名前を書き留めます。