ページの先頭行へ戻る
Interstage Application Server アプリケーション作成ガイド(データベース連携サービス編)
Interstage

3.3 サーバアプリケーションの登録

サーバアプリケーションをCORBAサービスのインプリメンテーションリポジトリとネーミングサービスへ登録する必要があります。OD_impl_instコマンドおよびOD_or_admコマンドを使用して登録してください。
インプリメンテーションリポジトリとネーミングサービスへの登録について、以下に示します。

サーバアプリケーション情報のインプリメンテーションリポジトリへの登録

OD_impl_instコマンドを使用して、インプリメンテーションリポジトリにサーバアプリケーション情報を登録します。OD_impl_instコマンドの詳細については、「リファレンスマニュアル(コマンド編)」の「CORBAサービス運用コマンド」-「OD_impl_inst」を参照してください。

OD_impl_inst -ax defname

なお、OD_impl_instコマンド実行時に指定するCORBAアプリケーション情報定義ファイルのアプリケーション固有データには、サーバアプリケーションが使用するリソース定義ファイルを以下のように指定する必要があります。


OD_impl_instコマンドの-axオプションに指定するCORBAアプリケーション情報定義ファイルの設定例

アプリケーション固有データ(項目名:data)は、ダブルクォーテーション("")で囲んで、"RESOURCE:[RM名:]リソース定義名"と指定してください。扱うリソースが1個の場合は、RM名を省略できます。なお、アプリケーションをマルチプロセス運用する場合は、thr_conc_initに「1」を指定してください。

rep_id         = IDL:ODdemo/calculator:1.0
type           = persistent
proc_conc_max  = 8
thr_conc_init  = 1
mode           = SYNC_END
data           = "RESOURCE:resource1"

rep_id         = IDL:ODdemo/calculator:1.0
type           = persistent
proc_conc_max  = 8
thr_conc_init  = 1
env            = LD_LIBRARY_PATH=/opt/FSUNots/lib:/opt/FSUNod/lib/nt;OTS_HOME=/opt/FSUNots
mode           = SYNC_END
data           = "RESOURCE:resource1"

rep_id         = IDL:ODdemo/calculator:1.0
type           = persistent
proc_conc_max  = 8
thr_conc_init  = 1
env            = LD_LIBRARY_PATH=/opt/FJSVots/lib:/opt/FJSVod/lib/nt;OTS_HOME=/opt/FJSVots
mode           = SYNC_END
data           = "RESOURCE:resource1"

また、サーバアプリケーションが複数リソースを扱う場合のdata行の書式は、以下のとおりです。

data="RESOURCE:Rmname1:defname1;Rmname2:defname2; ... ;RmnameN:defnameN"

data行の定義規約

defnameNはリソース定義名、RMnameNはリソース定義名defnameNに対応したRM名です。また、RM名は対応したリソース定義ファイルに記述されているRM名と同一である必要があります。


1つのサーバアプリケーションが複数のリソースにアクセスするためのCORBAアプリケーション情報定義ファイルの例を、以下に示します。

rep_id         = IDL:ODdemo/calculator:1.0
type           = persistent
proc_conc_max  = 8
thr_conc_init  = 1
mode           = SYNC_END
data           = "RESOURCE:RDBII:rdb_resource;Oracle_XA:ora_resource"

rep_id         = IDL:ODdemo/calculator:1.0
type           = persistent
proc_conc_max  = 8
thr_conc_init  = 1
env            = LD_LIBRARY_PATH=/opt/FSUNots/lib:/opt/FSUNod/lib/nt;OTS_HOME=/opt/FSUNots
mode           = SYNC_END
data           = "RESOURCE:RDBII:rdb_resource;Oracle_XA:ora_resource"

rep_id         = IDL:ODdemo/calculator:1.0
type           = persistent
proc_conc_max  = 8
thr_conc_init  = 1
env            = LD_LIBRARY_PATH=/opt/FJSVots/lib:/opt/FJSVod/lib/nt;OTS_HOME=/opt/FJSVots
mode           = SYNC_END
data           = "Oracle_XA:ora_resource"


上記の例は、サーバアプリケーションが2つのデータベースSymfoware/RDBと、Oracleにアクセスするために、data行に2つのリソース定義ファイルを設定しています。


