サーバアプリケーションは、初期化処理部とインタフェースの実装部分から構成されます。初期化処理部では、以下に示す処理を行います。

CORBAの初期化メソッドCORBA-ORB_INITを呼び出し初期化処理を行います。当関数の結果として、ORBのオブジェクトリファレンスが通知されます。このオブジェクトリファレンスは、以降で呼び出すORBインタフェースを使用する場合に指定します。
IDENTIFICATION DIVISION.
PROGRAM-ID. "SIMPLE_S".
*
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
COPY CORBA--REP.
.
SPECIAL-NAMES.
SYMBOLIC CONSTANT
COPY CORBA--CONST.
COPY SIMPLE--CONST.
.
*
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY CORBA--COPY.
*
01 ORB USAGE OBJECT REFERENCE CORBA-ORB.
01 BOA USAGE OBJECT REFERENCE CORBA-BOA.
01 IMPL-REP USAGE OBJECT REFERENCE FJ-IMPLEMENTATIONREP.
01 IMPL USAGE OBJECT REFERENCE CORBA-IMPLEMENTATIONDEF.
01 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.
*
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.なお、必要であればサーバアプリケーションの初期化も行います。
サーバアプリケーションの初期化が完了すると、ORBに対してその旨を通知します。ORBは、この命令が発行された時点で、クライアントからの要求をサーバアプリケーションに伝えます。活性化の方法は、サーバのタイプによって以下のように異なります。
サーバのタイプ | メソッド |
|---|---|
shared server | CORBA-BOA-IMPL_IS_READY |
unshared server | CORBA-BOA-OBJ_IS_READY |
persistent server | CORBA-BOA-IMPL_IS_READY |
インプリメンテーションリポジトリのオブジェクトリファレンスを取り出します。
CORBA-ORB-RESOLVE_INITIAL_REFERENCESメソッドを用いて、パラメタにCORBA-ORB-OBJECTID_IMPLREPを指定します。
IMPLEMENTATIONREPオブジェクトのオブジェクトリファレンスを求めます。
FJ-IMPLEMENTATIONREP-LOOKUP_IDを用いて、パラメタにサーバアプリケーションのIMPLEMENTATIONREPオブジェクトを指定します。
サーバの活性化を行います。
CORBA-BOA-IMPL_IS_READYまたはCORBA-BOA-OBJ_IS_READYを用います。
注) メソッドの復帰後は、初期化時にオープンしたファイルのクローズ処理や、領域の解放処理等の非活性化処理(“G.3.4.4 サーバの非活性化”を参照)が必要です。
*
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 IMPL-ODDEMO-CALCULATOR
RETURNING OBJ.
*
INVOKE CORBA-IMPLEMENTATIONDEF "NARROW"
USING OBJ
RETURNING IMPL.
*
MOVE "CORBA::BOA::impl_is_ready" TO API-NAME.
INVOKE BOA "IMPL_IS_READY"
USING IMPL.初期化処理の後、サーバアプリケーションで実装するインタフェースの処理を記述します。OOCOBOLでは、インタフェースの処理を行うインタフェース実装クラスと、インタフェース実装クラスの生成プログラムを用意する必要があります。
CLASS-ID. ODDEMO-CALCULATOR-IMPL
INHERITS ODDEMO-CALCULATOR.
*
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
COPY CORBA--REP.
COPY SIMPLE--REP.
.
SPECIAL-NAMES.
SYMBOLIC CONSTANT
COPY CORBA--CONST.
COPY SIMPLE--CONST.
.
*
OBJECT.
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY CORBA--COPY.
COPY SIMPLE--COPY.
*
PROCEDURE DIVISION.
*
METHOD-ID. CALCULATE OVERRIDE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 EXC USAGE OBJECT REFERENCE ODDEMO-CALCULATOR-ZEROPARAM.
LINKAGE SECTION.
01 A TYPE CORBA-LONG.
01 B TYPE CORBA-LONG.
01 RESULT TYPE ODDEMO-CALCULATOR-RESULT.
*
PROCEDURE DIVISION
USING A
B
RETURNING RESULT
RAISING CORBA-SYSTEMEXCEPTION
ODDEMO-CALCULATOR-ZEROPARAM.
*
IF B = 0
INVOKE ODDEMO-CALCULATOR-ZEROPARAM "NEW" RETURNING EXC
EXIT METHOD RAISING EXC
END-IF.
*
COMPUTE ADD_RESULT OF RESULT = A + B.
COMPUTE SUBTRACT_RESULT OF RESULT = A - B.
COMPUTE MULTIPLE_RESULT OF RESULT = A * B.
COMPUTE DIVIDE_RESULT OF RESULT = A / B.
*
END METHOD CALCULATE.
*
END OBJECT.
*
END CLASS ODDEMO-CALCULATOR-IMPL.インタフェース実装クラスは、ORBが生成します。ORBからインタフェース実装クラス生成プログラムが呼ばれて、インタフェース実装クラスが生成されます。インタフェース実装クラス生成プログラム名は、モジュール名、インタフェース名をハイフン(“-”)でつなげた名前に“—INIT”を付加した名前にします。RETURNING句には、インタフェースクラスを指定します。このプログラムではインタフェース実装クラスを生成して返します。
IDENTIFICATION DIVISION.
PROGRAM-ID. ODDEMO-CALCULATOR--INIT.
*
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
CLASS ODDEMO-CALCULATOR
CLASS ODDEMO-CALCULATOR-IMPL
.
*
DATA DIVISION.
LINKAGE SECTION.
01 RESULT USAGE OBJECT REFERENCE ODDEMO-CALCULATOR.
*
PROCEDURE DIVISION
RETURNING RESULT.
*
INVOKE ODDEMO-CALCULATOR-IMPL "NEW"
RETURNING RESULT.
*
END PROGRAM "ODDEMO-CALCULATOR--INIT".サーバアプリケーションは、利用者からの停止要求を受けた場合、クライアントからの要求を以降受け付けない旨をORBに対して返します。サーバアプリケーションの利用者からの停止要求の方法およびアプリケーションでの停止要求の受信方法等は各ORBベンダーにより異なります。この命令が発行された時点で、ORBは、クライアントから要求されてもサーバアプリケーションに伝えず、クライアントへは例外が返ります。非活性化の方法は、サーバのタイプによって以下のように異なります。
サーバのタイプ | メソッド |
|---|---|
shared server | CORBA-BOA-DEACTIVATE_IMPL |
unshared server | CORBA-BOA-DEACTIVATE_OBJ |
persistent server | CORBA-BOA-DEACTIVATE_IMPL |
CORBA-BOA-DEACTIVATE_IMPLでは、サーバアプリケーションのIMPLEMENTATIONREPオブジェクトをパラメタとして指定します。CORBA-BOA-DEACTIVATE_OBJでは、オブジェクトリファレンスをパラメタとして指定します。
*
MOVE "CORBA::BOA::diactivate_impl" TO API-NAME.
INVOKE BOA "DEACTIVATE_IMPL"
USING IMPL. なお、ワークユニット運用している場合は、isstopwuコマンドやInterstage管理コンソールから停止操作が実行されることにより、クライアントからの要求を以降受け付けない旨をORBに対して通知します。そのため、アプリケーション側で非活性化用のメソッドを発行する必要はありません。
ワークユニット運用でないCORBAアプリケーションの場合も、odcntlqueコマンドでサーバアプリケーションの終了を行う場合は、アプリケーション側で非活性化用のメソッドを発行する必要はありません。