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

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

4.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              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 );

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

Copyright 2008 FUJITSU LIMITED