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

5.3.3 セション情報管理の事象通知リスナオブジェクト

  セション情報管理機能で、セション情報域の未使用時間監視を使用した場合に、未使用時間を超過したセション情報域の発生の事象通知をSMOから受け付けるオブジェクト(事象通知リスナオブジェクト)の作成方法について示します。

5.3.3.1 プログラミングの流れ

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

  CORBAサーバアプリケーションとして作成する必要があります。そのため、最初に、CORBAサービスの初期化が必要です。

注意事項

  プログラミング言語がC言語またはC++言語の場合、CORBAサービスの初期化直後に次の関数を発行する必要があります。

セションIDの場合

ISTD_SMO_LISTENER2_init();

クライアント識別子の場合

ISTD_SMO_LISTENER_init();

(2) 事象通知リスナ実装関数の作成

  SMOからの事象通知を受け取るために、以下に示すインタフェース実装関数名およびパラメタ形式でSMO_LISTENERインタフェース(クライアント識別子の場合)またはSMO_LISTENER2インタフェース(セションIDの場合)のtimeout()オペレーションを実装する必要があります。各プログラミング言語での実装形式を示します。
  なお、事象通知のデータ形式については、“5.3.2.5 IDL”を参照してください。

セションIDを使用する場合

C言語
        
        void
        ISTD_SMO_LISTENER2_timeout(
            CORBA_Object                        obj,
            ISTD_SMO_LISTENER2_DelSlotInfo      *slot,
            CORBA_Environment                   *env
            )
        {

            事象通知に対する処理を記述してください。

        }
C++言語
     
          void
          ISTD_SMO_LISTENER2_impl::timeout(
              const ISTD::SMO_LISTENER2::DelSlotInfo      &slot,
              CORBA::Environment                          &env  )
              throw( CORBA::Exception )
          {

              事象通知に対する処理を記述してください。

          }
COBOL
          IDENTIFICATION DIVISION.
          PROGRAM-ID. "ISTD-SMO-LISTENER2-TIMEOUT".

          ENVIRONMENT DIVISION.
          CONFIGURATION SECTION.
          SPECIAL-NAMES.
              ARGUMENT-NUMBER IS ARG-C
              ARGUMENT-VALUE  IS ARG-V
              SYMBOLIC CONSTANT
              COPY SYMBOL-CONST IN CORBA.
              .

          DATA DIVISION.
           WORKING-STORAGE SECTION.
            COPY CONST IN CORBA.

          LINKAGE SECTION.
            01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ.
            01 DATA-P USAGE POINTER.
            01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV.

          PROCEDURE DIVISION USING
            OBJ
            DATA-P
            ENV.

          MAIN.

            事象通知に対する処理を記述してください。

          MAIN-END.

          END PROGRAM  "ISTD-SMO-LISTENER2-TIMEOUT".

クライアント識別子を使用する場合

C言語
        
        void
        ISTD_SMO_LISTENER_timeout(
            CORBA_Object                       obj,
            ISTD_SMO_LISTENER_DelSlotInfo      *slot,
            CORBA_Environment                  *env
            )
        {

            事象通知に対する処理を記述してください。

        }
C++言語
          
          void
          ISTD_SMO_LISTENER_impl::timeout(
              const ISTD::SMO_LISTENER::DelSlotInfo       &slot,
              CORBA::Environment                          &env  )
              throw( CORBA::Exception )
          {

              事象通知に対する処理を記述してください。

          }
COBOL
          IDENTIFICATION DIVISION.
          PROGRAM-ID. "ISTD-SMO-LISTENER-TIMEOUT".

          ENVIRONMENT DIVISION.
          CONFIGURATION SECTION.
          SPECIAL-NAMES.
              ARGUMENT-NUMBER IS ARG-C
              ARGUMENT-VALUE  IS ARG-V
              SYMBOLIC CONSTANT
              COPY SYMBOL-CONST IN CORBA.
              .

          DATA DIVISION.
           WORKING-STORAGE SECTION.
            COPY CONST IN CORBA.

          LINKAGE SECTION.
            01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ.
            01 DATA-P USAGE POINTER.
            01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV.

          PROCEDURE DIVISION USING
            OBJ
            DATA-P
            ENV.

          MAIN.

            事象通知に対する処理を記述してください。

          MAIN-END.

          END PROGRAM  "ISTD-SMO-LISTENER-TIMEOUT".