注意

  • 複数のリソース定義ファイルを指定した定義書式により登録されたアプリケーションは、複数リソースアクセス用のXA連携用ライブラリとリンクされたサーバアプリケーションである必要があります。

  • OD_impl_instコマンドは、サーバアプリケーション情報を削除することもできます。
    削除処理の例を以下に示します。

    OD_impl_inst -d -r IDL:ODdemo/calculator:1.0

サーバアプリケーションのオブジェクトリファレンスの作成とネーミングサービスへの登録

サーバアプリケーションを他のアプリケーションからアクセス可能にするためには、目的のアプリケーションを識別するためのオブジェクトリファレンスを作成する必要があります。また、同時に作成したオブジェクトリファレンスをネーミングサービスに登録することにより、他のアプリケーションからのアクセスが可能となります。

サーバアプリケーションのオブジェクトリファレンスの作成方法、およびネーミングサービスへの登録方法について、以下に説明します。


(1) OD_or_admコマンドを使用する方法

OD_or_admコマンド(ORBの管理コマンド)は、オブジェクトリファレンス作成後、ネーミングサービスに登録します。
OD_or_admコマンドでの登録例と指定する情報を、以下に示します。OD_or_admコマンドの詳細については、「リファレンスマニュアル(コマンド編)」の「CORBAサービス運用コマンド」-「OD_or_adm」を参照してください。

OD_or_adm -c IDL:ODdemo/calculator:1.0  -n ODdemo::calculator

(2) サーバアプリケーションで作成する方法
CORBA::ORB_ptr            orb;      // ORB::initで取得したObject
CORBA::BOA_ptr            boa;      // ORB::BOA__initで取得したObject
CORBA::Repository_ptr     intf_rep; // インタフェースリポジトリのオブジェクトリファレンス
CORBA::InterfaceDef_ptr   intf;     // インタフェースリポジトリのInterfaceDef
FJ::ImplementationRep_ptr impl_rep; // インプリメンテーションリポジトリのオブジェクトリファレンス
CORBA::ImplementationDef_ptr impl;  // インプリメンテーションリポジトリのImplementationDef
CORBA::Object_ptr         new_obj;  // サーバアプリケーションのオブジェクトリファレンス
const CORBA::ReferenceData id;      // ReferenceData格納域
CORBA::Object_ptr         obj;      // オブジェクトリファレンス
CORBA::Environment        *env = new CORBA::Environment();  // 例外情報

// ODの初期化(省略)
             :

// インタフェースリポジトリのオブジェクトリファレンスの獲得
obj = orb->resolve_initial_references(
        CORBA_ORB_ObjectId_LightInterfaceRepository,
        *env );
intf_rep = CORBA::Repository::_narrow(obj);
CORBA::release(obj);

// InterfaceDefオブジェクトのオブジェクトリファレンスの獲得
obj = intf_rep->lookup_id(
        "...",  //インタフェースリポジトリID
        *env );
intf = CORBA::InterfaceDef::_narrow(obj);
CORBA::release(obj);

// インプリメンテーションリポジトリのオブジェクトリファレンスの獲得
obj = orb->resolve_initial_references(
        CORBA_ORB_ObjectId_ImplementationRepository,
        *env );
impl_rep =CORBA::ImplementationRep::_narrow(obj);
CORBA::release(obj);

// ImplementationDefオブジェクトのオブジェクトリファレンスの獲得
obj = impl_rep->lookup_id(
        "...",  //インプリメンテーションリポジトリID
        *env );
impl = CORBA::ImplementaionDef::_narrow(obj);
CORBA::release(obj);

// オブジェクトリファレンスの作成
new_obj = boa->create( &id, intf, impl , *env );

// NamingServiceのオブジェクトリファレンス獲得
obj = orb->resolve_initial_references( CORBA_ORB_ObjectId_NameService, *env );

// NamingContextクラスへの変換
CosNaming::NamingContext_ptr NamingContext_obj = CosNaming::NamingContext::_narrow( obj );

CosNaming::Name_ptr          name;              // CosNaming::Nameのインスタンス
CosNaming::NameComponent_var *name_component;   // オブジェクト名格納

// CosNaming::NameComponent_var領域の獲得
name_component = CosNaming::Name::allocbuf(1);

// オブジェクト名
name_component[0]->id = (const CORBA::Char *)"ODdemo::calculator";
// オブジェクトのタイプ
name_component[0]->kind = (const CORBA::Char *)"";

// CosNaming::Name領域の獲得
name = new CosNaming::Name(1,1,name_component,CORBA_TRUE );
NamingContext_obj->bind(*name,new_obj, *env);