サーバアプリケーションをCORBAサービスのインプリメンテーションリポジトリとネーミングサービスへ登録する必要があります。OD_impl_instコマンドおよびOD_or_admコマンドを使用して登録してください。
インプリメンテーションリポジトリとネーミングサービスへの登録について、以下に示します。
サーバアプリケーション情報のインプリメンテーションリポジトリへの登録
サーバアプリケーションのオブジェクトリファレンスの作成とネーミングサービスへの登録
■サーバアプリケーション情報のインプリメンテーションリポジトリへの登録
OD_impl_instコマンドを使用して、インプリメンテーションリポジトリにサーバアプリケーション情報を登録します。OD_impl_instコマンドの詳細については、“リファレンスマニュアル(コマンド編)”を参照してください。
OD_impl_inst -ax defname
なお、OD_impl_instコマンド実行時に指定するインプリメンテーション情報定義ファイルのアプリケーション固有データには、サーバアプリケーションが使用するリソース定義ファイルを以下のように指定する必要があります。
アプリケーション固有データ(項目名: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"
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
■サーバアプリケーションのオブジェクトリファレンスの作成とネーミングサービスへの登録
サーバアプリケーションを他のアプリケーションからアクセス可能にするためには、目的のアプリケーションを識別するためのオブジェクトリファレンスを作成する必要があります。また、同時に作成したオブジェクトリファレンスをネーミングサービスに登録することにより、他のアプリケーションからのアクセスが可能となります。
サーバアプリケーションのオブジェクトリファレンスの作成方法、およびネーミングサービスへの登録方法について、以下に説明します。
OD_or_admコマンド(ORBの管理コマンド)は、オブジェクトリファレンス作成後、ネーミングサービスに登録します。
OD_or_admコマンドの登録例を以下に示します。OD_or_admコマンドの詳細については、“リファレンスマニュアル(コマンド編)”を参照してください。
OD_or_adm -c IDL:ODdemo/calculator:1.0 -n ODdemo::calculator
CORBA_ORB orb; /* ORB_initで取得したObject */
CORBA_BOA boa; /* ORB_BOA_initで取得したObject */
CORBA_Repository intf_rep; /* インタフェースリポジトリのオブジェクトリファレンス */
CORBA_InterfaceDef intf; /* インタフェースリポジトリのInterfaceDef */
FJ_ImplementationRep impl_rep; /* インプリメンテーションリポジトリのオブジェクトリファレンス */
CORBA_ImplementationDef impl; /* インプリメンテーションリポジトリのImplementationDef */
CORBA_Object new_obj; /* 作成したオブジェクトリファレンス */
CORBA_ReferenceData id; /* ReferenceData格納域 */
CosNaming_NamingContext cos_naming; /* NamingServiceのオブジェクトリファレンス */
CosNaming_Name name; /* 検索した情報格納域 */
CosNaming_NameComponent name_component; /* 検索した情報格納域 */
CORBA_Environment env; /* 例外情報 */
/* ODの初期化(省略) */
:
/* ReferenceDataの初期化 */
id._length = 0;
id._maximum = 0;
id._buffer = NULL;
/* インタフェースリポジトリのオブジェクトリファレンスの獲得 */
intf_rep = CORBA_ORB_resolve_initial_references(
orb,
CORBA_ORB_ObjectId_LightInterfaceRepository,
&env );
/* InterfaceDefオブジェクトのオブジェクトリファレンスの獲得 */
intf = CORBA_Repository_lookup_id(
intf_rep,
"...", /* インタフェースリポジトリID */
&env );
/* インプリメンテーションリポジトリのオブジェクトリファレンスの獲得 */
impl_rep = CORBA_ORB_resolve_initial_references(
orb,
CORBA_ORB_ObjectId_ImplementationRepository,
&env );
/* ImplementationDefオブジェクトのオブジェクトリファレンスの獲得 */
impl = FJ_ImplementationRep_lookup_id(
impl_rep,
"...", /* インプリメンテーションリポジトリID */
&env );
/* オブジェクトリファレンスの作成 */
new_obj = CORBA_BOA_create( boa, &id, intf, impl, &env );
/* NamingServiceのリファレンスを獲得 */
cos_naming = CORBA_ORB_resolve_initial_references(
orb,
CORBA_ORB_ObjectId_NameService,
&env);
name._length = name._maximum = 1; /* オブジェクト名の数 */
name._buffer = &name_component; /* オブジェクト名格納域 */
name_component.id = "ODdemo::calculator"; /* オブジェクト名 */
name_component.kind = ""; /* オブジェクトのタイプ */
/* ネーミングサービスへの登録 */
CosNaming_NamingContext_bind (cos_naming, &name, new_obj, &env );