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

6.4.2 ネーミングサービスへの登録

  作成したサーバアプリケーションを他のアプリケーションからオブジェクトとしてアクセスできるようにするために、そのオブジェクトを識別するためのオブジェクトリファレンスを作成します。同時に作成したオブジェクトリファレンスをネーミングサービスに登録します。
  オブジェクトを作成する方法として以下の方法があります。

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

  OD_or_admコマンドは、オブジェクトリファレンス作成後、ネーミングサービスに登録します。OD_or_admコマンドでの登録例と指定する情報を以下に示します。



ネーミングサービスへの登録

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

  -c IDL:ODdemo/calculator:1.0

  指定されたインタフェースリポジトリIDでオブジェクトリファレンスを登録します

  -L SJIS

  ネーミングサービスに登録するオブジェクトに対してコード系を指定します。

  -n ODdemo::calculator

  ネーミングサービスに登録するオブジェクト名を指定します。



ネーミングサービスへの登録

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

  -c IDL:ODdemo/calculator:1.0

  指定されたインタフェースリポジトリIDでオブジェクトリファレンスを登録します

  -L EUC

  ネーミングサービスに登録するオブジェクトに対してコード系を指定します。

  -n ODdemo::calculator

  ネーミングサービスに登録するオブジェクト名を指定します。


サーバアプリケーションで作成する方法

  以下の流れで処理を行います。



  以下にプログラミングの例を示します。

  *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. 
  *その他の変数
   01 TEMP-BUF USAGE POINTER. 
   01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY STRING-LENGTH. 
   01 INTF-INTF-A PIC X(25) VALUE "IDL:ODdemo/calculator:1.0". 
   01 IMPL-INTF-A PIC X(25) VALUE "IDL:ODdemo/calculator:1.0". 
   01 R-ID-P USAGE POINTER. 
   01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY NEW-OBJ. 
   01 NAMESERVICEID USAGE POINTER. 
   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 ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY NUM. 
   01 STR-BUF PIC X(64). 
  *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. 

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

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

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

  * NAMESERVICEIDに格納した領域の解放
      CALL "CORBA-FREE" USING NAMESERVICEID. 

  * オブジェクト名の設定
      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. 

  * オブジェクト名の数
      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
            NEW-OBJ
            ENV.

) CORBA-BOA-CREATE関数呼出し時にインプリメンテーションリポジトリに定義されているデフォルトコード系でオブジェクトリファレンスを作成します。デフォルトコード系の設定はOD_impl_instまたはOD_set_envコマンドで行います。