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

第7章 アプリケーションの開発(COBOL)> 7.6 サーバアプリケーションの登録

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

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

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

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


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

OD_or_adm -c IDL:ODdemo/calculator:1.0 -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 SJIS
 -L EUC
 ネーミングサービスに登録するオブジェクトに対してコード系を指定します。
 -n ODdemo::calculator
 ネーミングサービスに登録するオブジェクト名を指定します。

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

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

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

  *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コマンドで行います。


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

All Rights Reserved, Copyright(C) 富士通株式会社 2005