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

第8章 アプリケーションの開発(OOCOBOL)> 8.6 サーバアプリケーションの登録

8.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) サーバアプリケーションで作成する方法

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

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

   IDENTIFICATION         DIVISION.
   PROGRAM-ID.            "SIMPLE_S".
  *
   ENVIRONMENT            DIVISION.
   CONFIGURATION          SECTION.
   REPOSITORY.
       COPY               CORBA--REP.
       COPY               COSNAMING--REP.
       .
   SPECIAL-NAMES.
       SYMBOLIC CONSTANT
       COPY               CORBA--CONST.
       COPY               SIMPLE--CONST.
       COPY               COSNAMING--CONST.
       .
  *
   DATA                   DIVISION.
   WORKING-STORAGE        SECTION.
   COPY                   CORBA--COPY.
   COPY                   COSNAMING--COPY.
  *
   01 ORB                 USAGE OBJECT REFERENCE CORBA-ORB.
   01 BOA                 USAGE OBJECT REFERENCE CORBA-BOA.
   01 IMPL-REP            USAGE OBJECT REFERENCE FJ-IMPLEMENTATIONREP.
   01 INTF-REP            USAGE OBJECT REFERENCE CORBA-REPOSITORY.
   01 IMPL                USAGE OBJECT REFERENCE CORBA-IMPLEMENTATIONDEF.
   01 INTF                USAGE OBJECT REFERENCE CORBA-INTERFACEDEF.
   01 OBJ                 USAGE OBJECT REFERENCE CORBA-OBJECT.
   01 REF-ID              USAGE OBJECT REFERENCE SEQUENCE-OCTET.
   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 NEW-OBJ             USAGE OBJECT REFERENCE CORBA-OBJECT.
  
  *
   01 EXCEPTION-ID        USAGE OBJECT REFERENCE CORBA-STRING.
   01 EXCEPTION-ID-VALUE  PIC   X(50).
   01 API-NAME            PIC   X(50).
  *
  *
   PROCEDURE              DIVISION.
  *
   DECLARATIVES.
  *
  *
   ALREADY-ERR SECTION.
       USE EXCEPTION CORBA-EXCEPTION.
       DISPLAY "CosNaming::NamingContext::AlreadyBound: " API-NAME.
   ALREADY-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_s"
                                    FJ-OM_ORBID
                          RETURNING ORB.
  *
       MOVE "CORBA::ORB::BOA_init" TO API-NAME.
       INVOKE ORB "BOA_INIT"
                          USING     "simple_s"
                                    CORBA-BOA_OAID
                          RETURNING BOA.
  *
       MOVE "CORBA::ORB::resolve_initial_references" TO API-NAME.
       INVOKE ORB "RESOLVE_INITIAL_REFERENCES"
                          USING     CORBA-OBJECTID_LIGHTINTERF-001
                          RETURNING OBJ.
  *
       INVOKE CORBA-REPOSITORY "NARROW"
                          USING     OBJ
                          RETURNING INTF-REP.
  *
       MOVE "CORBA::Repository::lookup_id" TO API-NAME.
       INVOKE INTF-REP "LOOKUP_ID" USING     "IDL:ODdemo/calculator:1.0"
                                   RETURNING OBJ.
  
       INVOKE CORBA-INTERFACEDEF "NARROW" USING     OBJ
                                          RETURNING INTF.
  *
       MOVE "CORBA::ORB::resolve_initial_references" TO API-NAME.
       INVOKE ORB "RESOLVE_INITIAL_REFERENCES"
                          USING     CORBA-OBJECTID_IMPLEMENTAT-001
                          RETURNING OBJ.
  *
       INVOKE FJ-IMPLEMENTATIONREP "NARROW"
                          USING     OBJ
                          RETURNING IMPL-REP.
  *
       MOVE "FJ::ImplementationRep::lookup_id" TO API-NAME.
       INVOKE IMPL-REP "LOOKUP_ID"
                          USING     "IDL:ODdemo/calculator:1.0"
                          RETURNING OBJ.
  *
       INVOKE CORBA-IMPLEMENTATIONDEF "NARROW"
                          USING     OBJ
                          RETURNING IMPL.
  
       INVOKE SEQUENCE-OCTET "NEW" RETURNING REF-ID.
       MOVE "CORBA::BOA::create" TO API-NAME.
       INVOKE BOA "IDL-CREATE"
                          USING     REF-ID
                                    INTF
                                    IMPL
                          RETURNING NEW-OBJ. 
  *
       MOVE "CORBA::ORB::resolve_initial_references" TO API-NAME.
       INVOKE ORB "RESOLVE_INITIAL_REFERENCES"
                          USING     CORBA-ORB-OBJECTID_NAMESERVICE
                          RETURNING OBJ.
  *
       INVOKE COSNAMING-NAMINGCONTEXT "NARROW"
                          USING     OBJ
                          RETURNING NAMING-CONTEXT.
  *                                                                     
       INVOKE SEQUENCE-NAMECOMPONENT-001 "NEW-WITH-LENGTH"
                          USING     1
                          RETURNING NAME.
  *
       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 NAME "SET-VALUE" USING 1 NAME-COMPONENT.
  *
       MOVE "CosNaming::NamingContext::unbind" TO API-NAME.
       INVOKE NAMING-CONTEXT "UNBIND"
                          USING     NAME.
  *
       MOVE "CosNaming::NamingContext::bind" TO API-NAME.
       INVOKE NAMING-CONTEXT "BIND"
                          USING     NAME
                                    NEW-OBJ.
  *
       MOVE "CORBA::BOA::impl_is_ready" TO API-NAME.
       INVOKE BOA "IMPL_IS_READY"
                          USING     IMPL.
  *
       STOP RUN.
  *
   END-MAIN.
  *
   END PROGRAM "SIMPLE_S".

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


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

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