ページの先頭行へ戻る
NetCOBOL V12.1 NetCOBOL Studio ユーザーズガイド
FUJITSU Software

11.2.2 CORBAサーバアプリケーションの作成

ここでは、実際にCORBAサーバアプリケーションを作成しながら説明します。

作成するアプリケーションの内容

以下の2項演算プログラムを作成します。

作成手順

1. Interstage基盤サービスの起動

2. CORBAサーバプロジェクトの作成

3. プログラムの編集

4. プロジェクトのビルド

5. プログラムの実行

1. Interstage基盤サービスの起動

CORBAサーバアプリケーションのプロジェクトを作成する前に、Interstage基盤サービス操作ツールによってJ2EE実行環境のためのサービスを起動しておく必要があります。デフォルトの状態では必要なサービスは起動されていないため、“Interstage基盤サービスの起動”に示す手順でサービスを起動してください。

2. CORBAサーバプロジェクトの作成

  1. Interstage Studioワークベンチを起動します。

  2. COBOLパースペクティブが表示されていない場合は、以下の手順でCOBOLパースペクティブを表示します。

    1. メニューバーから[ウィンドウ(W)] > [パースペクティブ] > [パースペクティブを開く(O)] > [その他(O)]を選択すると[パースペクティブを開く]ダイアログボックスが表示されます。

    2. [COBOL]を選択して[OK]ボタンをクリックします。

  3. メニューバーから[ファイル] > [新規] > [CORBAサーバプロジェクト]を選択します。

    → CORBAサーバプロジェクト生成ウィザードが起動され、[CORBAサーバプロジェクト]ページが表示されます。

  4. プロジェクト名と保存フォルダを入力し、[次へ]ボタンをクリックします。この例では以下とします。

    設定項目

    設定内容

    プロジェクト名

    CALCSV

    プロジェクトコンテンツ

    [ワークスペース内に新規プロジェクトを作成]を選択

    → ターゲットを定義するページが表示されます。

  5. ターゲットを定義するページでは何も変更せずに、[次へ]ボタンをクリックします。

    → [ビルド環境]ページが表示されます。

  6. ビルド環境を設定する画面では何も変更せずに、[次へ]ボタンをクリックします。

    → [選択]ページが表示されます。

  7. [コード生成を行う]をチェックし、[使用可能なコード生成ウィザード]から[CORBAサーバアプリケーション]を選択して、[完了]ボタンをクリックします。

    → CORBAサーバプロジェクトとして、CALCSVプロジェクトが生成され、続いて[CORBAサーバアプリケーション生成ウィザード]が起動されます。

  8. 以下を入力し、[次へ]ボタンをクリックします。

    設定項目

    設定内容

    モジュール名

    SAMPLE(任意)

    クラス名

    CALCSV(プロジェクト名固定)

    例外の生成(*1)

    チェックする

    デフォルト処理の生成(*2)

    チェックする

    コメントの生成(*3)

    チェックする

    *1: 乗算、除算の例外情報のために[例外の生成]をチェックします。チェックした場合は、以下の例外宣言がIDL中に生成されます。

    exception CDException{
        string CDExceptionMsg;
        long CDExceptionCode;
    };

    *2: [デフォルト処理の生成]をチェックすると、サーバアプリケーションとして実装すべきメソッド定義と、そのメソッドの処理を生成します。チェックしない場合は、メソッドの宣言のみが生成されます。

    *3: [コメントの生成]をチェックした場合は、生成ひな型ソース中にコメントを生成します。

    → [定数宣言]ページが表示されます。

  9. この例では、例外発生時に返却するエラーメッセージを2個定義します。以下のように設定し、[次へ]ボタンをクリックします。

    • 定数1

      設定項目

      設定内容

      英数文字列

      定数名

      MSG1

      初期値

      "item1 is zero"

    • 定数2

      設定項目

      設定内容

      英数文字列

      定数名

      MSG2

      初期値

      "item2 is zero"

    → [型宣言]ページが表示されます。

  10. ここでは繰り返し項目などを定義しますが、この例で定義する型宣言はありません。[次へ]ボタンをクリックします。

    → [構造体宣言]ページが表示されます。

  11. この例では、入力する項目が2個、演算結果を返却する領域が1個必要であるため、それらの領域を1つの構造体として宣言します。[追加]ボタンをクリックします。

    → [構造体の定義]ダイアログボックスが表示されます。

  12. ここでは、構造体「S1」を以下の要素を持つ構造体として宣言し、[OK]ボタンをクリックします。

    変数名

    使用目的

    item1

    4バイト整数

    2項演算のうちの1項目(クライアントから値設定)

    item2

    4バイト整数

    2項演算のうちの1項目(クライアントから値設定)

    result

    4バイト整数

    2項演算結果 (サーバが値設定)

  13. [構造体宣言]ページの[構造体の定義]に「S1」が追加されていることを確認し、[次へ]ボタンをクリックします。

    → [メソッド宣言]ページが表示されます。

  14. ビジネスメソッドを宣言します。ここでは、“作成するアプリケーションの内容”に従い、メソッド「addop」、「subop」、「mltop」、「divop」を宣言します。[追加]ボタンをクリックします。

    → [利用者メソッドの定義]ダイアログボックスが表示されます。

  15. 各メソッドの定義情報を設定します。

    • addopメソッド

      設定項目

      設定内容

      メソッド名

      addop

      戻り値の型

      なし(void)

      例外を発生させる

      チェックしない

      パラメタリスト

      変数名 : param1
      型 : S1 (※1)
      パラメタタイプ : inout (※2)

    • subopメソッド

      設定項目

      設定内容

      メソッド名

      subop

      戻り値の型

      なし(void)

      例外を発生させる

      チェックしない

      パラメタリスト

      変数名 : param1
      型 : S1
      パラメタタイプ : inout

    • mltopメソッド

      設定項目

      設定内容

      メソッド名

      mltop

      戻り値の型

      なし(void)

      例外を発生させる

      チェックする (※3)

      パラメタリスト

      変数名 : param1
      型 : S1
      パラメタタイプ : inout

    • divopメソッド

      設定項目

      設定内容

      メソッド名

      divop

      戻り値の型

      なし(void)

      例外を発生させる

      チェックする (※3)

      パラメタリスト

      変数名 : param1
      型 : S1
      パラメタタイプ : inout

    (※1) 「S1」は、構造体定義で宣言した構造体名です。
    (※2) 構造体「S1」は、クライアント、サーバの両アプリケーションで値を設定するため、inoutにします。
    (※3) 乗算および除算の場合は、例外を通知します。

    → すべてのメソッドの定義が完了すると、以下のように表示されます。

  16. [完了]ボタンをクリックします。[依存]ビューの[ソースファイル]フォルダにひな型ソースが生成されます。この例では、以下のファイルが生成されます。

    ファイル名

    説明

    CALCSV.cob

    メインプログラム(サーバアプリケーションのフレームワーク)

    SAMPLE-CALCSV-IMPL.cob

    ビジネスメソッドプログラム

    SAMPLE-CALCSV--INIT.cob

    サーバアプリケーション登録プログラム

    USCALCSV.idl

    インタフェースファイル(IDLファイル)

    上記以外の"SAMPLE"で始まるCOBOLソースファイル

    IDLコンパイラが生成したスケルトン用ファイル

