Interstage Application Server アプリケーション作成ガイド (データベース連携サービス編)
目次 索引 前ページ次ページ

第5章 サーバアプリケーションの開発(CORBAアプリケーション/C++言語)

5.5 アプリケーションの登録

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

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

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

OD_impl_inst -ax defname

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

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

 アプリケーション固有データ(項目名: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つのサーバアプリケーションが複数のリソースにアクセスするためのインプリメンテーション情報定義ファイル例を、以下に示します。

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 -c IDL:ODdemo/calculator:1.0 -n ODdemo::calculator

 OD_or_admコマンドの詳細については、“リファレンスマニュアル(コマンド編)”を参照してください。

(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);


目次 索引 前ページ次ページ

Copyright 2008 FUJITSU LIMITED