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

G.3.6 サーバアプリケーションの登録


作成したアプリケーションをインプリメンテーションリポジトリ、ネーミングサービスに登録します。


G.3.6.1 インプリメンテーションリポジトリへの登録

インプリメンテーションリポジトリにサーバアプリケーション情報を登録するため、OD_impl_instコマンドを使用します。OD_impl_instコマンドでの登録処理の例と指定する情報について以下に示します。

インプリメンテーションリポジトリへの登録
OD_impl_inst -ax def

-ax def

定義ファイルで指定した定義情報でサーバアプリケーション情報を登録することを示します。


defファイルの内容
rep_id                    = IDL:ODdemo/calculator:1.0
type                      = shared
binary                    = D:\server\simple_s.exe
IDL:ODdemo/calculator:1.0 = ODDEMO-CALCULATOR.dll
mode                      = SYNC_END
ior                       = 1.1
locale                    = SJIS

rep_id = IDL:ODdemo/calculator:1.0

インプリメンテーションリポジトリIDを指定します。

type = shared

サーバタイプを指定します。指定できるタイプには、persistent、shared、unsharedがあります。

binary = D:\server\simple_s.exe

サーバアプリケーションのパス名を指定します。

IDL:ODdemo/calculator:1.0 = ODDEMO-CALCULATOR.dll

サーバアプリケーションのライブラリ名を指定します。
ライブラリは、サーバアプリケーションと同一ディレクトリ、または環境変数PATHに指定されているディレクトリに格納する必要があります。

mode = SYNC_END

サーバアプリケーションがCORBA-BOA-IMPL_IS_READY関数(または、CORBA-BOA-OBJ_IS_READY関数)発行時の動作モードを指定します。OOCOBOLサーバアプリケーションをスレッドモードで作成した場合は、SYNC_ENDを指定します。

ior = 1.1

連携するIORのバージョンを指定します。指定できるバージョンには、1.0、1.1があります。

locale = SJIS

サーバアプリケーションのコード系を指定します。
開発環境として“NetCOBOL”を使用してUNICODEのアプリケーションを開発する場合は、“UNICODE”を指定してください。


defファイルの内容
rep_id = IDL:ODdemo/calculator:1.0
type = shared
binary = /home/guest/simple_s
IDL:ODdemo/calculator:1.0 = libODDEMO-CALCULATOR.so
uid = user
gid = group
mode = SYNC_END
ior = 1.1
locale = EUC

rep_id = IDL:ODdemo/calculator:1.0

インプリメンテーションリポジトリIDを指定します。

type = shared

サーバタイプを指定します。指定できるタイプには、persistent、shared、unsharedがあります。

binary = /home/guest/simple_s

サーバアプリケーションのパス名を指定します。

IDL:ODdemo/calculator:1.0 = libODDEMO-CALCULATOR.so

サーバアプリケーションのライブラリ名を指定します。
ライブラリは、環境変数LD_LIBRARY_PATHに指定されたディレクトリに格納する必要があります。

uid = user

サーバアプリケーション実行時のユーザIDを指定します。

gid = group

サーバアプリケーション実行時のグループIDを指定します。

mode = SYNC_END

サーバアプリケーションがCORBA-BOA-IMPL_IS_READY関数(または、CORBA-BOA-OBJ_IS_READY関数)発行時の動作モードを指定します。OOCOBOLサーバアプリケーションをスレッドモードで作成した場合は、SYNC_ENDを指定します。

ior = 1.1

連携するIORのバージョンを指定します。指定できるバージョンには、1.0、1.1があります。

locale = EUC

サーバアプリケーションのコード系を指定します。
開発環境として“NetCOBOL”を使用してUNICODEのアプリケーションを開発する場合は、“UNICODE”を指定してください。


G.3.6.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

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


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

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



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

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