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

5.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
IDL:ODdemo/calculator:1.0 = ODDEMO-CALCULATOR.DLL
mode                      = SYNC_END
data                      = "RESOURCE:resource1"

Rep_id                    = IDL:ODdemo/calculator:1.0
type                      = persistent
proc_conc_max             = 8
thr_conc_init             = 1
IDL:ODdemo/calculator:1.0 = /home/guest/libODDEMO-CALCULATOR.so
env                       = LD_LIBRARY_PATH=/opt/FSUNots/lib:/opt/FSUNod/lib/nt;OTS_HOME=/opt/FSUNots
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
IDL:ODdemo/calculator:1.0 = ODDEMO-CALCULATOR.DLL
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
IDL:ODdemo/calculator:1.0 = /home/guest/libODDEMO-CALCULATOR.so
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"

上記の例は、サーバアプリケーションが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) サーバアプリケーションで作成する方法
:
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY CONST IN CORBA.
01 TEMP-BUF USAGE POINTER.
01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY STRING-LENGTH.
01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV.
01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY NEW-OBJ.
01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ.
01 COPY COSNAMING-NAMINGCONTEXT IN CORBA REPLACING COSNAMING-NAMINGCONTEXT BY
COS-NAMING.
01 COPY COSNAMING-NAME IN CORBA REPLACING COSNAMING-NAME BY NAME.
01 NAME-A USAGE POINTER.
01 COPY COSNAMING-NAMECOMPONENT IN CORBA REPLACING COSNAMING-NAMECOMPONENT BY
NAME-COMPONENT.
01 NAME-COMPONENT-A USAGE POINTER.
01 COPY LONG IN CORBA REPLACING CORBA-LONG BY NUM.
* ORB-INITで取得したObject
01 COPY ORB IN CORBA REPLACING CORBA-ORB BY ORB.
* ORB-BOA-INITで取得したObject
01 COPY BOA IN CORBA REPLACING CORBA-BOA BY BOA.
* インタフェースリポジトリのオブジェクトリファレンス
01 COPY REPOSITORYID IN CORBA REPLACING CORBA-REPOSITORYID BY INTF-REP.
* インプリメンテーションリポジトリのオブジェクトリファレンス
01 COPY FJ-IMPLEMENTATIONDEF IN CORBA REPLACING FJ-IMPLEMENTATIONDEF BY IMPL-REP.
* インタフェースリポジトリのInterfaceDef
01 COPY INTERFACEDEF IN CORBA REPLACING CORBA-INTERFACEDEF BY INTF.
* インプリメンテーションリポジトリのImplementationDef
01 COPY IMPLEMENTATIONDEF IN CORBA REPLACING CORBA-IMPLEMENTATIONDEF BY IMPL.
* ReferenceData格納域
01 COPY REFERENCEDATA IN CORBA REPLACING CORBA-REFERENCEDATA BY R-ID.
* ObjectDiretorの初期化(省略)
            :

* インタフェースリポジトリのオブジェクトリファレンスの獲得
     MOVE FUNCTION LENG (CORBA-ORB-OBJECTID-LIGHTINTFR) TO STRING-LENGTH.
     CALL "CORBA-STRING-SET" USING
           TEMP-BUF
           STRING-LENGTH
           CORBA-ORB-OBJECTID-LIGHTINTFR.
     CALL "CORBA-ORB-RESOLVE-INITIAL-REFERENCES" USING
           ORB
           TEMP-BUF
           ENV
           INTF-REP.
     CALL "CORBA-FREE" USING TEMP-BUF.

* InterfaceDefオブジェクトリファレンスの獲得
* INTF-INTF-A : インプリメンテーションリポジトリID
     MOVE FUNCTION LENG (INTF-INTF-A) TO STRING-LENGTH.
     CALL "CORBA-STRING-SET" USING
           TEMP-BUF
           STRING-LENGTH
           INTF-INTF-A.
     CALL "CORBA-REPOSITORY-LOOKUP-ID" USING
           INTF-REP
           TEMP-BUF
           ENV
           INTF.
     CALL "CORBA-FREE" USING TEMP-BUF.