(3) 事象通知リスナの登録

  SMOから事象通知を受け取るためには、事象通知を受け取るリスナアプリケーションのオブジェクトリファレンスを、SMOに登録する必要があります。リスナアプリケーションの登録は、SMOのadd_listener()オペレーション(クライアント識別子の場合)またはadd_listener2()オペレーション(セションIDの場合)を使用して行います。
  各プログラミング言語での使用方法を以下に示します。

セションIDを使用する場合

C言語
           CORBA_Environment       CoENV;
           CORBA_Object            CoOBJ;    /* SMO の OR          */
           CORBA_Object            LiOBJ;    /* リスナ の OR       */

           ISTD_SMO_add_listener2( CoOBJ,
                                   LiOBJ,
                                   &CoEnv );
C++言語
           CORBA::Environment_ptr  env;
           ISTD::SMO_ptr           smo;           // SMO の OR
           CORBA::Object*          obj_listener;  // リスナ の OR

           smo->add_listener2(  obj_listener,
                                *env);
COBOL
         WORKING-STORAGE SECTION.
          COPY CONST IN CORBA.
           01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY COOBJ.
           01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY LSNOBJ.
           01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY COENV.

         PROCEDURE DIVISION USING
         MAIN.

             CALL "ISTD-SMO-ADD-LISTENER2" USING
               COOBJ
               LSNOBJ
               COENV.

クライアント識別子を使用する場合

C言語
           CORBA_Environment       CoENV;
           CORBA_Object            CoOBJ;    /* SMO の OR          */
           CORBA_Object            LiOBJ;    /* リスナ の OR       */

           ISTD_SMO_add_listener( CoOBJ,
                                  LiOBJ,
                                  &CoEnv );
C++言語
           CORBA::Environment_ptr  env;
           ISTD::SMO_ptr           smo;           // SMO の OR
           CORBA::Object*          obj_listener;  // リスナ の OR

           smo->add_listener(  obj_listener,
                               *env);
COBOL
         WORKING-STORAGE SECTION.
          COPY CONST IN CORBA.
           01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY COOBJ.
           01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY LSNOBJ.

           01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY COENV.

         PROCEDURE DIVISION USING
         MAIN.

             CALL "ISTD-SMO-ADD-LISTENER" USING
               COOBJ
               LSNOBJ
               COENV.

(4) 事象通知リスナの登録抹消

  SMOからの事象通知受け取りを停止する場合、SMOに登録したリスナアプリケーションのオブジェクトリファレンスの登録抹消を行う必要があります。リスナアプリケーションの登録抹消はSMOのdel_listener()オペレーション(クライアント識別子の場合)またはdel_listener2()オペレーション(セションIDの場合)を使用して行います。  

  各プログラミング言語での使用方法を以下に示します。

セションIDを使用する場合

C言語
           CORBA_Environment       CoENV;
           CORBA_Object            CoOBJ;    /* SMO の OR          */
           CORBA_Object            LiOBJ;    /* リスナ の OR       */

           ISTD_SMO_del_listener2( CoOBJ,
                                   LiOBJ,
                                   &CoEnv );
C++言語
           CORBA::Environment_ptr  env;
           ISTD::SMO_ptr           smo;           // SMO の OR
           CORBA::Object*          obj_listener;  // リスナ の OR

           smo->del_listener2(  obj_listener,
                                *env);
COBOL
         WORKING-STORAGE SECTION.
          COPY CONST IN CORBA.
           01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY COOBJ.
           01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY LSNOBJ.
           01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY COENV.

         PROCEDURE DIVISION USING
         MAIN.

             CALL "ISTD-SMO-DEL-LISTENER2" USING
               COOBJ
               LSNOBJ
               COENV.

クライアント識別子を使用する場合

C言語
           CORBA_Environment       CoENV;
           CORBA_Object            CoOBJ;    /* SMO の OR          */
           CORBA_Object            LiOBJ;    /* リスナ の OR       */

           ISTD_SMO_del_listener( CoOBJ,
                                  LiOBJ,
                                  &CoEnv );
C++言語
           CORBA::Environment_ptr  env;
           ISTD::SMO_ptr           smo;           // SMO の OR
           CORBA::Object*          obj_listener;  // リスナ の OR

           smo->del_listener(  obj_listener,
                               *env);