3. プログラムの編集

生成されたIDLファイルおよびCOBOLソースプログラムを編集します。

IDLファイル (USCALCSV.idl)
// モジュール宣言
module SAMPLE { 

  // 定数宣言
  const string MSG1 = "item1 is zero" ;
  const string MSG2 = "item2 is zero" ;

  // 型宣言
  
  // 構造体宣言
  struct S1 {
    long item1;
    long item2;
    long result;
  };

  // 例外宣言
  exception CDException{
    string CDExceptionMsg;
    long CDExceptionCode;
  };
  // ユーザインタフェース宣言
  interface CALCSV { 
    void addop(inout S1 param1);
    void subop(inout S1 param1);
    void mltop(inout S1 param1)
      raises (CDException);
    void divop(inout S1 param1)
      raises (CDException);
  };

};

今回は、特に修正の必要がありませんが、ここで、IDLファイルの内容を編集することも可能です。
※インタフェースの内容を変更した場合は、必ずビジネスメソッドのプログラムソースと等価になるように両方を修正する必要があります。

メインプログラム (CALCSV.cob)

ひな型は、選択されたアプリケーション形態に対して標準的なものを生成しているため、カスタマイズが必要な場合は修正してください。今回は、特に修正の必要がありません。

 IDENTIFICATION DIVISION.
 PROGRAM-ID. CALCSV.
 ENVIRONMENT DIVISION.
 CONFIGURATION SECTION.
 REPOSITORY.
      COPY CORBA--REP.
      COPY USCALCSV--REP.
 .
 SPECIAL-NAMES.
      SYMBOLIC CONSTANT
      COPY CORBA--CONST.
  .
 DATA DIVISION.
 WORKING-STORAGE SECTION.
 COPY CORBA--COPY.
 COPY USCALCSV--COPY.
 01  API-NAME        PIC   X(50).
 01  APL-NAME        PIC   X(64)   VALUE     "CALCSV".
 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  REP-ID          PIC   X(128) VALUE     "IDL:SAMPLE/CALCSV:1.0".(※1)
 01  OBJ             USAGE OBJECT REFERENCE CORBA-OBJECT.
 01  EXCEPT-ID       USAGE OBJECT REFERENCE CORBA-STRING.
 01  EXCEPT-ID-VALUE PIC   X(50).
 LINKAGE SECTION.
 PROCEDURE DIVISION.
