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

G.2.1 クライアントアプリケーションのプログラミング(静的起動インタフェース)

  静的起動インタフェースを使用する場合のクライアントアプリケーションの処理の流れを以下に示します。



G.2.1.1 初期化

  CORBAの初期化メソッドCORBA-ORB_INITを呼び出し初期化処理を行います。当メソッドの結果として、ORBのオブジェクトリファレンスが返されます。このオブジェクトリファレンスは、以降で呼び出すORBインタフェースを使用する場合に指定します。環境部(ENVIRONMENT DIVISION)およびデータ部(DATA DIVISION)を定義します。ここでは、IDLファイル名を“simple.idl”として説明します。IDLコンパイラが出力する登録集ファイル名は、“simple--rep.cbl”, “simple--const.cbl”,“simple--copy.cbl”となります。

   IDENTIFICATION         DIVISION.
   PROGRAM-ID.            "SIMPLE_C"
  *
   ENVIRONMENT            DIVISION.
   CONFIGURATION          SECTION.
   REPOSITORY. 
  * ObjectDirectorの標準登録集(リポジトリ宣言用)
       COPY               CORBA--REP.
  * ネーミングサービスの標準登録集(リポジトリ宣言用)
       COPY               COSNAMING--REP.
  * IDLコンパイラが出力した登録集(リポジトリ宣言用)
       COPY               SIMPLE--REP.
       .
   SPECIAL-NAMES.
       SYMBOLIC CONSTANT
  * ObjectDirectorの標準登録集(定数宣言用)
       COPY               CORBA--CONST.
  * ネーミングサービスの標準登録集(定数宣言用)
       COPY               COSNAMING--CONST.
  * IDLコンパイラが出力した登録集(定数宣言用)
       COPY               SIMPLE--CONST.
       .
  *
   DATA                   DIVISION.
   WORKING-STORAGE        SECTION.
   01 EXCEPTION-ID        USAGE OBJECT REFERENCE CORBA-STRING.
   01 EXCEPTION-ID-VALUE  PIC   X(50).
   01 API-NAME            PIC   X(50).
   01 ORB                 USAGE OBJECT REFERENCE CORBA-ORB.
  *
   PROCEDURE              DIVISION.
  *
   DECLARATIVES.
  *
   ZEROPARAM-ERR SECTION.
       USE EXCEPTION ODDEMO-CALCULATOR-ZEROPARAM.
       DISPLAY "ZEROPARAM Exception: " API-NAME.
       EXIT PROGRAM.
   END-ZEROPARAM-ERR.
  *
   OTHER-ERROR SECTION.
       USE EXCEPTION CORBA-EXCEPTION.
       DISPLAY "CORBA::UserException: " API-NAME.
       SET EXCEPTION-ID TO IDL-ID OF EXCEPTION-OBJECT AS CORBA-EXCEPTION.
       INVOKE EXCEPTION-ID "GET-VALUE" RETURNING EXCEPTION-ID-VALUE.
       DISPLAY "   Exception-id: " EXCEPTION-ID-VALUE.
       EXIT PROGRAM.
   END-OTHER-ERR.
  *
   END DECLARATIVES.
  *
   MAIN SECTION.
  *
       MOVE "CORBA::ORB_init" TO API-NAME.
       INVOKE CORBA "ORB_INIT"
                          USING     "SIMPLE_C"
                                    FJ-OM_ORBID
                          RETURNING ORB.

  例外処理については、“G.2.3 クライアントアプリケーションの例外処理”を参照してください。


G.2.1.2 ネーミングサービスのオブジェクトリファレンスの獲得

  実行するオブジェクトをネーミングサービスから検索するために、ネーミングサービスのオブジェクトリファレンスが必要となります。CORBAインタフェースのオブジェクトリファレンスの取出しメソッドCORBA-ORB-RESOLVE_INITIAL_REFERENCESによりネーミングサービスのオブジェクトリファレンスを取り出します。このとき、CORBA-ORB-OBJECTID_NAMESERVICEをメソッドのパラメタとして指定します。なお、この定数は、各ORBベンダーが提供しているインクルードファイル等で定義されています。

    DATA DIVISION.
    WORKING-STORAGE        SECTION.
    01 OBJ                 USAGE OBJECT REFERENCE CORBA-OBJECT.

   PROCEDURE DIVISION.
      MOVE "CORBA::ORB::resolve_initial_references" TO API-NAME.
      INVOKE ORB "RESOLVE_INITIAL_REFERENCES"
                     USING     CORBA-ORB-OBJECTID_NAMESERVICE
                     RETURNING OBJ.

