名前
CORBA::ORB::register_reply_interceptor - 出口関数の登録
形式
void CORBA::ORB::register_reply_interceptor( void (*funcptr)(void), CORBA_Environment &env );
機能説明
引数の関数ポインタ(funcptr)で指定した関数を出口関数として登録します。登録した出口関数は、サーバアプリケーションのインタフェース実装関数が処理を完了し、クライアントへリプライを送信した後に実行されます。
なお、インタフェース実装関数にonewayが指定されているなど、クライアントへリプライが送信されない場合でも、インタフェース実装関数の処理が完了した後に出口関数が実行されます。
パラメタ
出口関数の関数ポインタ。
例外情報が格納される構造体。
復帰値
正常復帰した場合、envのexceptionメンバにNULLオブジェクトリファレンスが設定されます。
異常終了した場合は、envのexceptionメンバにSystemExceptionオブジェクトのオブジェクトリファレンスが設定されます。設定される例外情報及びマイナーコードの意味については、“メッセージ集”の“CORBAサービスから通知される例外情報/マイナーコード”を参照してください。
活性化関数(CORBA::BOA::impl_is_readyまたはCORBA::BOA::obj_is_ready)発行後に、本関数が発行されました。
出口関数の関数ポインタ(funcptr)にNULLが指定されました。
クライアント用ライブラリ(ODWINCPP.LIB)が使用されています。
既に出口関数が登録されています。
注意事項
出口関数は以下の形式にする必要があります。
-------------------
void 出口関数名()
-------------------
また、出口関数としてメンバ関数を使用する場合は、public指定の静的メンバ関数とする必要があります。
一つのアプリケーションにつき、登録できる出口関数は一つです。
活性化関数(CORBA::BOA::impl_is_readyまたはCORBA::BOA::obj_is_ready)を発行するよりも前に、本関数を発行する必要があります。
本関数で登録した出口関数の処理が監視時間(インプリメンテーションリポジトリ定義のreply_interceptor_timeoutで設定。デフォルトは300秒)以内に終了しなかった場合、アプリケーションは強制終了されます。このため、本関数を使用する場合は、アプリケーション自動再起動機能が存在するワークユニット配下でのアプリケーション運用を推奨します。
クライアント用ライブラリ(ODWINCPP.LIB)では使用できません。
使用例
class MyClass { public: static void exitfunc() { /* 出口関数の処理 */ } }; int main( int argc, char *argv[] ) { CORBA::ORB_ptr orb; CORBA::Environment_ptr env = new CORBA::Environment; orb = CORBA::ORB_init( argc, argv, FJ_OM_ORBid, *env ); orb->register_reply_interceptor( MyClass::exitfunc, *env ); ... }