COBOL
         WORKING-STORAGE SECTION.
          COPY CONST IN CORBA.
           01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY COOBJ.
           01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY LSNOBJ.
           01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY COENV.

         PROCEDURE DIVISION USING
         MAIN.

             CALL "ISTD-SMO-DEL-LISTENER" USING
               COOBJ
               LSNOBJ
               COENV.

5.3.3.2 事象通知リスナ作成に使用する提供インクルード

  事象通知リスナを実装するプログラムでは、以下のインクルードファイルをインクルードしてください。()内は、事象通知リスナの登録および登録抹消を行う場合に必要なインクルードです。

C言語
セションIDの場合

ISTD_smo_listener2.h

(ISTD_smo.h)

クライアント識別子の場合

ISTD_smo_listener.h

(ISTD_smo.h)

C++言語
セションIDの場合

ISTD_smo_listener2cpp.h

(ISTD_smocpp.h)

クライアント識別子の場合

ISTD_smo_listenercpp.h

(ISTD_smocpp.h)

  格納場所は、以下です。

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

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

5.3.3.3 事象通知リスナ作成に使用する提供ライブラリ

  事象通知リスナを実装するためには、作成したプログラムに以下の提供ライブラリをリンクする必要があります。
  ()内のライブラリは、事象通知リスナのSMOへの登録および登録抹消を行う場合にリンクする必要があります。

C言語
セションIDの場合

F3FMsmolistener2.lib

(F3FMsmo.lib/F3FMsmosv.lib)

クライアント識別子の場合

F3FMsmolistener.lib

(F3FMsmo.lib/F3FMsmosv.lib)

C++言語
セションIDの場合

F3FMsmolistener2cpp.lib

(F3FMsmocpp.lib/F3FMsmocppsv.lib)

クライアント識別子の場合

F3FMsmolistenercpp.lib

(F3FMsmocpp.lib/F3FMsmocppsv.lib)

COBOL
セショIDの場合

F3FMsmolistener2cbl.lib

(F3FMSMOCBL.lib/F3FMSMOCBLSV.lib)

クライアント識別子の場合

F3FMsmolistenercbl.lib

(F3FMSMOCBL.lib/F3FMSMOCBLSV.lib)

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

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

C言語
セションIDの場合

libtdsmolistener2.so/libtdsmolistener2_nt.so  注1

(libtdsmo.so/libtdsmo_nt.so  注1)

クライアント識別子の場合

libtdsmolistener.so/libtdsmolistener_nt.so  注1

(libtdsmo.so/libtdsmo_nt.so  注1)

C++言語
セションIDの場合

libtdsmolistener2cpp.so/libtdsmolistener2cpp_nt.so  注1

(libtdsmocpp.so/libtdsmocpp_nt.so  注1)

libtdsmolistener2cpp50.so/libtdsmolistener2cpp50_nt.so  注1、注2

(libtdsmocpp50.so/libtdsmocpp50_nt.so  注1、注2)

クライアント識別子の場合

libtdsmolistenercpp.so/libtdsmolistenercpp_nt.so  注1

(libtdsmocpp.so/libtdsmocpp_nt.so  注1)

libtdsmolistenercpp50.so/libtdsmolistenercpp50_nt.so  注1、注2

(libtdsmocpp50.so/libtdsmocpp50_nt.so  注1、注2)

COBOL
セションIDの場合

libtdsmolistener2cbl.so/libtdsmolistener2cbl_mt.so  注3

(libtdsmocbl.so/libtdsmocbl_mt.so)  注3

クライアント識別の場合

libtdsmolistenercbl.so/libtdsmolistenercbl_mt.so  注3

(libtdsmocbl.so/libtdsmocbl_mt.so)  注3

注1

  ファイル名に“_nt”の付いたライブラリは、プロセスモードで動作するアプリケーションを作成するためのものです。アプリケーションをプロセスモードで動作させる場合は、ファイル名に“_nt”の付いたライブラリを使用してください。

注2

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

注3

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

C言語
セションIDの場合

libtdsmolistener2.so/libtdsmolistener2_nt.so  注1

(libtdsmo.so/libtdsmo_nt.so  注1)

クライアント識別子の場合

