サーバアプリケーションは、初期化処理部とインタフェースの実装部分から構成されます。初期化処理部では、以下に示す処理を行います。
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 サーバの非活性化”を参照)を行う必要があります。
注意
以下の条件のとき、CORBA-BOA-IMPL-IS-READY/CORBA-BOA-OBJ-IS-READYが復帰せずにサーバアプリケーションが終了します。
サーバアプリケーションをプロセスモードで作成している場合 かつ
サーバアプリケーションをCORBAワークユニット運用している場合 かつ
CORBAワークユニットを停止した場合
CORBA-BOA-IMPL-IS-READY/CORBA-BOA-OBJ-IS-READYの後に後処理を行う場合は、サーバアプリケーションをスレッドモードで作成するか、またはワークユニットの出口機能を利用してください。ワークユニットの出口機能に関しては、“OLTPサーバ運用ガイド”の“ワークユニットの出口機能”を参照してください。
* 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コマンドでサーバアプリケーションの終了を行う場合は、アプリケーション側で非活性化用のメソッドを発行する必要はありません。