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

第5章 Interstageの特徴的な機能> 5.3 セション情報管理機能を使用したトランザクションアプリケーションの作成> 5.3.2 セション情報域を操作するオブジェクト

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