*
*  ORBの初期化
* 
      INVOKE CORBA "ORB_INIT" USING APL-NAME FJ-OM_ORBID RETURNING ORB.
* 
*  BOAの初期化
* 
      INVOKE ORB "BOA_INIT" USING APL-NAME CORBA-BOA_OAID RETURNING BOA.
* 
*  インプリメンテーションリポジトリオブジェクトの取得
* 
      INVOKE ORB "RESOLVE_INITIAL_REFERENCES" USING CORBA-OBJECTID_IMPLEMENTAT-001 RETURNING OBJ.
      INVOKE FJ-IMPLEMENTATIONREP "NARROW" USING OBJ RETURNING IMPL-REP.
* 
*  インプリメンテーション情報の取得
* 
      INVOKE IMPL-REP "LOOKUP_ID" USING REP-ID RETURNING OBJ.
      INVOKE CORBA-IMPLEMENTATIONDEF "NARROW" USING OBJ RETURNING IMPL.
* 
      SET OBJ TO NULL.
* 
*  サーバの活性化をODに通知する
* 
      MOVE "CORBA::BOA::IMPL_IS_READY" TO API-NAME.
      INVOKE BOA "IMPL_IS_READY" USING IMPL.
*
      STOP RUN.
 END PROGRAM CALCSV.

(※1) リポジトリID
CORBAサーバアプリケーションを一意に決定するためのIDです。デフォルトは、「IDL:モジュール名/インタフェース名:1.0」です。詳細は、Interstage Application Serverのマニュアルを参照してください。

サーバアプリケーション登録プログラム (SAMPLE-CALCSV--INIT.cob)

このプログラムは、サーバアプリケーションがCORBAサーバとして使用できるように登録する処理です。特に修正の必要はありません。

 IDENTIFICATION DIVISION.
 PROGRAM-ID. SAMPLE-CALCSV--INIT.
 ENVIRONMENT DIVISION.
 CONFIGURATION SECTION.
 REPOSITORY.
      CLASS SAMPLE-CALCSV
      CLASS SAMPLE-CALCSV-IMPL
 .
 DATA DIVISION.
 WORKING-STORAGE SECTION.
 LINKAGE SECTION.
 01 RET USAGE OBJECT REFERENCE SAMPLE-CALCSV.
 PROCEDURE DIVISION
         RETURNING RET
                   .
      INVOKE SAMPLE-CALCSV-impl "new" RETURNING RET.
      EXIT PROGRAM.
 END PROGRAM SAMPLE-CALCSV--INIT.
ビジネスメソッドプログラム(SAMPLE-CALCSV-IMPL.cob)

ウィザードで入力したメソッド「addop」、「subop」、「mltop」、「divop」が宣言されているので、処理を実装します。青色(下線付き)の部分のコードを追加します。

 CLASS-ID. SAMPLE-CALCSV-IMPL AS "SAMPLE-CALCSV-IMPL" INHERITS 
     SAMPLE-CALCSV
  .
 ENVIRONMENT DIVISION.
 CONFIGURATION SECTION.
 REPOSITORY.
      COPY CORBA--REP.
      COPY USCALCSV--REP.
  .
 SPECIAL-NAMES.
      SYMBOLIC CONSTANT
      COPY CORBA--CONST.
      COPY USCALCSV--CONST.
  .
 OBJECT.
 DATA DIVISION.
 WORKING-STORAGE SECTION.
 COPY CORBA--COPY.
 COPY USCALCSV--COPY.
 PROCEDURE DIVISION
                   .
 METHOD-ID. ADDOP AS "ADDOP" OVERRIDE.
* <IDL-INFO-START>
* void addop(inout S1 param1)
* <IDL-INFO-END>
 DATA DIVISION.
 WORKING-STORAGE SECTION.
 LINKAGE SECTION.
 01 PARAM1  TYPE SAMPLE-S1.
 PROCEDURE DIVISION
         USING 
                   PARAM1
                   .
      COMPUTE result OF param1 = item1 OF param1 + item2 OF param1.
 END METHOD ADDOP.
 METHOD-ID. SUBOP AS "SUBOP" OVERRIDE.
