4.11 OpenTP1のアプリケーションプログラムの作成
ここでは,C言語でプログラムを作成する場合を例にして,TP1インバウンドアダプタを呼び出すアプリケーションプログラムの作成について説明します。
OpenTP1のアプリケーションプログラムからのTP1インバウンドアダプタの呼び出しは,dc_rpc_call関数を使用します。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); }