セション情報管理機能を使用するトランザクションアプリケーションのサーバオブジェクトの作成方法を説明します。
セション情報管理を使用する場合、コンポーネントトランザクションサービスの環境定義の[SYSTEM ENVIRONMENT]セクションに次の定義を行います。定義の詳細については、“チューニングガイド”を参照してください。
セション情報管理オブジェクトを使用することを以下のように指定します。
Using Session Information Management Object:YES |
セション情報管理オブジェクト(SMO)のネーミングサービスへの登録名を指定します。1つのネーミングサービスを運用するドメイン内の1つのサーバだけで、SMOを運用する場合は省略可能です。この場合は省略値である“ISTD::SMO”が使用されます。
Name of Session Information Management Object:オブジェクト名 |
セション情報管理を使用するトランザクションアプリケーションでは、前出口プログラムでCORBAサービスの初期化をする必要があります。CORBAサービスの初期化の方法については、“付録D トランザクションアプリケーションのサンプルプログラム(サーバアプリケーション間連携編)”の各言語ごとのサンプルプログラムを参照してください。
前出口プログラムとSMOを操作する処理は1つのライブラリとして作成する必要があります。本処理を前処理と別のライブラリとして作成する場合であっても、SMOの各APIの呼び出す処理は前出口プログラムと同一のライブラリとして作成することが必要です。
(2)セション情報管理オブジェクトのオブジェクトリファレンスの獲得
次の処理により前出口プログラムでSMOのオブジェクトリファレンスを獲得します。
SMO名獲得APIによりSMOのネーミングサービスへの登録名を獲得します。
各言語ごとのSMO名獲得APIの使用方法については、“リファレンスマニュアル(API編)”を参照してください。
ネーミングサービスへ登録したSMOの登録名をもとに、ネーミングサービスからSMOのオブジェクトリファレンスを獲得します。
本処理で獲得したセション情報管理オブジェクトのオブジェクトリファレンスは、セション情報管理オブジェクトへのすべての要求が終了した時点で解放する必要があります。
セション情報域を、要求元のクライアントごとに獲得する場合に、クライアントを特定するクライアント識別子をコンポーネントトランザクションサービスから受け取り、セション情報管理の各操作時に通知する必要があります。
クライアントを特定する情報を“クライアント識別子”と呼びます。サーバプログラムはクライアントからの要求を受信するたびに、クライアント識別子獲得APIによりコンポーネントトランザクションサービスからクライアント識別子を獲得できます。
各言語ごとのクライアント識別子獲得APIの使用方法については、“リファレンスマニュアル(API編)”を参照してください。
なお、セションごとにセション情報域を獲得する場合は、クライアント識別子の獲得は行いません。セションIDは、オペレーションのパラメタとして持ち回ります。
セション情報管理を使用するサーバオブジェクトは、セションの開始となる要求を受信した場合に、その要求のクライアント識別子またはセションIDを使用して、セション情報管理にセション情報域の獲得を依頼します。
セション情報域の生成は、セション情報管理のcreate_info()オペレーション(クライアント識別子の場合)またはcreate_info2()オペレーション(セションIDの場合)を使用して行います。各言語での使用方法を以下に示します。
以降の使用方法で示すプログラミング例は、簡単化のため、エラー処理は省略しています。SMOの各オペレーションの呼び出しはCORBAアプリケーションのオペレーション呼び出しとなるため、復帰値の判定の前に例外処理が必要です。CORBAのクライアントアプリケーションでの例外処理については、“アプリケーション作成ガイド(CORBAサービス編)”のクライアントアプリケーションの例外処理を参照してください。
以降のセションIDを使用する場合のすべてのプログラミング例において、オペレーション名は例として示しているだけで、IDLを規定するものではありません。
セションIDを使用する場合
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); |
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); |
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 |
クライアント識別子を使用する場合
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); |
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); |
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. |
セション情報管理を使用するサーバオブジェクトは、セション中の後続のオペレーション呼び出し時まで保持したい情報を、セション情報域に書き込めます。セション情報域への情報の書き込みは、セション情報管理のset_info()オペレーション(クライアント識別子の場合)またはset_info2()オペレーション(セションIDの場合)を使用して行います。各言語での使用方法を以下に示します。
以降の使用方法で示すプログラミング例は、簡単化のため、エラー処理は省略しています。また、セション情報域の生成は完了しているものとします。
セションIDを使用する場合
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); |
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 ); |
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. |
クライアント識別子を使用する場合
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); |
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 ); |
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. |
セション情報管理を使用するサーバオブジェクトは、以前に呼び出された際にセション情報域に書き込んだセション情報を読み出すことができます。セション情報の読み込みは、セション情報管理のget_info()オペレーション(クライアント識別子の場合)またはget_info2()オペレーション(セションIDの場合)を使用して行います。各言語での使用方法を以下に示します。
以降の使用方法で示すプログラミング例は、簡単化のため、エラー処理は省略しています。また、セション情報域の生成は完了しているものとします。
セションIDを使用する場合
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); |
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 ); |
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. |
クライアント識別子を使用する場合
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); |
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 ); |
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. |
セション情報管理を使用するサーバオブジェクトは、セション情報域が不要となった時点で、セション情報域を削除します。セション情報域の削除は、セション情報管理のdelete_info()オペレーション(クライアント識別子の場合)またはdelete_info2()オペレーション(セションIDの場合)を使用して行います。各言語での使用方法を以下に示します。
以降の使用方法で示すプログラミング例は、簡単化のため、エラー処理は省略しています。また、セション情報域の生成は完了しているものとします。
セションIDを使用する場合
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); |
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 ); |
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. |
クライアント識別子を使用する場合
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); |
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 ); |
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. |
セション情報管理を使用するためのインクルードを提供します。
ISTD_smo.h
ISTD_smocpp.h
格納場所は、以下です。
INTERSTAGEのインストールフォルダ\td\include |
コンポーネントトランザクションサービスのインストールディレクトリ/usr/include |
セション情報管理は、セション情報管理オブジェクトの各機能を使用するためのライブラリを提供します。各プログラミング言語のライブラリ名を次に示します。
格納場所は、コンポーネントトランザクションサービスのインストールディレクトリ/usr/libです。
F3FMsmo.lib
(F3FMsmosv.lib)
F3FMsmocpp.lib
(F3FMsmocppsv.lib)
F3FMSMOCBL.lib
(F3FMSMOCBLSV.lib)
格納場所は、以下のフォルダです。
INTERSTAGEのインストールフォルダ\td\lib |
()内はサーバアプリケーション開発用ライブラリです。CORBAサービスのサーバアプリケーション開発用ライブラリを使用している場合には、()内のライブラリを使用してください。CORBAサービスのライブラリとセション情報管理ライブラリの種類(クライアント/サーバ)が異なる場合、動作は保証されません。
libtdsmo.so
(libtdsmo_nt.so 注1)
libtdsmocpp.so
(libtdsmocpp_nt.so 注1)
libtdsmocpp50.so 注2
(libtdsmocpp50_nt.so 注1 注2)
libtdsmocbl.so
(libtdsmocbl_mt.so 注3)
()内はプロセスモードで動作するアプリケーションを作成するためのものです。アプリケーションをプロセスモードで動作させる場合は、()内のライブラリを使用してください。
C++言語のアプリケーションを作成する際に、Sun WorkShop Compilers C++ 5.0またはWS Compilers C++ 6を使用する場合は、libtdsmocpp.so、libtdsmocpp_nt.soのかわりにlibtdsmocpp50.so、libtdsmocpp50_nt.soを使用するようにしてください。
PowerCOBOL97を使用して、マルチスレッドのCOBOL言語のアプリケーションを作成する場合は、libtdsmocbl.soのかわりにlibtdsmocbl_mt.soを使用するようにしてください。
libtdsmo.so
(libtdsmo_nt.so 注1)
libtdsmocpp.so
(libtdsmocpp_nt.so 注1)
()内はプロセスモードで動作するアプリケーションを作成するためのものです。アプリケーションをプロセスモードで動作させる場合は、()内のライブラリを使用してください。
セション情報管理が実装するIDLは、次のとおりです。
インタフェースの詳細については、“リファレンスマニュアル(API編)”を参照してください。
module ISTD { interface SMO { // クライアント識別子のデータ型 const unsigned long ClientIdLen = 48; // クライアント識別子長 typedef sequence<octet,ClientIdLen> ClientId; // クライアント識別子型 // セションIDのデータ型 const unsigned long SessionIdLen = 48; // セションID長 typedef octet SessionId[SessionIdLen]; // セションID型 // ユーザ例外処理の定義 exception InvalidArgument { string reason; }; // パラメタ異常 exception ProcessFailed {}; // 処理異常 exception AlreadyExist {}; // 既登録 exception NotExist {}; // 対象セション情報域なし exception NotRegistered {}; // 対象リスナ未登録 // create_info の復帰値 const unsigned long TD_OK_NEW = 0; // 新規生成 const unsigned long TD_OK_OLD = 1; // 既存セション情報域返却 // セション情報域型 typedef sequence<octet> SessionInfo; // // --- operations for client id --- // long create_info( // セション情報域の獲得 in ClientId CLIENT_ID, in unsigned long slotno, in unsigned long size, in unsigned long lifetime ) raises( InvalidArgument, ProcessFailed, AlreadyExist ); void set_info( // セション情報域へのデータを書込 in ClientId CLIENT_ID, in unsigned long slotno, in SessionInfo data ) raises( InvalidArgument, NotExist ); void get_info( // セション情報域からのデータを読込 in ClientId CLIENT_ID, in unsigned long slotno, out SessionInfo data ) raises( InvalidArgument, NotExist ); void delete_info( // セション情報域の解放 in ClientId CLIENT_ID, in unsigned long slotno ) raises( InvalidArgument, NotExist ); void add_listener( // リスナの登録 in Object LISTENER_OR ) raises( InvalidArgument ); void del_listener( // リスナの抹消 in Object LISTENER_OR ) raises( InvalidArgument, NotRegistered ); // // --- operatoins for session id --- // long create_info2( // セション情報域の獲得 in SessionId SESSION_ID, in unsigned long slotno, in unsigned long size, in unsigned long lifetime ) raises( InvalidArgument, ProcessFailed, AlreadyExist ); void set_info2( // セション情報域へのデータを書込 in SessionId SESSION_ID, in unsigned long slotno, in SessionInfo data ) raises( InvalidArgument, NotExist ); void get_info2( // セション情報域からのデータを読込 in SessionId SESSION_ID, in unsigned long slotno, out SessionInfo data ) raises( InvalidArgument, NotExist ); void delete_info2( // セション情報域の解放 in SessionId SESSION_ID, in unsigned long slotno ) raises( InvalidArgument, NotExist ); void add_listener2( // リスナの登録 in Object LISTENER_OR ) raises( InvalidArgument ); void del_listener2( // リスナの抹消 in Object LISTENER_OR ) raises( InvalidArgument, NotRegistered ); }; // SMO interface SMO_LISTENER { // 事象通知リスナインタフェース(クライアント識別子用) // クライアント識別子のデータ型 const unsigned long ClientIdLen = 48; // クライアント識別子長 typedef sequence<octet,ClientIdLen> ClientId; // クライアント識別子型 // セション情報域型 typedef sequence<octet> SessionInfo; // 事象通知データ型(クライアント識別子用) struct SlotInfo { ClientId CLIENT_ID; unsigned long slotno; SessionInfo data; }; typedef sequence<SlotInfo> DelSlotInfo; void timeout( // イベント受信 in DelSlotInfo data ); }; // SMO_LISTENER interface SMO_LISTENER2 { // 事象通知リスナインタフェース(セションID用) // セションIDのデータ型 const unsigned long SessIdLen = 48; // セションID長 typedef octet SessionId[SessIdLen]; // セションID型 // セション情報域型 typedef sequence<octet> SessionInfo; // 事象通知データ型(セションID用) struct SlotInfo { SessionId SESSION_ID; unsigned long slotno; SessionInfo data; }; typedef sequence<SlotInfo> DelSlotInfo; void timeout( // イベント受信 in DelSlotInfo data ); }; // SMO_LISTENER2 }; |
本IDLは、セション情報管理のインタフェース情報を示すためのものです。本IDLをIDLコンパイラに適用する必要はありません。また、本IDLをIDLコンパイラに適用して生成されたスタブファイル、およびスケルトンファイルは、セション情報管理との通信には使用できません。セション情報管理のスタブおよびスケルトンは、提供ライブラリに含まれます。