サーバアプリケーションの初期化が完了すると、ORBに対してその旨を通知します。ORBは、この命令が発行された時点で、クライアントからの要求をサーバアプリケーションに伝えます。活性化の方法は、サーバのタイプにより以下のように異なります。
サーバのタイプ | メソッド |
---|---|
shared server | CORBA_BOA_impl_is_ready |
unshared server | CORBA_BOA_obj_is_ready |
persistent server | CORBA_BOA_impl_is_ready |
(1)インプリメンテーションリポジトリのオブジェクトリファレンスの獲得
CORBA_ORB_resolve_initial_references()を使用して、インプリメンテーションリポジトリのオブジェクトリファレンスを獲得します。第2パラメタには、CORBA_ORB_ObjectId_ImplementationRepositoryを指定します。
(2) ImplementationDefオブジェクトのオブジェクトリファレンスの検索
FJ_ImplementationRep_lookup_id()を使用して、ImplementationDefオブジェクトのオブジェクトリファレンスを求めます。第1パラメタには、サーバアプリケーションのFJ_ImplementationRepオブジェクトを指定します。
(3) サーバの活性化
CORBA_BOA_impl_is_ready()/CORBA_BOA_obj_is_ready()を使用して、サーバの活性化を行います。
サーバアプリケーションはプロセスで実装するか、スレッドで実装するかにより、メソッドの動作が異なります。また、スレッドで実装する場合、インプリメンテーションリポジトリ内に設定されている情報によっても異なります。動作の違いを以下に示します。
条件 | 動作 | |
---|---|---|
プロセスで実装 | OD_impl_instでmode=SYNC_END | メソッドは即時に復帰せず、このオブジェクトの停止がオペレータにより指示されたときに復帰します。(注) |
スレッドで実装 | OD_impl_instでmode=SYNC_END | 同上 |
OD_impl_instでmode=COMPATIBLE | メソッドは即時に復帰します。 |
注) メソッドの復帰後は、初期化時にオープンしたファイルのクローズ処理、および領域の解放処理などの非活性化処理を行う必要があります。詳細については、“3.2.4 サーバの非活性化”を参照してください。
以下の例で使用されている“_IMPL_ODdemo_calculator”は、IDLコンパイラによって生成されたヘッダファイルに定義されている“_IMPL_”で始まる文字列です。例ではヘッダファイルに定義されている文字列を使用していますが、活性化対象のインプリメンテーションリポジトリIDを指定する必要があります。
CORBA_ImplementationDef impl; /* ImplementationDefオブジェクトリファレンス */ FJ_ImplementationRep impl_rep; /* ImplementationRepオブジェクトリファレンス */ /* インプリメンテーション情報のオブジェクトリファレンス検索 */ impl_rep = CORBA_ORB_resolve_initial_references( orb, CORBA_ORB_ObjectId_ImplementationRepository, &env); /* ImplementationRepオブジェクトリファレンス検索 */ impl = FJ_ImplementationRep_lookup_id( impl_rep, _IMPL_ODdemo_calculator, /*リポジトリID */ &env ); /* サーバの活性化 */ CORBA_BOA_impl_is_ready(boa, impl, &env );