* インプリメンテーションリポジトリのオブジェクトリファレンスの獲得
     MOVE FUNCTION LENG (CORBA-ORB-OBJECTID-IMPLREP) TO STRING-LENGTH.
     CALL "CORBA-STRING-SET" USING
           TEMP-BUF
           STRING-LENGTH
           CORBA-ORB-OBJECTID-IMPLREP.
     CALL "CORBA-ORB-RESOLVE-INITIAL-REFERENCES" USING
           ORB
           TEMP-BUF
           ENV
           IMPL-REP.
     CALL "CORBA-FREE" USING TEMP-BUF.

* ImplementationDefオブジェクトのオブジェクトリファレンスの獲得
     MOVE FUNCTION LENG (IMPL-INTF-A) TO STRING-LENGTH.
     CALL "CORBA-STRING-SET" USING
           TEMP-BUF
           STRING-LENGTH
           IMPL-INTF-A.
     CALL "FJ-IMPLEMENTATIONREP-LOOKUP-ID" USING
           IMPL-REP
           TEMP-BUF
           ENV
           IMPL.
     CALL "CORBA-FREE" USING TEMP-BUF.

* オブジェクトリファレンスの作成
     CALL "CORBA-BOA-CREATE" USING
       BOA
       R-ID
       INTF
       IMPL
       ENV
       NEW-OBJ.

* NamingServiceのObjectIDの設定
     MOVE FUNCTION LENG ( CORBA-ORB-OBJECTID-NAMESERVICE ) TO STRING-LENGTH.
     CALL "CORBA-STRING-SET" USING
         TEMP-BUF
         STRING-LENGTH
     CORBA-ORB-OBJECTID-NAMESERVICE.

* NamingServiceのオブジェクトリファレンス獲得
     CALL "CORBA-ORB-RESOLVE-INITIAL-REFERENCES" USING
        ORB
        TEMP-BUF
        ENV
        COS-NAMING.

* TEMP-BUFに格納した領域を解放する
     CALL "CORBA-FREE" USING TEMP-BUF.

* オブジェクト名の数
     MOVE 1 TO SEQ-LENGTH OF NAME.
     MOVE 1 TO SEQ-MAXIMUM OF NAME.
     MOVE 1 TO NUM.

* オブジェクト名格納域の獲得と設定
     CALL "CORBA-SEQUENCE-COSNAMING-NAMECOMPONENT-ALLOCBUF" USING
        SEQ-MAXIMUM OF NAME
        SEQ-BUFFER OF NAME.
     MOVE FUNCTION ADDR ( NAME ) TO NAME-A.
     MOVE FUNCTION ADDR ( NAME-COMPONENT ) TO NAME-COMPONENT-A.
     CALL "CORBA-SEQUENCE-ELEMENT-SET" USING
        NAME-A
        NUM
     NAME-COMPONENT-A.
     CALL "COSNAMING-NAMINGCONTEXT-BIND" USING
        COS-NAMING
        NAME
        OBJ
        ENV.

* オブジェクト名の設定
     MOVE FUNCTION LENG (STR-BUF) TO STRING-LENGTH.
     MOVE "ODdemo::calculator" TO STR-BUF.
     CALL "CORBA-STRING-SET" USING
        IDL-ID OF NAME-COMPONENT
        STRING-LENGTH
        STR-BUF.

* オブジェクトのタイプの設定
     MOVE " " TO STR-BUF.
     CALL "CORBA-STRING-SET" USING
           KIND OF NAME-COMPONENT
           STRING-LENGTH
           STR-BUF.

* サーバアプリケーションのオブジェクト
     CALL "COSNAMING-NAMINGCONTEXT-BIND" USING
          COS-NAMING
          NAME
          NEW-OBJ
          ENV.