7.4 LRAでのNode.jsアプリケーションの開発

Node.jsのMicroTxライブラリは、新しいLRAトランザクションを開始したり、既存のLRAトランザクションに参加したりする機能を提供します。このライブラリをNode.jsアプリケーション・コードに統合する必要があります。

  1. Node.jsのMicroTxライブラリをpackage.jsonファイルに依存関係として追加します。ライブラリ・ファイルは、installation_directory/otmm-RELEASE/otmm/nodejsフォルダにあります。
    "dependencies": {
        "tmmlib-node": "file:tmmlib-node-RELEASE.tgz"
      }
  2. MicroTxライブラリのプロパティ値を構成します。ライブラリ・プロパティの構成を参照してください。Node.jsアプリケーションのロギングを有効にするには、追加のプロパティを設定する必要があります。「MicroTx Node.jsライブラリのログの有効化」を参照してください。
  3. プロパティ値を定義したtmm.propertiesファイルを渡して、マイクロサービスのMicroTxライブラリ・プロパティを構成します。
    TrmConfig.init('./tmm.properties');
  4. MicroTxおよびExpressライブラリをインポートします。
    import { Request, Response, Router } from 'express';
    import { getLRAId, LRA, LRAConfig, LRAType, ParticipantStatus, cancelLRA, LRA_HTTP_CONTEXT_HEADER, LRA_HTTP_ENDED_CONTEXT_HEADER } from "tmmlib-node/lra/lra";
    import { getHeaderValue } from 'tmmlib-node/util/trmutils';
  5. プログラム内でリクエストを処理するルーター・オブジェクトを作成します。
    次のコードを使用して、flightSvcRouterという名前のルーター・オブジェクトを作成します。
    const flightSvcRouter = Router();
  6. MicroTx LRAコーディネータのURLを入力します。この属性値を取得するには、MicroTxへのアクセスに使用するURLに/lra-coordinatorを追加します。たとえば、https://tmm-app:9000/api/v1MicroTx URLの場合、lraCoordinatorUrlhttps://tmm-app:9000/api/v1/lra-coordinatorです。
    const lraCoordinateUrl = process.env.ORACLE_TMM_TCS_URL
  7. 次のコードを追加して、トランザクション・イニシエータ・サービスおよびトランザクション参加側サービスのRESTエンドポイントのLRAConfigオブジェクトを初期化します。サービスによって多数のREST APIエンドポイントが公開されることがありますが、LRAConfigオブジェクトを初期化する必要があるのは、LRAトランザクションに参加する必要があるREST APIエンドポイントのみです。
    const lra: LRA = new LRA("/flight", LRAType.REQUIRES_NEW);
    lra.end = false;
    lra.timeLimitInMilliSeconds = 100000;
    new LRAConfig(lraCoordinateUrl, flightSvcRouter, "/flightService/api", lra, "/complete", "/compensate", "/status", "/after", "", "", "");

    説明

    • /flightは、LRAトランザクションに参加するためにトランザクション・イニシエータ・アプリケーションが公開するREST APIエンドポイントです。
    • LRAType.REQUIRES_NEWは、サービスが既存のLRAトランザクションに参加するか、新しいトランザクションを作成するかを決定します。LRATypeREQUIRES_NEWに設定すると、新しいトランザクションが作成されます。LRATypeMANDATORYに設定すると、サービスが既存のトランザクションに参加します。LRAType値の詳細は、マイクロサービス対応トランザクション・マネージャTypeScript APIリファレンスを参照してください。
    • flightSvcRouterは、事前に作成しておいたルーター・オブジェクトです。
    • /flightService/apiは、flightSvcRouterルーターのマウント・ポイントです。これは、LRAConfigオブジェクトのapplRouterMountPathフィールドの値です。
    • timeLimitInMilliSecondsは、トランザクションを完了または補正する必要がある期間(ミリ秒)です。指定した期間内にトランザクションが完了しない場合、MicroTxはトランザクションを補正します。業務要件に基づいて期限を決めてください。
    • "/complete"、"/compensate"、"/status"、"/after"は、アプリケーションのビジネス・ロジックを定義するためのREST APIエンドポイントです。

    LRAトランザクション中に、MicroTxは、指定したREST APIエンドポイントからのすべての送信リクエストのリンク・ヘッダーを追加します。

  8. LRAConfigオブジェクトの作成時に指定したすべてのREST APIエンドポイントに対してビジネス・ロジックを定義します。
    flightSvcRouter.put('/complete', async (req, resp) => {
    //application business logic
    });
    
    flightSvcRouter.put('/compensate', async (req, resp) => {
    //application business logic
    });
    
    flightSvcRouter.put('/status', async (req, resp) => {
    //application business logic
    });
    
    flightSvcRouter.put('/after', (req, resp) => {
    //application business logic
    });

    ここで、flightSvcRouterは、事前に作成しておいたルーター・オブジェクトです。このサンプル・コードはputのみを示していますが、ビジネス・ロジックに基づいて任意のHTTP動詞を使用できます。

  9. 変更内容を保存します。