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

第7章 アプリケーションの開発(COBOL)> 7.2 クライアントアプリケーションのプログラミング(動的起動インタフェース)

7.2.3 インタフェースリポジトリからサーバアプリケーション情報の獲得

 インタフェースリポジトリには、ドメイン全体のサーバアプリケーションの情報が格納されています。また、IDLで定義されたモジュール名、インタフェース名、メソッド名およびパラメタが階層構造で格納されます。
 サーバアプリケーションの情報を獲得するために以下のような(1)から(3)の手順で検索を行います。

(1)InterfaceDefオブジェクトリファレンスの獲得

 インタフェースリポジトリからサーバアプリケーションの情報を獲得するためには、INTERFACEDEFオブジェクトのオブジェクトリファレンスが必要です。そのため、サーバアプリケーションのオブジェクト名をパラメタとして、ネーミングサービスからサーバアプリケーションのオブジェクトリファレンスを求め、その後、CORBA-OBJECT-GET-INTERFACEメソッドにより、InterfaceDefオブジェクトリファレンスを獲得します。

     DATA DIVISION.
     WORKING-STORAGE SECTION.
     01 STR-BUF PIC X(30). 
     01 COPY COSNAMING-NAMECOMPONENT IN CORBA REPLACING
             COSNAMING-NAMECOMPONENT BY NAME-COMPONENT. 
     01 NAME-COMPONENT-A USAGE POINTER. 
     01 COPY COSNAMING-NAME IN CORBA REPLACING COSNAMING-NAME BY NAME. 
     01 NAME-A USAGE POINTER. 
     01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ. 
     01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY INTF-INTF. 

    PROCEDURE DIVISION. 
  * オブジェクト名
       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. 
  * Sequenceの要素数
       MOVE 1 TO NUM. 
  *  CosNamingのアクセス情報格納用のSequence領域獲得
       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. 
  * CosNamingの要素設定
       CALL "CORBA-SEQUENCE-ELEMENT-SET" USING
             NAME-A
             NUM
             NAME-COMPONENT-A. 
  * サーバアプリケーションのオブジェクトリファレンスを獲得 
       CALL "COSNAMING-NAMINGCONTEXT-RESOLVE" USING
                COS-NAMING
                NAME
                ENV
                OBJ. 
       MOVE "COSNAMING-NAMINGCONTEXT-RESOLVE" TO MESS. 
       PERFORM ENV-CHECK. 
  * サーバアプリケーションのInterfaceDefを獲得 *
     CALL "CORBA-OBJECT-GET-INTERFACE" USING
           OBJ
           ENV
           INTF-INTF.

(2)OperationDef オブジェクトリファレンスの獲得

 CORBA-INTERFACEDEF-LOOKUP-NAMEメソッドにより、サーバアプリケーションが複数もっているメソッドから指定されたメソッドをインタフェースリポジトリから検索します。パラメタとしてサーバアプリケーションのメソッド名を指定します。結果として、指定したメソッド情報が格納されているOPERATIONDEFオブジェクトのオブジェクトリファレンスが返されます。

     DATA DIVISION.
     WORKING-STORAGE SECTION.
     01 BUF USAGE POINTER. 
     01 COPY DEFINITIONKIND IN CORBA REPLACING CORBA-DEFINITIONKIND BY DK-FLAG.
     01 COPY BOOLEAN IN CORBA REPLACING CORBA-BOOLEAN BY BL.
     01 INTF-OPR USAGE POINTER. 

    PROCEDURE DIVISION. 
  * メソッド名の入力
     DISPLAY " Please input method name==>".
     ACCEPT BUF. 
  * オブジェクトリファレンスの取得 : Operation情報の取得
     SET CORBA-DK-OPERATION OF DK-FLAG TO TRUE. 
     MOVE -1 TO NUM. 
     MOVE CORBA-FALSE TO BL. 
     CALL "CORBA-INTERFACEDEF-LOOKUP-NAME" USING
          INTF-INTF
          BUF
          NUM
          DK-FLAG
          BL
          ENV
          INTF-OPR.  

(3)パラメタ情報の獲得

 CORBA-OPERATIONDEF-DESCRIBEメソッドにより、サーバアプリケーションがもっているメソッドのパラメタの情報(パラメタの名前、個数、パラメタの型等)をインタフェースリポジトリから検索します。パラメタとして、OPERATIONDEFオブジェクトリファレンスを指定します。

     DATA DIVISION.
     WORKING-STORAGE SECTION.
     01 WORK-POINTER USAGE POINTER. 
     01 DESCRIPTION USAGE POINTER. 

     LINKAGE SECTION.
     01 COPY CONTAINED IN CORBA REPLACING CORBA-CONTAINED BY TMP-CONT.

    PROCEDURE DIVISION. 
  * パラメタ情報の構造体の取得
        MOVE 1 TO NUM. 
        CALL "CORBA-SEQUENCE-ELEMENT-GET" USING
              INTF-OPR
              NUM
              WORK-POINTER. 
        SET ADDRESS OF TMP-CONT TO WORK-POINTER. 
        CALL "CORBA-OPERATIONDEF-DESCRIBE" USING
              TMP-CONT
              ENV
              DESCRIPTION.

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

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