* <IDL-INFO-START>
* void subop(inout S1 param1)
* <IDL-INFO-END>
 DATA DIVISION.
 WORKING-STORAGE SECTION.
 LINKAGE SECTION.
 01 PARAM1  TYPE SAMPLE-S1.
 PROCEDURE DIVISION
         USING 
                   PARAM1
                  .
      COMPUTE result OF param1 = item1 OF param1 - item2 OF param1.
 END METHOD SUBOP.
 METHOD-ID. MLTOP AS "MLTOP" OVERRIDE.
* <IDL-INFO-START>
* void mltop(inout S1 param1)
* <IDL-INFO-END>
 DATA DIVISION.
 WORKING-STORAGE SECTION.
 01 W-EXCEPTION OBJECT REFERENCE SAMPLE-CDException.
 01 W-STRING OBJECT REFERENCE CORBA-STRING.
 LINKAGE SECTION.
 01 PARAM1  TYPE SAMPLE-S1.
 PROCEDURE DIVISION
         USING 
                   PARAM1
         RAISING 
                   SAMPLE-CDEXCEPTION
                   .
* 例外処理
       IF item1 OF param1 = 0
       THEN
          INVOKE SAMPLE-CDException "NEW" RETURNING W-EXCEPTION
          MOVE -1 TO CDEXCEPTIONCODE OF W-EXCEPTION
          INVOKE CORBA-STRING "NEW" RETURNING W-STRING
          INVOKE W-STRING "SET-VALUE" USING SAMPLE-MSG1
          SET CDEXCEPTIONMSG OF W-EXCEPTION TO W-STRING
          EXIT METHOD RAISING W-EXCEPTION
       END-IF
       IF item2 OF param1 = 0
       THEN
          INVOKE SAMPLE-CDException "NEW" RETURNING W-EXCEPTION
          MOVE -1 TO CDEXCEPTIONCODE OF W-EXCEPTION
          INVOKE CORBA-STRING "NEW" RETURNING W-STRING
          INVOKE W-STRING "SET-VALUE" USING SAMPLE-MSG2
          SET CDEXCEPTIONMSG OF W-EXCEPTION TO W-STRING
          EXIT METHOD RAISING W-EXCEPTION
       END-IF
       COMPUTE result OF param1 = item1 OF param1 * item2 OF param1.
 END METHOD MLTOP.
 METHOD-ID. DIVOP AS "DIVOP" OVERRIDE.
* <IDL-INFO-START>
* void divop(inout S1 param1)
* <IDL-INFO-END>
 DATA DIVISION.
 WORKING-STORAGE SECTION.
 01 W-EXCEPTION OBJECT REFERENCE SAMPLE-CDException.
 01 W-STRING OBJECT REFERENCE CORBA-STRING.
 LINKAGE SECTION.
 01 PARAM1  TYPE SAMPLE-S1.
 PROCEDURE DIVISION
         USING 
                   PARAM1
         RAISING 
                   SAMPLE-CDEXCEPTION
                   .
* 例外処理
       IF item1 OF param1 = 0
       THEN
          INVOKE SAMPLE-CDException "NEW" RETURNING W-EXCEPTION
          MOVE -1 TO CDEXCEPTIONCODE OF W-EXCEPTION
          INVOKE CORBA-STRING "NEW" RETURNING W-STRING
          INVOKE W-STRING "SET-VALUE" USING SAMPLE-MSG1
          SET CDEXCEPTIONMSG OF W-EXCEPTION TO W-STRING
          EXIT METHOD RAISING W-EXCEPTION
       END-IF
       IF item2 OF param1 = 0
       THEN
          INVOKE SAMPLE-CDException "NEW" RETURNING W-EXCEPTION
          MOVE -1 TO CDEXCEPTIONCODE OF W-EXCEPTION
          INVOKE CORBA-STRING "NEW" RETURNING W-STRING
          INVOKE W-STRING "SET-VALUE" USING SAMPLE-MSG2
          SET CDEXCEPTIONMSG OF W-EXCEPTION TO W-STRING
          EXIT METHOD RAISING W-EXCEPTION
       END-IF
       COMPUTE result OF param1 = item1 OF param1 / item2 OF param1.

 END METHOD DIVOP.
 END OBJECT.
 END CLASS SAMPLE-CALCSV-IMPL.