libtdsmolistener.so/libtdsmolistener_nt.so  注1

(libtdsmo.so/libtdsmo_nt.so  注1)

C++言語
セションIDの場合

libtdsmolistener2cpp.so/libtdsmolistener2cpp_nt.so  注1

(libtdsmocpp.so/libtdsmocpp_nt.so  注1)

クライアント識別子の場合

libtdsmolistenercpp.so/libtdsmolistenercpp_nt.so  1

(libtdsmocpp.so/libtdsmocpp_nt.so  注1)

1

  ファイル名に“_nt”の付いたライブラリは、プロセスモードで動作するアプリケーションを作成するためのものです。アプリケーションをプロセスモードで動作させる場合は、ファイル名に“_nt”の付いたライブラリを使用してください。

5.3.3.4 COBOLを使用する場合の注意事項

  COBOLにより事象通知リスナを作成する場合、以下の点に注意してください。
  なお、COBOLはWindows(R)版、Solaris版のみ使用できます。

(1) 事象通知リスナ実装関数のコンパイル方法

  COBOLのサーバアプリケーションはダイナミックリンクライブラリ(dll)の形態で利用されます。事象通知リスナのdllの名称は以下のようにしてください。

セションIDの場合

ISTD-SMO-LISTENER2.dll

クライアント識別子の場合

ISTD-SMO-LISTENER.dll

  事象通知リスナ実装関数をコンパイルする場合、コンパイルオプションにNAMEオプションを指定してコンパイルしてください。ここで作成されたオブジェクトと提供ライブラリ(F3FMsmolistener2cbl.libまたはF3FMsmolistenercbl.lib)をリンクすることでdllを作成することができます。

  また、dll作成の際にはモジュール定義ファイルが必要です。モジュール定義ファイルのひな型(F3FMsmolistener2cbl.defおよびF3FMsmolistenercbl.def)は、以下のフォルダに格納されています。

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

  COBOLのサーバアプリケーションはsoライブラリの形態で利用されます。事象通知リスナのsoライブラリの名称は以下のようにしてください。

セションIDの場合

libISTD-SMO-LISTENER2.so

クライアント識別子の場合

libISTD-SMO-LISTENER.so

コンパイル方法
セションIDの場合

  

    cobol -G -lcobol -L$OD_HOME/lib -lOMcbl -L$TD_HOME/usr/lib
          -ltdsmolistener2cbl -o libISTD-SMO-LISTENER2.so
          ISTD_SMO_LISTENER2.cbl
クライアント識別子の場合

  

    cobol -G -lcobol -L$OD_HOME/lib -lOMcbl -L$TD_HOME/usr/lib
          -ltdsmolistenercbl -o libISTD-SMO-LISTENER.so
          ISTD_SMO_LISTENER.cbl

  $OD_HOME:CORBAサービスのインストールディレクトリ
  $TD_HOME:コンポーネントトランザクションサービスのインストールディレクトリ

(2) OD_impl_instでの登録

  OD_impl_instで指定する定義ファイルに以下の指定が必要です。

セションIDの場合

  

    rep_id                       = IDL:ISTD/SMO_LISTENER2:1.0
    IDL:ISTD/SMO_LISTENER2:1.0   = ISTD-SMO-LISTENER2.dll
    
 

    rep_id                       = IDL:ISTD/SMO_LISTENER2:1.0
    IDL:ISTD/SMO_LISTENER2:1.0 = /user/libISTD-SMO-LISTENER2.so

クライアント識別子の場合

  

    rep_id                       = IDL:ISTD/SMO_LISTENER:1.0
    IDL:ISTD/SMO_LISTENER2:1.0   = ISTD-SMO-LISTENER.dll

    rep_id                      = IDL:ISTD/SMO_LISTENER:1.0
    IDL:ISTD/SMO_LISTENER:1.0 = /user/libISTD-SMO-LISTENER.so

(3) 実行時の注意事項

  COBOLアプリケーションはノンスレッドプログラムだけが可能となります。

  マルチスレッドプログラムは使用できません。

  このため、LD_LIBRARY_PATHに、CORBAサービスのノンスレッドアプリケーション用のライブラリのパスを指定する必要があります。ノンスレッド用のライブラリについては、“アプリケーション作成ガイド(CORBAサービス編)”を参照ください。