Cosminexus V9 アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)
ここでは,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);
}
|
All Rights Reserved. Copyright (C) 2012, 2015, Hitachi, Ltd.