セション情報管理機能で、セション情報域の未使用時間監視を使用した場合に、未使用時間を超過したセション情報域の発生の事象通知をSMOから受け付けるオブジェクト(事象通知リスナオブジェクト)の作成方法について示します。
CORBAサーバアプリケーションとして作成する必要があります。そのため、最初に、CORBAサービスの初期化が必要です。
プログラミング言語がC言語またはC++言語の場合、CORBAサービスの初期化直後に次の関数を発行する必要があります。
ISTD_SMO_LISTENER2_init();
ISTD_SMO_LISTENER_init();
SMOからの事象通知を受け取るために、以下に示すインタフェース実装関数名およびパラメタ形式でSMO_LISTENERインタフェース(クライアント識別子の場合)またはSMO_LISTENER2インタフェース(セションIDの場合)のtimeout()オペレーションを実装する必要があります。各プログラミング言語での実装形式を示します。
なお、事象通知のデータ形式については、“5.3.2.5 IDL”を参照してください。
セションIDを使用する場合
void ISTD_SMO_LISTENER2_timeout( CORBA_Object obj, ISTD_SMO_LISTENER2_DelSlotInfo *slot, CORBA_Environment *env ) { 事象通知に対する処理を記述してください。 } |
void ISTD_SMO_LISTENER2_impl::timeout( const ISTD::SMO_LISTENER2::DelSlotInfo &slot, CORBA::Environment &env ) throw( CORBA::Exception ) { 事象通知に対する処理を記述してください。 } |
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". |
クライアント識別子を使用する場合
void ISTD_SMO_LISTENER_timeout( CORBA_Object obj, ISTD_SMO_LISTENER_DelSlotInfo *slot, CORBA_Environment *env ) { 事象通知に対する処理を記述してください。 } |
void ISTD_SMO_LISTENER_impl::timeout( const ISTD::SMO_LISTENER::DelSlotInfo &slot, CORBA::Environment &env ) throw( CORBA::Exception ) { 事象通知に対する処理を記述してください。 } |
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". |
SMOから事象通知を受け取るためには、事象通知を受け取るリスナアプリケーションのオブジェクトリファレンスを、SMOに登録する必要があります。リスナアプリケーションの登録は、SMOのadd_listener()オペレーション(クライアント識別子の場合)またはadd_listener2()オペレーション(セションIDの場合)を使用して行います。
各プログラミング言語での使用方法を以下に示します。
セションIDを使用する場合
CORBA_Environment CoENV; CORBA_Object CoOBJ; /* SMO の OR */ CORBA_Object LiOBJ; /* リスナ の OR */ ISTD_SMO_add_listener2( CoOBJ, LiOBJ, &CoEnv ); |
CORBA::Environment_ptr env; ISTD::SMO_ptr smo; // SMO の OR CORBA::Object* obj_listener; // リスナ の OR smo->add_listener2( obj_listener, *env); |
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. |
クライアント識別子を使用する場合
CORBA_Environment CoENV; CORBA_Object CoOBJ; /* SMO の OR */ CORBA_Object LiOBJ; /* リスナ の OR */ ISTD_SMO_add_listener( CoOBJ, LiOBJ, &CoEnv ); |
CORBA::Environment_ptr env; ISTD::SMO_ptr smo; // SMO の OR CORBA::Object* obj_listener; // リスナ の OR smo->add_listener( obj_listener, *env); |
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. |
SMOからの事象通知受け取りを停止する場合、SMOに登録したリスナアプリケーションのオブジェクトリファレンスの登録抹消を行う必要があります。リスナアプリケーションの登録抹消はSMOのdel_listener()オペレーション(クライアント識別子の場合)またはdel_listener2()オペレーション(セションIDの場合)を使用して行います。
各プログラミング言語での使用方法を以下に示します。
セションIDを使用する場合
CORBA_Environment CoENV; CORBA_Object CoOBJ; /* SMO の OR */ CORBA_Object LiOBJ; /* リスナ の OR */ ISTD_SMO_del_listener2( CoOBJ, LiOBJ, &CoEnv ); |
CORBA::Environment_ptr env; ISTD::SMO_ptr smo; // SMO の OR CORBA::Object* obj_listener; // リスナ の OR smo->del_listener2( obj_listener, *env); |
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. |
クライアント識別子を使用する場合
CORBA_Environment CoENV; CORBA_Object CoOBJ; /* SMO の OR */ CORBA_Object LiOBJ; /* リスナ の OR */ ISTD_SMO_del_listener( CoOBJ, LiOBJ, &CoEnv ); |
CORBA::Environment_ptr env; ISTD::SMO_ptr smo; // SMO の OR CORBA::Object* obj_listener; // リスナ の OR smo->del_listener( obj_listener, *env); |
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. |
事象通知リスナを実装するプログラムでは、以下のインクルードファイルをインクルードしてください。()内は、事象通知リスナの登録および登録抹消を行う場合に必要なインクルードです。
ISTD_smo_listener2.h
(ISTD_smo.h)
ISTD_smo_listener.h
(ISTD_smo.h)
ISTD_smo_listener2cpp.h
(ISTD_smocpp.h)
ISTD_smo_listenercpp.h
(ISTD_smocpp.h)
格納場所は、以下です。
INTERSTAGEのインストールフォルダ\td\include |
コンポーネントトランザクションサービスのインストールディレクトリ/usr/include |
事象通知リスナを実装するためには、作成したプログラムに以下の提供ライブラリをリンクする必要があります。
()内のライブラリは、事象通知リスナのSMOへの登録および登録抹消を行う場合にリンクする必要があります。
F3FMsmolistener2.lib
(F3FMsmo.lib/F3FMsmosv.lib)
F3FMsmolistener.lib
(F3FMsmo.lib/F3FMsmosv.lib)
F3FMsmolistener2cpp.lib
(F3FMsmocpp.lib/F3FMsmocppsv.lib)
F3FMsmolistenercpp.lib
(F3FMsmocpp.lib/F3FMsmocppsv.lib)
F3FMsmolistener2cbl.lib
(F3FMSMOCBL.lib/F3FMSMOCBLSV.lib)
F3FMsmolistenercbl.lib
(F3FMSMOCBL.lib/F3FMSMOCBLSV.lib)
格納場所は、以下のフォルダです。
INTERSTAGEのインストールフォルダ\td\lib |
libtdsmolistener2.so/libtdsmolistener2_nt.so 注1
(libtdsmo.so/libtdsmo_nt.so 注1)
libtdsmolistener.so/libtdsmolistener_nt.so 注1
(libtdsmo.so/libtdsmo_nt.so 注1)
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)
libtdsmolistener2cbl.so/libtdsmolistener2cbl_mt.so 注3
(libtdsmocbl.so/libtdsmocbl_mt.so) 注3
libtdsmolistenercbl.so/libtdsmolistenercbl_mt.so 注3
(libtdsmocbl.so/libtdsmocbl_mt.so) 注3
ファイル名に“_nt”の付いたライブラリは、プロセスモードで動作するアプリケーションを作成するためのものです。アプリケーションをプロセスモードで動作させる場合は、ファイル名に“_nt”の付いたライブラリを使用してください。
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を使用するようにしてください。
PowerCOBOL97を使用して、マルチスレッドのCOBOL言語のアプリケーションを作成する場合は、libtdsmolistener2cbl.so、libtdsmolistenercbl.so、libtdsmocbl.soのかわりにlibtdsmolistener2cbl_mt.so、libtdsmolistenercbl_mt.so、libtdsmocbl_mt.soを使用するようにしてください。
libtdsmolistener2.so/libtdsmolistener2_nt.so 注1
(libtdsmo.so/libtdsmo_nt.so 注1)
libtdsmolistener.so/libtdsmolistener_nt.so 注1
(libtdsmo.so/libtdsmo_nt.so 注1)
libtdsmolistener2cpp.so/libtdsmolistener2cpp_nt.so 注1
(libtdsmocpp.so/libtdsmocpp_nt.so 注1)
libtdsmolistenercpp.so/libtdsmolistenercpp_nt.so 注1
(libtdsmocpp.so/libtdsmocpp_nt.so 注1)
ファイル名に“_nt”の付いたライブラリは、プロセスモードで動作するアプリケーションを作成するためのものです。アプリケーションをプロセスモードで動作させる場合は、ファイル名に“_nt”の付いたライブラリを使用してください。
COBOLにより事象通知リスナを作成する場合、以下の点に注意してください。
なお、COBOLはWindows(R)版、Solaris版のみ使用できます。
(1) 事象通知リスナ実装関数のコンパイル方法
COBOLのサーバアプリケーションはダイナミックリンクライブラリ(dll)の形態で利用されます。事象通知リスナのdllの名称は以下のようにしてください。
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ライブラリの名称は以下のようにしてください。
libISTD-SMO-LISTENER2.so
libISTD-SMO-LISTENER.so
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で指定する定義ファイルに以下の指定が必要です。
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サービス編)”を参照ください。