Cosminexus V9 アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)

[目次][用語][索引][前へ][次へ]

4.11 OpenTP1のアプリケーションプログラムの作成

ここでは,C言語でプログラムを作成する場合を例にして,TP1インバウンドアダプタを呼び出すアプリケーションプログラムの作成について説明します。

OpenTP1のアプリケーションプログラムからのTP1インバウンドアダプタの呼び出しは,dc_rpc_call関数を使用します。dc_rpc_call関数の各引数に指定する値を次の表に示します。

表4-13 dc_rpc_call関数の引数に指定する値

引数 指定する値
group TP1インバウンドアダプタのConnector属性ファイルの<service_group>タグで定義したサービスグループ名を指定します。
service Message-driven Bean(サービス)のActivationSpecの<service>タグで定義したサービス名を指定します。
in サービスの入力パラメタを指定します。詳細は,マニュアル「OpenTP1 プログラム作成の手引」を参照してください。
in_len サービスの入力パラメタ長を指定します。詳細は,マニュアル「OpenTP1 プログラム作成の手引」を参照してください。
out 応答を格納する領域を指定します。詳細は,マニュアル「OpenTP1 プログラム作成の手引」を参照してください。
out_len 応答の長さを指定します。詳細は,マニュアル「OpenTP1 プログラム作成の手引」を参照してください。
flags RPCの形態を指定します。指定可能な値については「4.13.3 トランザクションの設定」を参照してください。

 

コーディング例は,トランザクション連携機能を使用しない場合と,トランザクション連携機能を使用する場合の2種類があります。

TP1インバウンドアダプタを呼び出すアプリケーションのSUPのコーディング例を次に示します。なお,この例はSUP固有のもので,SPP,MHPには該当しません。

●トランザクション連携機能を使用しない場合のコーディング例
 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <dcrpc.h>
#include <dctrn.h>
#include <dcadm.h>
 
main ()
{
 
  static char    in_buf[1024];
  static DCLONG  in_buf_len;
  static char    out_buf[1024];
  static DCLONG  out_buf_len;
  int rc;
 
  rc = dc_rpc_open(DCNOFLAGS);
  if (rc != DC_OK) {
    printf("SUP01:dc_rpc_openに失敗しました。CODE = %d\n", rc);
    goto PROG_END;
  }
 
  rc = dc_adm_complete(DCNOFLAGS);
  if (rc != DC_OK) {
    printf("SUP01:dc_adm_completeに失敗しました。CODE = %d\n", rc);
    goto PROG_END;
  }
 
  strcpy(in_buf, "SUP01:DATA OpenTP1!!");
  in_buf_len = strlen(in_buf) + 1;
  out_buf_len = 1024;
  rc = dc_rpc_call("spp01grp", "svr01", in_buf, &in_buf_len, out_buf, 
      &out_buf_len, DCNOFLAGS | DCRPC_TPNOTRAN);
  if (rc != DC_OK) {
    printf("SUP01:サービス要求に失敗しました。CODE = %d\n", rc);
  }
  printf("SUP01:SERVICE FUNCTION RETURN = %s\n", out_buf);
 
  PROG_END:
  dc_rpc_close(DCNOFLAGS);
  printf("SUP01:処理を終了しました。\n");
  exit(0);
}
 
●トランザクション連携機能を使用する場合のコーディング例
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dcadm.h>
#include <dcrpc.h>
#include <dctrn.h>
 
main()
{
 
  static char     in_buf[1024];
  static DCULONG  in_buf_len;
  static char     out_buf[1024];
  static DCULONG  out_buf_len;
  int rc;
 
  rc = dc_rpc_open(DCNOFLAGS);
  if (rc != DC_OK) {
    printf("SUP01:dc_rpc_openに失敗しました。CODE = %d\n", rc);
    goto PROG_END;
  }
 
  rc = dc_adm_complete(DCNOFLAGS);
  if (rc != DC_OK) {
    printf("SUP01:dc_adm_completeに失敗しました。CODE = %d\n", rc);
    goto PROG_END;
  }
 
  rc = dc_trn_begin();
  if (rc != DC_OK) {
    printf("SUP01:dc_trn_beginに失敗しました。CODE = %d\n", rc);
    goto TRAN_END;
  }
 
  strcpy(in_buf, "SUP01:DATA OpenTP1!!");
  in_buf_len = strlen(in_buf) + 1;
  out_buf_len = 1024;
  rc = dc_rpc_call("spp01grp", "svr01", in_buf, &in_buf_len, out_buf, 
                  &out_buf_len, DCNOFLAGS);
  if (rc != DC_OK) {
    printf("SUP01:サービス要求に失敗しました。CODE = %d\n", rc);
    goto TRAN_END;
  }
  printf("SUP01:SERVICE FUNCTION RETURN = %s\n", out_buf);
 
  TRAN_END:
  rc = dc_trn_unchained_commit();
  if (rc != DC_OK) {
    printf("SUP01:dc_trn_unchained_commitに失敗しました。CODE = %d\n", rc);
  }
 
  PROG_END:
  dc_rpc_close(DCNOFLAGS);
  printf("SUP01:処理を終了しました。\n");
  exit(0);
}