ポイント

  • 構造体「S1」は、TYPE宣言されます。

  • 構造体「S1」の要素は集団項目として定義されているため、集団項目のように使用できます。

  • 例外を通知する場合は、例外クラスのインスタンスを生成(new)し、メンバーに値を設定します。

4. プロジェクトのビルド

自動ビが設定されている場合、COBOLソースプログラムを保存した直後にビルドが実行されます。自動ビルドが設定されていない場合は、[依存]ビューまたは[構造]ビューで、CORBAサーバプロジェクトを選択し、メニューバーから[プロジェクト] > [プロジェクトのビルド]を選択して、ビルドを実行します。

5. プログラムの実行

CORBAサーバアプリケーションはワークユニット上で実行します。以下に、CORBAサーバアプリケーションの動作確認の手順の概要を示します。

ポイント

MyCORBADebugについて

本チュートリアルでは、MyCORBADebugという名前のワークユニットを使用します。MyCORBADebugワークユニットを作成する方法は、“11.5.1.4.3 CORBAワークユニットの作成”を参照してください。

  1. 実行資産のコピー

    ビルドで生成された実行ファイルとダイナミックリンクライブラリを実行環境にコピーします。
    ここでは、以下のようにコピーします。

      ファイル:CALCSV.exe、USCALCSV.dll
      コピー先フォルダ:C:\Interstage\APS\var\CORBA_WU\MyCORBADebug

    任意のフォルダにコピー可能ですが、このチュートリアルでは、MyCORBADebugのデフォルトのアプリケーション格納フォルダにコピーします。

  2. アプリケーション動作カレントディレクトリの作成

    ワークユニットの起動で必要となるアプリケーション動作カレントディレクトリを作成します。
    このチュートリアルでは、ワークユニット作成時にデフォルト値を使用しているため、以下のディレクトリを用意します。

      C:\Interstage\APS\var\CORBA_WU\MyCORBADebug\work
  3. CORBAサーバアプリケーションの配備

    1. スタートメニューから[Interstage Studio] > [Interstage管理コンソール]を選択します。

      → [Interstage管理コンソール]が起動されます。

    2. Windowsにログインしているユーザ名とパスワードを入力し、[ログイン]ボタンをクリックします。

    3. Interstage管理コンソールの左側のツリーから、[Interstage管理コンソール] > [Interstage Application Server] > [システム] > [ワークユニット] > [MyCORBADebug]を選択します。

    4. 画面右側で[配備]タブを選択します。

      → [配備]ページが表示されます。

    5. [配備]ページを入力します。

      • インプリメンテーションリポジトリIDは、以下の形式で指定します。

        IDL:モジュール名/インタフェース名:1.0

        このチュートリアルの場合は、「IDL:SAMPLE/CALCSV:1.0」を入力します。

      • 実行ファイル名は、最初にコピーしたEXEファイルを指定します。

        このチュートリアルの場合は、「CALCSV.exe」を入力します。

      • 詳細設定の[表示]を選択し、CORBAアプリケーションの[表示]を選択します。表示された詳細設定画面の[動作モード]で、[SYNC_END]を選択します。

      • インタフェース定義の[表示]を選択します。[追加]ボタンをクリックし、インタフェースリポジトリID、ネーミングサービス登録名、およびライブラリパス名を指定します。

        項目

        入力名

        インタフェースリポジトリID

        IDL:SAMPLE/CALCSV:1.0

        ネーミングサービス登録名

        SAMPLE::CALCSV

        ライブラリパス名

        USCALCSV.dll

    6. [一覧へ反映]ボタンをクリックした後、[配備]ボタンをクリックして、配備を行います。

  4. ワークユニットの起動

    配備時に起動指定で、[配備完了後、ワークユニットを起動する]をチェックしていない場合は、以下のようにして作成したワークユニットを起動します。

    1. Interstage管理コンソールの左側のツリーから[Interstage管理コンソール] > [Interstage Application Server] > [システム] > [ワークユニット] > [MyCORBADebug]を選択します。

    2. 画面右側の[操作]タブを選択し、[起動]ボタンをクリックします。

    アプリケーション動作カレントディレクトリが存在しない場合、起動時にエラーが発生します。アプリケーション動作カレントディレクトリは、ワークユニットの[環境設定]タブで確認できます。

  5. クライアントアプリケーションの実行

    クライアントアプリケーションを実行し、CORBAサーバアプリケーションにアクセスします。
    クライアントアプリケーションの作成、実行方法の詳細については、“11.2.3 CORBAクライアントアプリケーションの作成”を参照してください。