Interstage Application Server アプリケーション作成ガイド (コンポーネントトランザクションサービス編)
|
目次
索引

|
5.3.2.2 プログラミングの流れ
(1)CORBAサービスの初期化
セション情報管理を使用するトランザクションアプリケーションでは、前出口プログラムでCORBAサービスの初期化をする必要があります。CORBAサービスの初期化の方法については、“トランザクションアプリケーションのサンプルプログラム(サーバアプリケーション間連携編)”の各言語ごとのサンプルプログラムを参照してください。
注意
前出口プログラムとSMOを操作する処理は1つのライブラリとして作成する必要があります。本処理を前処理と別のライブラリとして作成する場合であっても、SMOの各APIの呼び出す処理は前出口プログラムと同一のライブラリとして作成することが必要です。
(2)セション情報管理オブジェクトのオブジェクトリファレンスの獲得
次の処理により前出口プログラムでSMOのオブジェクトリファレンスを獲得します。
- SMOのネーミングサービス登録名の獲得
- SMO名獲得APIによりSMOのネーミングサービスへの登録名を獲得します。
各言語ごとのSMO名獲得APIの使用方法については、“リファレンスマニュアル(API編)”を参照してください。
- ネーミングサービスからのSMOのオブジェクトリファレンスの獲得
- ネーミングサービスへ登録したSMOの登録名をもとに、ネーミングサービスからSMOのオブジェクトリファレンスを獲得します。
注意
本処理で獲得したセション情報管理オブジェクトのオブジェクトリファレンスは、セション情報管理オブジェクトへのすべての要求が終了した時点で解放する必要があります。
(3)クライアント識別子の獲得
セション情報域を、要求元のクライアントごとに獲得する場合に、クライアントを特定するクライアント識別子をコンポーネントトランザクションサービスから受け取り、セション情報管理の各操作時に通知する必要があります。
クライアントを特定する情報を“クライアント識別子”と呼びます。サーバプログラムはクライアントからの要求を受信するたびに、クライアント識別子獲得APIによりコンポーネントトランザクションサービスからクライアント識別子を獲得できます。
各言語ごとのクライアント識別子獲得APIの使用方法については、“リファレンスマニュアル(API編)”を参照してください。
なお、セションごとにセション情報域を獲得する場合は、クライアント識別子の獲得は行いません。セションIDは、オペレーションのパラメタとして持ち回ります。
(4)セション情報域の生成
セション情報管理を使用するサーバオブジェクトは、セションの開始となる要求を受信した場合に、その要求のクライアント識別子またはセションIDを使用して、セション情報管理にセション情報域の獲得を依頼します。
セション情報域の生成は、セション情報管理のcreate_info()オペレーション(クライアント識別子の場合)またはcreate_info2()オペレーション(セションIDの場合)を使用して行います。各言語での使用方法を以下に示します。
注意
以降の使用方法で示すプログラミング例は、簡単化のため、エラー処理は省略しています。SMOの各オペレーションの呼び出しはCORBAアプリケーションのオペレーション呼び出しとなるため、復帰値の判定の前に例外処理が必要です。CORBAのクライアントアプリケーションでの例外処理については、“アプリケーション作成ガイド(CORBAサービス編)”のクライアントアプリケーションの例外処理を参照してください。
以降のセションIDを使用する場合のすべてのプログラミング例において、オペレーション名は例として示しているだけで、IDLを規定するものではありません。
セションIDを使用する場合
C言語
long MOD1_INTF1_ope1(..., ISTD_SMO_SessionId SessionId, ...) {
CORBA_Environment CoENV;
CORBA_Object CoOBJ; /* SMO の OR */
CORBA_unsigned_long SlotNo; /* スロット番号 */
CORBA_unsigned_long size; /* セション情報域長 */
CORBA_unsigned_long lifetime; /* 未使用時間監視間隔 */
int ret;
long i;
SlotNo = 1; /* スロット番号の設定 */
size = 8; /* セション情報域長の設定 */
lifetime = 60; /* 未使用時間監視間隔の設定 */
/* セション情報域の生成 */
i = ISTD_SMO_create_info2( (ISTD_SMO)CoOBJ,
SessionId,
SlotNo,
size,
lifetime,
&CoENV); |
C++言語
long MOD1_INTF1_impl::ope1(..., ISTD::SMO::SessionId SessionId, ...) {
CORBA::Environment_ptr env;
ISTD::SMO_ptr smo; // SMOのOR
CORBA::Ulong SlotNo; // スロット番号
CORBA::Ulong size; // セション情報域長
CORBA::Ulong lifetime; // 未使用時間監視間隔
CORBA::Ulong I;
CORBA::Octet *buf;
long length;
SlotNo = 1; // スロット番号の設定
size = 8; // セション情報域長の設定
lifetime = 60; // 未使用時間監視間隔の設定
// セション情報域の生成
I = smo->create_info2(SessionId,
SlotNo,
size,
lifetime,
*env); |
COBOL

WORKING-STORAGE SECTION.
COPY CONST IN CORBA.
01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ-EXT.
01 RETCODE PIC S9(9) COMP-5.
01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY SLOTNO.
01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY SIZE1.
01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY LIFETIME.
01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY COENV.
LINKAGE SECTION.
01 SESSID.
02 FILLER OCCURS 48.
03 COPY OCTET IN CORBA REPLACING CORBA-OCTET BY ISTD-SMO-SESSIONID-V.
01 COPY LONG IN CORBA REPLACING CORBA-LONG BY RET.
01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV.
PROCEDURE DIVISION USING
...
SESSID
...
ENV
RET.
MAIN.
* --- スロット番号 ---
COMPUTE SLOTNO = 1.
* --- セション情報域の大きさ ---
COMPUTE SIZE1 = 8.
* --- 時間監視 ---
COMPUTE LIFETIME = 600.
* --- セション情報域の生成 ---
CALL "ISTD-SMO-CREATE-INFO2" USING
OBJ-EXT
SESSID
SLOTNO
SIZE1
LIFETIME
COENV
RETCODE |
クライアント識別子を使用する場合
C言語
CORBA_Environment CoENV;
CORBA_Object CoOBJ; /* SMO の OR */
ISTD_SMO_ClientId *ClientId; /* クライアント識別子 */
CORBA_unsigned_long SlotNo; /* スロット番号 */
CORBA_unsigned_long size; /* セション情報域長 */
CORBA_unsigned_long lifetime; /* 未使用時間監視間隔 */
int ret;
long i;
/* クライアント識別子の取得 */
ClientId = ISTD_SMO_ClientId_alloc(); /* クライアント識別子領域の獲得 */
ClientId->_maximum = ClientId->_length = ISTD_SMO_ClientIdLen;
ClientId->_buffer = ISTD_SMO_ClientId_allocbuf( ISTD_SMO_ClientIdLen );
memset( ClientId->_buffer, 0x00, 48 );
ret = TD_get_client_id(ClientId); /* クライアント識別子獲得 */
SlotNo = 1; /* スロット番号の設定 */
size = 8; /* セション情報域長の設定 */
lifetime = 60; /* 未使用時間監視間隔の設定 */
/* セション情報域の生成 */
i = ISTD_SMO_create_info( (ISTD_SMO)CoOBJ,
ClientId,
SlotNo,
size,
lifetime,
&CoENV); |
C++言語
CORBA::Environment_ptr env;
ISTD::SMO_ptr smo; // SMOのOR
ISTD::SMO::ClientId *ClientId; // クライアント識別子
CORBA::Ulong SlotNo; // スロット番号
CORBA::Ulong size; // セション情報域長
CORBA::Ulong lifetime; // 未使用時間監視間隔
CORBA::Ulong i;
CORBA::Octet *buf;
long length;
// クライアント識別子の獲得
buf = ISTD::SMO::ClientId::allocbuf(48); // クライアント識別子型のバッファ獲得
ClientId = new ISTD::SMO::ClientId(48 , // クライアント識別子型の獲得
buf,
CORBA_FALSE);
ret = TD::get_client_id((char *)buf, 48, &length); // クライアント識別子獲得
SlotNo = 1; // スロット番号の設定
size = 8; // セション情報域長の設定
lifetime = 60; // 未使用時間監視間隔の設定
// セション情報域の生成
I = smo->create_info(*ClientId,
SlotNo,
size,
lifetime,
*env); |
COBOL

WORKING-STORAGE SECTION.
COPY CONST IN CORBA.
01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ-EXT.
01 ISTD-CLIENTID.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-MAXIMUM.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-LENGTH.
02 SEQ-BUFFER USAGE IS POINTER.
02 FILLER OCCURS 48.
03 COPY OCTET IN CORBA REPLACING CORBA-OCTET BY CLIENTID-VALUE.
01 RETCODE PIC S9(9) COMP-5.
01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY SLOTNO.
01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY SIZE1.
01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY LIFETIME.
01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY COENV.
PROCEDURE DIVISION USING
MAIN.
* --- クライアント識別子の獲得 ---
MOVE FUNCTION ADDR(CLIENTID-VALUE(1)) TO SEQ-BUFFER OF ISTD-CLIENTID.
MOVE 48 TO SEQ-MAXIMUM OF ISTD-CLIENTID.
CALL "TDGETCLIENTID" USING
ISTD-CLIENTID
RETCODE.
* --- スロット番号 ---
COMPUTE SLOTNO = 1.
* --- セション情報域の大きさ ---
COMPUTE SIZE1 = 8.
* --- 時間監視 ---
COMPUTE LIFETIME = 600.
* --- セション情報域の生成 ---
CALL "ISTD-SMO-CREATE-INFO" USING
OBJ-EXT
ISTD-CLIENTID
SLOTNO
SIZE1
LIFETIME
COENV
RETCODE. |
(5)セション情報域への情報の書き込み
セション情報管理を使用するサーバオブジェクトは、セション中の後続のオペレーション呼び出し時まで保持したい情報を、セション情報域に書き込めます。セション情報域への情報の書き込みは、セション情報管理のset_info()オペレーション(クライアント識別子の場合)またはset_info2()オペレーション(セションIDの場合)を使用して行います。各言語での使用方法を以下に示します。
注意
以降の使用方法で示すプログラミング例は、簡単化のため、エラー処理は省略しています。また、セション情報域の生成は完了しているものとします。
セションIDを使用する場合
C言語
long MOD1_INTF1_ope1(..., ISTD_SMO_SessionId SessionId, ...) {
CORBA_Environment CoENV;
CORBA_Object CoOBJ; /* SMO の OR */
CORBA_unsigned_long SlotNo; /* スロット番号 */
ISTD_SMO_SessionInfo *data1; /* セション情報 */
/* セション情報の作成 */
data1 = ISTD_SMO_SessionInfo_alloc();
data1->_length = data1->_maximum = 8;
data1->_buffer = ISTD_SMO_SessionInfo_allocbuf( data1->_maximum );
data1->_buffer[0] = 1;
SlotNo = 1;
/* セション情報域へのセション情報の設定 */
ISTD_SMO_set_info2( (ISTD_SMO)CoOBJ,
SessionId,
SlotNo,
data1,
&CoENV); |
C++言語
long MOD1_INTF1_impl::ope1(..., ISTD::SMO::SessionId SessionId, ...) {
CORBA::Environment_ptr env;
ISTD::SMO_ptr smo; // SMOのOR
CORBA::ULong SlotNo; // スロット番号
ISTD::SMO::SessionInfo *data1; // セション情報
CORBA::Octet *buf;
// スロット番号の設定
SlotNo = 1;
// 設定するセション情報の作成
buf = ISTD::SMO::SessionInfo::allocbuf(8);
*buf = 1;
data1 = new ISTD::SMO::SessionInfo( (CORBA::ULong)8,
(CORBA::ULong)8,
(CORBA::Octet*)buf,
(CORBA::Boolean)CORBA_FALSE );
// セション情報域へのセション情報の設定
smo->set_info2( SessionId,
SlotNo,
*data1,
*env ); |
COBOL

WORKING-STORAGE SECTION.
COPY CONST IN CORBA.
01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ-EXT.
01 DATA1.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-MAXIMUM.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-LENGTH.
02 SEQ-BUFFER USAGE IS POINTER.
02 FILLER OCCURS 8.
03 COPY OCTET IN CORBA REPLACING CORBA-OCTET BY SEQ-VALUE.
01 RETCODE PIC S9(9) COMP-5.
01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY SLOTNO.
01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY COENV.
LINKAGE SECTION.
01 TEMP-SEQ-VALUE.
02 FILLER OCCURS 8.
03 COPY OCTET IN CORBA REPLACING CORBA-OCTET BY SEQ-VALUE.
01 SESSID.
02 FILLER OCCURS 48.
03 COPY OCTET IN CORBA REPLACING CORBA-OCTET BY ISTD-SMO-SESSIONID-V.
01 COPY LONG IN CORBA REPLACING CORBA-LONG BY RET.
01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV.
PROCEDURE DIVISION USING
...
SESSID
...
ENV
RET.
MAIN.
* --- スロット番号 ---
COMPUTE SLOTNO = 1.
* --- set_info ---
MOVE 8 TO SEQ-MAXIMUM OF DATA1
MOVE 8 TO SEQ-LENGTH OF DATA1
CALL "CORBA-SEQUENCE-OCTET-ALLOCBUF" USING
SEQ-LENGTH OF DATA1
SEQ-BUFFER OF DATA1.
SET ADDRESS OF TEMP-SEQ-VALUE TO SEQ-BUFFER OF DATA1.
MOVE 1 TO SEQ-VALUE OF TEMP-SEQ-VALUE(1).
* --- CALL ISTD-SMO-SET-INFO2 ---
CALL "ISTD-SMO-SET-INFO2" USING
OBJ-EXT
SESSID
SLOTNO
DATA1
COENV. |
クライアント識別子を使用する場合
C言語
CORBA_Environment CoENV;
CORBA_Object CoOBJ; /* SMO の OR */
ISTD_SMO_ClientId *ClientId; /* クライアント識別子 */
CORBA_unsigned_long SlotNo; /* スロット番号 */
ISTD_SMO_SessionInfo *data1; /* セション情報 */
/* セション情報の作成 */
data1 = ISTD_SMO_SessionInfo_alloc();
data1->_length = data1->_maximum = 8;
data1->_buffer = ISTD_SMO_SessionInfo_allocbuf( data1->_maximum );
data1->_buffer[0] = 1;
SlotNo = 1;
/* セション情報域へのセション情報の設定 */
ISTD_SMO_set_info( (ISTD_SMO)CoOBJ,
ClientId,
SlotNo,
data1,
&CoENV); |
C++言語
CORBA::Environment_ptr env;
ISTD::SMO_ptr smo; // SMOのOR
ISTD::SMO::ClientId *ClientId; // クライアント識別子
CORBA::ULong SlotNo; // スロット番号
ISTD::SMO::SessionInfo *data1; // セション情報
CORBA::Octet *buf;
// スロット番号の設定
SlotNo = 1;
// 設定するセション情報の作成
buf = ISTD::SMO::SessionInfo::allocbuf(8);
*buf = 1;
data1 = new ISTD::SMO::SessionInfo( (CORBA::ULong)8,
(CORBA::ULong)8,
(CORBA::Octet*)buf,
(CORBA::Boolean)CORBA_FALSE );
// セション情報域へのセション情報の設定
smo->set_info( *ClientId,
SlotNo,
*data1,
*env );
|
COBOL

WORKING-STORAGE SECTION.
COPY CONST IN CORBA.
01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ-EXT.
01 ISTD-CLIENTID.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-MAXIMUM.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-LENGTH.
02 SEQ-BUFFER USAGE IS POINTER.
02 FILLER OCCURS 48.
03 COPY OCTET IN CORBA REPLACING CORBA-OCTET BY CLIENTID-VALUE.
01 RETCODE PIC S9(9) COMP-5.
01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY SLOTNO.
01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY COENV.
01 DATA1.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-MAXIMUM.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-LENGTH.
02 SEQ-BUFFER USAGE IS POINTER.
02 FILLER OCCURS 8.
03 COPY OCTET IN CORBA REPLACING CORBA-OCTET BY SEQ-VALUE.
LINKAGE SECTION.
01 TEMP-SEQ-VALUE.
02 FILLER OCCURS 8.
03 COPY OCTET IN CORBA REPLACING CORBA-OCTET BY SEQ-VALUE.
PROCEDURE DIVISION USING
MAIN.
* --- スロット番号 ---
COMPUTE SLOTNO = 1.
* --- set_info ---
MOVE 8 TO SEQ-MAXIMUM OF DATA1
MOVE 8 TO SEQ-LENGTH OF DATA1
CALL "CORBA-SEQUENCE-OCTET-ALLOCBUF" USING
SEQ-LENGTH OF DATA1
SEQ-BUFFER OF DATA1.
SET ADDRESS OF TEMP-SEQ-VALUE TO SEQ-BUFFER OF DATA1.
MOVE 1 TO SEQ-VALUE OF TEMP-SEQ-VALUE(1).
* --- CALL ISTD-SMO-SET-INFO ---
CALL "ISTD-SMO-SET-INFO" USING
OBJ-EXT
ISTD-CLIENTID
SLOTNO
DATA1
COENV. |
(6)セション情報域からの情報の読み込み
セション情報管理を使用するサーバオブジェクトは、以前に呼び出された際にセション情報域に書き込んだセション情報を読み出すことができます。セション情報の読み込みは、セション情報管理のget_info()オペレーション(クライアント識別子の場合)またはget_info2()オペレーション(セションIDの場合)を使用して行います。各言語での使用方法を以下に示します。
注意
以降の使用方法で示すプログラミング例は、簡単化のため、エラー処理は省略しています。また、セション情報域の生成は完了しているものとします。
セションIDを使用する場合
C言語
long MOD1_INTF1_ope1(..., ISTD_SMO_SessionId SessionId, ...) {
CORBA_Environment CoENV;
CORBA_Object CoOBJ; /* SMO の OR */
CORBA_unsigned_long SlotNo; /* スロット番号 */
ISTD_SMO_SessionInfo *data1; /* セション情報 */
SlotNo = 1;
/* セション情報域からのセション情報の取り出し */
ISTD_SMO_get_info2( (ISTD_SMO)CoOBJ,
SessionId,
SlotNo,
&data1,
&CoENV); |
C++言語
long MOD1_INTF1_impl::ope1(..., ISTD::SMO::SessionId SessionId, ...) {
CORBA::Environment_ptr env;
ISTD::SMO_ptr smo; // SMOのOR
CORBA::ULong SlotNo; // スロット番号
ISTD::SMO::SessionInfo *data1; // セション情報
// スロット番号の設定
SlotNo = 1;
// セション情報域からのセション情報の取り出し
smo->get_info2( SessionId,
SlotNo,
data1,
*env ); |
COBOL

WORKING-STORAGE SECTION.
COPY CONST IN CORBA.
01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ-EXT.
01 RETCODE PIC S9(9) COMP-5.
01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY SLOTNO.
01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY COENV.
01 DATA1.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-MAXIMUM.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-LENGTH.
02 SEQ-BUFFER USAGE IS POINTER.
02 FILLER OCCURS 8.
03 COPY OCTET IN CORBA REPLACING CORBA-OCTET BY SEQ-VALUE.
01 DATA2-P USAGE POINTER.
LINKAGE SECTION.
01 DATA2.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-MAXIMUM.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-LENGTH.
02 SEQ-BUFFER USAGE IS POINTER.
02 FILLER OCCURS 100.
03 COPY OCTET IN CORBA REPLACING CORBA-OCTET BY SEQ-VALUE.
01 TEMP-SEQ-VALUE.
02 FILLER OCCURS 8.
03 COPY OCTET IN CORBA REPLACING CORBA-OCTET BY SEQ-VALUE.
01 SESSID.
02 FILLER OCCURS 48.
03 COPY OCTET IN CORBA REPLACING CORBA-OCTET BY ISTD-SMO-SESSIONID-V.
01 COPY LONG IN CORBA REPLACING CORBA-LONG BY RET.
01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV.
PROCEDURE DIVISION USING
...
SESSID
...
ENV
RET.
MAIN.
* --- スロット番号 ---
COMPUTE SLOTNO = 1.
CALL "ISTD-SMO-GET-INFO2" USING
OBJ-EXT
SESSID
SLOTNO
DATA2-P
COENV.
SET ADDRESS OF DATA2 TO DATA2-P
SET ADDRESS OF TEMP-SEQ-VALUE TO SEQ-BUFFER OF DATA2. |
クライアント識別子を使用する場合
C言語
CORBA_Environment CoENV;
CORBA_Object CoOBJ; /* SMO の OR */
ISTD_SMO_ClientId *ClientId; /* クライアント識別子 */
CORBA_unsigned_long SlotNo; /* スロット番号 */
ISTD_SMO_SessionInfo *data1; /* セション情報 */
SlotNo = 1;
/* セション情報域からのセション情報の取り出し */
ISTD_SMO_get_info( (ISTD_SMO)CoOBJ,
ClientId,
SlotNo,
&data1,
&CoENV); |
C++言語
CORBA::Environment_ptr env;
ISTD::SMO_ptr smo; // SMOのOR
ISTD::SMO::ClientId *ClientId; // クライアント識別子
CORBA::ULong SlotNo; // スロット番号
ISTD::SMO::SessionInfo *data1; // セション情報
// スロット番号の設定
SlotNo = 1;
// セション情報域からのセション情報の取り出し
smo->get_info( *ClientId,
SlotNo,
data1,
*env ); |
COBOL

WORKING-STORAGE SECTION.
COPY CONST IN CORBA.
01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ-EXT.
01 ISTD-CLIENTID.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-MAXIMUM.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-LENGTH.
02 SEQ-BUFFER USAGE IS POINTER.
02 FILLER OCCURS 48.
03 COPY OCTET IN CORBA REPLACING CORBA-OCTET BY CLIENTID-VALUE.
01 RETCODE PIC S9(9) COMP-5.
01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY SLOTNO.
01 DATA1.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-MAXIMUM.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-LENGTH.
02 SEQ-BUFFER USAGE IS POINTER.
02 FILLER OCCURS 8.
03 COPY OCTET IN CORBA REPLACING CORBA-OCTET BY SEQ-VALUE.
01 DATA2-P USAGE POINTER.
LINKAGE SECTION.
01 DATA2.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-MAXIMUM.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-LENGTH.
02 SEQ-BUFFER USAGE IS POINTER.
02 FILLER OCCURS 100.
03 COPY OCTET IN CORBA REPLACING CORBA-OCTET BY SEQ-VALUE.
01 TEMP-SEQ-VALUE.
02 FILLER OCCURS 8.
03 COPY OCTET IN CORBA REPLACING CORBA-OCTET BY SEQ-VALUE.
PROCEDURE DIVISION USING
MAIN.
* --- スロット番号 ---
COMPUTE SLOTNO = 1.
CALL "ISTD-SMO-GET-INFO" USING
OBJ-EXT
ISTD-CLIENTID
SLOTNO
DATA2-P
COENV.
SET ADDRESS OF DATA2 TO DATA2-P
SET ADDRESS OF TEMP-SEQ-VALUE TO SEQ-BUFFER OF DATA2. |
(7)セション情報域の削除
セション情報管理を使用するサーバオブジェクトは、セション情報域が不要となった時点で、セション情報域を削除します。セション情報域の削除は、セション情報管理のdelete_info()オペレーション(クライアント識別子の場合)またはdelete_info2()オペレーション(セションIDの場合)を使用して行います。各言語での使用方法を以下に示します。
注意
以降の使用方法で示すプログラミング例は、簡単化のため、エラー処理は省略しています。また、セション情報域の生成は完了しているものとします。
セションIDを使用する場合
C言語
long MOD1_INTF1_ope1(..., ISTD_SMO_SessionId SessionId, ...) {
CORBA_Environment CoENV;
CORBA_Object CoOBJ; /* SMO の OR */
CORBA_unsigned_long SlotNo; /* スロット番号 */
SlotNo = 1;
/* セション情報域の削除 */
ISTD_SMO_delete_info2( (ISTD_SMO)CoOBJ,
SessoinId,
SlotNo,
&CoENV); |
C++言語
long MOD1_INTF1_impl::ope1(..., ISTD::SMO::SessionId SessionId, ...) {
CORBA::Environment_ptr env;
ISTD::SMO_ptr smo; // SMOのOR
ISTD::SMO::SessionId *SessionId; // セションID
CORBA::ULong SlotNo; // スロット番号
// スロット番号の設定
SlotNo = 1;
// セション情報域の削除
smo->delete_info2( SessionId,
SlotNo,
*env ); |
COBOL

WORKING-STORAGE SECTION.
COPY CONST IN CORBA.
01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ-EXT.
01 RETCODE PIC S9(9) COMP-5.
01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY SLOTNO.
01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY COENV.
LINKAGE SECTION.
01 SESSID.
02 FILLER OCCURS 48.
03 COPY OCTET IN CORBA REPLACING CORBA-OCTET BY ISTD-SMO-SESSIONID-V.
01 COPY LONG IN CORBA REPLACING CORBA-LONG BY RET.
01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV.
PROCEDURE DIVISION USING
...
SESSID
...
ENV
RET.
MAIN.
* --- スロット番号 ---
COMPUTE SLOTNO = 1.
* --- セション情報域の削除 ---
CALL "ISTD-SMO-DELETE-INFO2" USING
OBJ-EXT
SESSID
SLOTNO
COENV. |
クライアント識別子を使用する場合
C言語
CORBA_Environment CoENV;
CORBA_Object CoOBJ; /* SMO の OR */
ISTD_SMO_ClientId *ClientId; /* クライアント識別子 */
CORBA_unsigned_long SlotNo; /* スロット番号 */
SlotNo = 1;
/* セション情報域の削除 */
ISTD_SMO_delete_info( (ISTD_SMO)CoOBJ,
ClientId,
SlotNo,
&CoENV); |
C++言語
CORBA::Environment_ptr env;
ISTD::SMO_ptr smo; // SMOのOR
ISTD::SMO::ClientId *ClientId; // クライアント識別子
CORBA::ULong SlotNo; // スロット番号
// スロット番号の設定
SlotNo = 1;
// セション情報域の削除
smo->delete_info( *ClientId,
SlotNo,
*env ); |
COBOL

WORKING-STORAGE SECTION.
COPY CONST IN CORBA.
01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ-EXT.
01 ISTD-CLIENTID.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-MAXIMUM.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-LENGTH.
02 SEQ-BUFFER USAGE IS POINTER.
02 FILLER OCCURS 48.
03 COPY OCTET IN CORBA REPLACING CORBA-OCTET BY CLIENTID-VALUE.
01 RETCODE PIC S9(9) COMP-5.
01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY SLOTNO.
01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY COENV.
PROCEDURE DIVISION USING
MAIN.
* --- スロット番号 ---
COMPUTE SLOTNO = 1.
* --- セション情報域の削除 ---
CALL "ISTD-SMO-DELETE-INFO" USING
OBJ-EXT
ISTD-CLIENTID
SLOTNO
COENV. |
All Rights Reserved, Copyright (C) 富士通株式会社 2005