ページの先頭行へ戻る
Interstage Application Server V13.0.0 アプリケーション作成ガイド(CORBAサービス編)
FUJITSU Software

3.2.2 サーバの活性化

サーバアプリケーションの初期化が完了すると、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

メソッドは即時に復帰します。
その後、thr_exitを呼び出す必要があります。

) メソッドの復帰後は、初期化時にオープンしたファイルのクローズ処理、および領域の解放処理などの非活性化処理を行う必要があります。詳細については、“3.2.4 サーバの非活性化”を参照してください。


注意

以下の条件のとき、CORBA_BOA_impl_is_ready()/CORBA_BOA_obj_is_ready()が復帰せずにサーバアプリケーションが終了します。

  • サーバアプリケーションをプロセスモードで作成している場合  かつ

  • サーバアプリケーションをCORBAワークユニット運用している場合  かつ

  • CORBAワークユニットを停止した場合

CORBA_BOA_impl_is_ready()/CORBA_BOA_obj_is_ready()の後に後処理を行う場合は、サーバアプリケーションをスレッドモードで作成するか、またはワークユニットの出口機能を利用してください。ワークユニットの出口機能に関しては、“OLTPサーバ運用ガイド”の“ワークユニットの出口機能”を参照してください。

以下の例で使用されている“_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 );