作成したアプリケーションをインプリメンテーションリポジトリ、ネーミングサービスに登録します。
インプリメンテーションリポジトリにサーバアプリケーション情報を登録するため、OD_impl_instコマンドを使用します。OD_impl_instコマンドでの登録処理の例と指定する情報について以下に示します。
![]()
インプリメンテーションリポジトリへの登録
OD_impl_inst -ax def |
定義ファイルで指定した定義情報でサーバアプリケーション情報を登録することを示します。
![]()
defファイルの内容
rep_id = IDL:ODdemo/calculator:1.0 |
インプリメンテーションリポジトリIDを指定します。
サーバタイプを指定します。指定できるタイプには、persistent,shared,unsharedがあります。
サーバアプリケーションのパス名を指定します。
サーバアプリケーションのライブラリ名を指定します。
ライブラリは、サーバアプリケーションと同一ディレクトリ、または環境変数PATHに指定されているディレクトリに格納する必要があります。
サーバアプリケーションがCORBA-BOA-IMPL_IS_READY関数(または、CORBA-BOA-OBJ_IS_READY関数)発行時の動作モードを指定します。OOCOBOLサーバアプリケーションをスレッドモードで作成した場合はSYNC_ENDを指定します。
連携するIORのバージョンを指定します。指定できるバージョンには1.0、1.1があります。
サーバアプリケーションのコード系を指定します。
開発環境として“NetCOBOL”を使用してUNICODEのアプリケーションを開発する場合は、“UNICODE”を指定してください。
![]()
defファイルの内容
rep_id = IDL:ODdemo/calculator:1.0 |
インプリメンテーションリポジトリIDを指定します。
サーバタイプを指定します。指定できるタイプには、persistent,shared,unsharedがあります。
サーバアプリケーションのパス名を指定します。
サーバアプリケーションのライブラリ名を指定します。
ライブラリは、環境変数LD_LIBRARY_PATHに指定されたディレクトリに格納する必要があります。
サーバアプリケーション実行時のユーザIDを指定します。
サーバアプリケーション実行時のグループIDを指定します。
サーバアプリケーションがCORBA-BOA-IMPL_IS_READY関数(または、CORBA-BOA-OBJ_IS_READY関数)発行時の動作モードを指定します。OOCOBOLサーバアプリケーションをスレッドモードで作成した場合はSYNC_ENDを指定します。
連携するIORのバージョンを指定します。指定できるバージョンには1.0、1.1があります。
サーバアプリケーションのコード系を指定します。
開発環境として“NetCOBOL”を使用してUNICODEのアプリケーションを開発する場合は、“UNICODE”を指定してください。
作成したサーバアプリケーションを他のアプリケーションからオブジェクトとしてアクセスできるようにするために、そのオブジェクトを識別するためのオブジェクトリファレンスを作成します。同時に作成したオブジェクトリファレンスをネーミングサービスに登録します。
オブジェクトを作成する方法として以下の方法があります。
OD_or_admコマンドを用います。
サーバアプリケーションでBOAの機能を使用してオブジェクトリファレンスを作成し、ネーミングサービスに登録します。
OD_or_admコマンドは、オブジェクトリファレンス作成後、ネーミングサービスに登録します。OD_or_admコマンドでの登録例と指定する情報を以下に示します。
![]()
ネーミングサービスへの登録
OD_or_adm -c IDL:ODdemo/calculator:1.0 -L SJIS -n ODdemo::calculator |
指定されたインタフェースリポジトリIDでオブジェクトリファレンスを登録します
ネーミングサービスに登録するオブジェクトに対してコード系を指定します。
ネーミングサービスに登録するオブジェクト名を指定します。
![]()
ネーミングサービスへの登録
OD_or_adm -c IDL:ODdemo/calculator:1.0 -L EUC -n ODdemo::calculator |
指定されたインタフェースリポジトリIDでオブジェクトリファレンスを登録します
ネーミングサービスに登録するオブジェクトに対してコード系を指定します。
ネーミングサービスに登録するオブジェクト名を指定します。
■ サーバアプリケーションで作成する方法
以下の流れで処理を行います。

以下にプログラミングの例を示します。
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コマンドで行います。