G.2.1.3 サーバアプリケーションのオブジェクトリファレンスの獲得

  ネーミングサービスのCOSNAMING-NAMINGCONTEXT-RESOLVEメソッドにより、これから実行したいサーバアプリケーションのオブジェクトリファレンスを取り出します。検索したいオブジェクト名を当メソッドのパラメタとして指定します。

   DATA DIVISION.
   WORKING-STORAGE        SECTION.
   01 NAMING-CONTEXT      USAGE OBJECT REFERENCE COSNAMING-NAMINGCONTEXT.
   01 NAME                TYPE                   COSNAMING-NAME.
   01 NAME-COMPONENT      USAGE OBJECT REFERENCE COSNAMING-NAMECOMPONENT.
   01 NAME-ID             USAGE OBJECT REFERENCE CORBA-STRING.
   01 NAME-KIND           USAGE OBJECT REFERENCE CORBA-STRING.
   01 TARGET-OBJ          USAGE OBJECT REFERENCE ODDEMO-CALCULATOR.

  PROCEDURE DIVISION.
     INVOKE COSNAMING-NAMINGCONTEXT "NARROW"
                        USING     OBJ
                        RETURNING NAMING-CONTEXT.
  *
     INVOKE CORBA-STRING "NEW-WITH-VALUE"
                        USING     "ODdemo::calculator"
                        RETURNING NAME-ID.
  *
     INVOKE CORBA-STRING "NEW-WITH-VALUE"
                        USING     " "
                        RETURNING NAME-KIND.
  *
     INVOKE COSNAMING-NAMECOMPONENT "NEW"
                        RETURNING NAME-COMPONENT.
  *
     SET IDL-ID OF NAME-COMPONENT TO NAME-ID.
     SET KIND   OF NAME-COMPONENT TO NAME-KIND.
  *
     INVOKE SEQUENCE-NAMECOMPONENT-001 "NEW-WITH-LENGTH"
                        USING     1
                        RETURNING NAME.
  *
     INVOKE NAME "SET-VALUE"
                        USING     1
                                  NAME-COMPONENT.
  *
     MOVE "CosNaming::NamingContext::resolve" TO API-NAME.
     INVOKE NAMING-CONTEXT "RESOLVE"
                        USING     NAME
                        RETURNING OBJ.
  *
     INVOKE ODDEMO-CALCULATOR "NARROW"
                        USING     OBJ
                        RETURNING TARGET-OBJ.

G.2.1.4 メソッドの呼び出し

  サーバプログラムのメソッドを呼び出します。メソッド名はIDLで指定したモジュール名、インタフェース名およびメソッド名を2つのコロン(“::”)でつなげた形式で指定します。この例では、ODdemo,Calculator,calculateがそれにあたります。なお、メソッド呼出し時にネーミングサービスで求めたサーバアプリケーションのオブジェクトリファレンスとサーバプログラムで例外が発生した場合に例外情報を設定してもらうためにRETURNING指定を行います。

   DATA DIVISION.
   WORKING-STORAGE        SECTION.
   01 RESULT              TYPE                   ODDEMO-CALCULATOR-RESULT.
   01 PARAM-A             TYPE                   CORBA-LONG.
   01 PARAM-B             TYPE                   CORBA-LONG.

  PROCEDURE DIVISION.
     MOVE 10 TO PARAM-A.
     MOVE 5  TO PARAM-B.
  *
     MOVE "ODdemo::Calculator::calculate(10,5)" TO API-NAME.
     INVOKE TARGET-OBJ "CALCULATE"
                        USING     PARAM-A
                                  PARAM-B
                        RETURNING RESULT.
  *
     PERFORM PRINT-RESULT.
  *
     MOVE 100 TO PARAM-A.
     MOVE 0   TO PARAM-B.
  *
     MOVE "ODdemo::Calculator::calculate(100,0)" TO API-NAME.
     INVOKE TARGET-OBJ "CALCULATE"
                        USING     PARAM-A
                                  PARAM-B
                        RETURNING RESULT.
  *
     PERFORM PRINT-RESULT.
  *
     STOP RUN.
  *
   END-MAIN.