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

G.3.4 サーバアプリケーションのプログラミング(静的スケルトンインタフェース)

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



G.3.4.1 初期化

  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.

  なお、必要であればサーバアプリケーションの初期化も行います。


G.3.4.2 サーバの活性化

  サーバアプリケーションの初期化が完了すると、ORBに対してその旨を通知します。ORBは、この命令が発行された時点で、クライアントからの要求をサーバアプリケーションに伝えます。活性化の方法は、サーバのタイプによって以下のように異なります。

サーバのタイプ

メソッド

shared server

CORBA-BOA-IMPL_IS_READY

unshared server

CORBA-BOA-OBJ_IS_READY

persistent server

CORBA-BOA-IMPL_IS_READY

  1. インプリメンテーションリポジトリのオブジェクトリファレンスを取り出します。
    CORBA-ORB-RESOLVE_INITIAL_REFERENCESメソッドを用いて、パラメタにCORBA-ORB-OBJECTID_IMPLREPを指定します。

  2. IMPLEMENTATIONREPオブジェクトのオブジェクトリファレンスを求めます。
    FJ-IMPLEMENTATIONREP-LOOKUP_IDを用いて、パラメタにサーバアプリケーションのIMPLEMENTATIONREPオブジェクトを指定します。

  3. サーバの活性化を行います。
    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.

G.3.4.3 インタフェース実装クラス

  初期化処理の後、サーバアプリケーションで実装するインタフェースの処理を記述します。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".

G.3.4.4 サーバの非活性化

  サーバアプリケーションは、利用者からの停止要求を受けた場合、クライアントからの要求を以降受け付けない旨を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コマンドでサーバアプリケーションの終了を行う場合は、アプリケーション側で非活性化用のメソッドを発行する必要はありません。