ページの先頭行へ戻る
Interstage Application Server アプリケーション作成ガイド(コンポーネントトランザクションサービス編)

5.3.2 セション情報域を操作するオブジェクト

  セション情報管理機能を使用するトランザクションアプリケーションのサーバオブジェクトの作成方法を説明します。

5.3.2.1 コンポーネントトランザクションサービスの環境定義

  セション情報管理を使用する場合、コンポーネントトランザクションサービスの環境定義の[SYSTEM ENVIRONMENT]セクションに次の定義を行います。定義の詳細については、“チューニングガイド”を参照してください。

Using Session Information Management Object

  セション情報管理オブジェクトを使用することを以下のように指定します。

Using Session Information Management Object:YES

Name of Session Information Management Object

  セション情報管理オブジェクト(SMO)のネーミングサービスへの登録名を指定します。1つのネーミングサービスを運用するドメイン内の1つのサーバだけで、SMOを運用する場合は省略可能です。この場合は省略値である“ISTD::SMO”が使用されます。

Name of Session Information Management Object:オブジェクト名

5.3.2.2 プログラミングの流れ

(1)CORBAサービスの初期化

  セション情報管理を使用するトランザクションアプリケーションでは、前出口プログラムでCORBAサービスの初期化をする必要があります。CORBAサービスの初期化の方法については、“付録D トランザクションアプリケーションのサンプルプログラム(サーバアプリケーション間連携編)”の各言語ごとのサンプルプログラムを参照してください。

注意

  前出口プログラムと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.

5.3.2.3 提供インクルード

  セション情報管理を使用するためのインクルードを提供します。

C言語

ISTD_smo.h

C++言語

ISTD_smocpp.h

  格納場所は、以下です。

INTERSTAGEのインストールフォルダ\td\include

コンポーネントトランザクションサービスのインストールディレクトリ/usr/include

5.3.2.4 提供ライブラリ

  セション情報管理は、セション情報管理オブジェクトの各機能を使用するためのライブラリを提供します。各プログラミング言語のライブラリ名を次に示します。

  格納場所は、コンポーネントトランザクションサービスのインストールディレクトリ/usr/libです。

C言語

F3FMsmo.lib

(F3FMsmosv.lib)

C++言語

F3FMsmocpp.lib

(F3FMsmocppsv.lib)

COBOL

F3FMSMOCBL.lib

(F3FMSMOCBLSV.lib)

  格納場所は、以下のフォルダです。

INTERSTAGEのインストールフォルダ\td\lib

注意事項

  ()内はサーバアプリケーション開発用ライブラリです。CORBAサービスのサーバアプリケーション開発用ライブラリを使用している場合には、()内のライブラリを使用してください。CORBAサービスのライブラリとセション情報管理ライブラリの種類(クライアント/サーバ)が異なる場合、動作は保証されません。

C言語

libtdsmo.so

(libtdsmo_nt.so  注1)

C++言語

libtdsmocpp.so

(libtdsmocpp_nt.so  注1)

libtdsmocpp50.so  注2

(libtdsmocpp50_nt.so  注1  注2)

COBOL

libtdsmocbl.so

(libtdsmocbl_mt.so  注3)

注1

  ()内はプロセスモードで動作するアプリケーションを作成するためのものです。アプリケーションをプロセスモードで動作させる場合は、()内のライブラリを使用してください。

注2

  C++言語のアプリケーションを作成する際に、Sun WorkShop Compilers C++ 5.0またはWS Compilers C++ 6を使用する場合は、libtdsmocpp.so、libtdsmocpp_nt.soのかわりにlibtdsmocpp50.so、libtdsmocpp50_nt.soを使用するようにしてください。

注3

  PowerCOBOL97を使用して、マルチスレッドのCOBOL言語のアプリケーションを作成する場合は、libtdsmocbl.soのかわりにlibtdsmocbl_mt.soを使用するようにしてください。

C言語

libtdsmo.so

(libtdsmo_nt.so  注1)

C++言語

libtdsmocpp.so

(libtdsmocpp_nt.so  注1)

注1

  ()内はプロセスモードで動作するアプリケーションを作成するためのものです。アプリケーションをプロセスモードで動作させる場合は、()内のライブラリを使用してください。

5.3.2.5 IDL

  セション情報管理が実装する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コンパイラに適用して生成されたスタブファイル、およびスケルトンファイルは、セション情報管理との通信には使用できません。セション情報管理のスタブおよびスケルトンは、提供ライブラリに含まれます。