ページの先頭行へ戻る
Interstage Business Application ServerV10.1.0 COBOLアプリケーション開発リファレンス
Interstage

第13章 CORBAサーバアプリケーション開発

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

1. 作成するプログラムの内容

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

3. プロジェクトの作成

4. CORBAサーバアプリケーション生成ウィザードによるひな型作成

5. プログラムの編集

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

7. プログラムの実行

8. デバッグ

1. 作成するプログラムの内容

ここでは、2項演算プログラムを作成します。

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

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

  1. スタートメニューから[Interstage] > [Studio] > [Interstage基盤サービス操作ツール]を選択します。

  2. Interstage基盤サービス操作ツールのウィンドウの[J2EE実行環境を使用する]チェックボックスをチェック状態にします。

  3. [必須サービスのみ起動状態にする]ボタンが有効の場合、ボタンをクリックしてサービスを起動します。ボタンが無効の場合は操作は不要です。

  4. <必要なサービス>が全て実行中となっていることを確認してから[閉じる]ボタンをクリックしてInterstage基盤サービス操作ツールを終了します。

3. プロジェクトの作成

COBOLパースペクティブを表示していない場合は、以下の手順でCOBOLパースペクティブを表示してください。

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

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

ワークベンチのメニューバーから[ファイル] > [新規] > [CORBAサーバプロジェクト]を選択すると、新規CORBAサーバプロジェクトが表示されます。

[1枚目]

プロジェクト名と保存フォルダを入力します。

設定項目

設定内容

プロジェクト名

CALCSV

プロジェクトコンテンツ

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

[2枚目]

ターゲットを指定する画面です。ここでは何も変更せずに次に進みます。

[3枚目]

ビルド環境を指定する画面です。ここでは何も変更せずに次に進みます。

[4枚目]

生成するコードを選択する画面です。コード生成ウィザードとして[CORBAサーバアプリケーション]が選択されていることを確認し、[終了]をクリックします。

4. CORBAサーバアプリケーション生成ウィザードによるひな型作成

プロジェクトが作成された後に、CORBAサーバアプリケーション生成ウィザードが起動されます。

[1枚目]

プロジェクト名と保存フォルダを入力します。

設定項目

設定内容

モジュール名

SAMPLE(任意)

クラス名

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

例外の生成

チェックする

デフォルト処理の生成

チェックする

コメントの生成

チェックする

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

exception CDException{
    string CDExceptionMsg;
    long CDExceptionCode;
};

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

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

[2枚目]

2枚目では、定数を宣言します。ここでは、例外発生時に返却するエラーメッセージを2個定義します。

<定数1>

設定項目

設定内容

英数文字列

定数名

MSG1

初期値

"item1 is zero"

<定数2>

設定項目

設定内容

英数文字列

定数名

MSG2

初期値

"item2 is zero"

[3枚目]

3枚目では型宣言を行います。今回は必要ありませんが、ここでは繰り返し項目などを定義します。
なにもせず、次に進んでください。

[4枚目]

ここで、構造体を宣言します。今回のプログラムでは、クライアントからの入力となる項目が2個、演算結果を返却する領域が1個必要であるため、それらの領域を1つの構造体として宣言することにします。

この画面で、[追加]ボタンを押して、構造体定義ダイアログで構造体を宣言します。

ここでは、構造体「S1」を以下の要素を持つ構造体として宣言します。

変数名

型と使用目的

item1

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

item2

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

result

4バイト整数 ,
2項演算結果 (サーバが値設定)

[5枚目]

次に、ビジネスメソッドを宣言します。ここでは、「1. 作成するプログラムの内容」に従い、メソッド「addop」、「subop」、「mltop」、「divop」を宣言します。

この画面で、[追加]ボタンを押して、利用者メソッドの定義ダイアログでメソッドを宣言します。
下記のダイアログは、メソッド addopを設定している様子です。

各メソッドの定義情報を説明します。

<メソッド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) 乗算、除算の場合は、例外を通知します。

[終了]ボタンを押すと、ソースファイルフォルダにひな型ソースが生成されます。この例の場合は、以下のファイルが生成されます。

ファイル名

説明

CALCSV.cob

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

SAMPLE-CALCSV-IMPL.cob

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

SAMPLE-CALCSV--INIT.cob

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

USCALCSV.idl

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

"SAMPLE"で始まるCOBOLソースファイル

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

5. プログラムの編集

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)

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

000010 IDENTIFICATION DIVISION.
000020 PROGRAM-ID. CALCSV.
000030 ENVIRONMENT DIVISION.
000040 CONFIGURATION SECTION.
000050 REPOSITORY.
000060      COPY CORBA--REP.
000070      COPY USCALCSV--REP.
000080 .
000090 SPECIAL-NAMES.
000100      SYMBOLIC CONSTANT
000110      COPY CORBA--CONST.
000120  .
000130 DATA DIVISION.
000140 WORKING-STORAGE SECTION.
000150 COPY CORBA--COPY.
000160 COPY USCALCSV--COPY.
000170 01  API-NAME        PIC   X(50).
000180 01  APL-NAME        PIC   X(64)   VALUE     "CALCSV".
000190 01  ORB             USAGE OBJECT REFERENCE CORBA-ORB.
000200 01  BOA             USAGE OBJECT REFERENCE CORBA-BOA.
000210 01  IMPL-REP        USAGE OBJECT REFERENCE FJ-IMPLEMENTATIONREP.
000220 01  IMPL            USAGE OBJECT REFERENCE CORBA-IMPLEMENTATIONDEF.
000230 01  REP-ID          PIC   X(128) VALUE     "IDL:SAMPLE/CALCSV:1.0".(※1)
000240 01  OBJ             USAGE OBJECT REFERENCE CORBA-OBJECT.
000250 01  EXCEPT-ID       USAGE OBJECT REFERENCE CORBA-STRING.
000260 01  EXCEPT-ID-VALUE PIC   X(50).
000270 LINKAGE SECTION.
000280 PROCEDURE DIVISION
000290                   .
000300* 
000310*  ORBの初期化
000320* 
000330      INVOKE CORBA "ORB_INIT" USING APL-NAME FJ-OM_ORBID RETURNING ORB.
000340* 
000350*  BOAの初期化
000360* 
000370      INVOKE ORB "BOA_INIT" USING APL-NAME CORBA-BOA_OAID RETURNING BOA.
000380* 
000390*  インプリメンテーションリポジトリオブジェクトの取得
000400* 
000410      INVOKE ORB "RESOLVE_INITIAL_REFERENCES" USING CORBA-OBJECTID_IMPLEMENTAT-001 RETURNING OBJ.
000420      INVOKE FJ-IMPLEMENTATIONREP "NARROW" USING OBJ RETURNING IMPL-REP.
000430* 
000440*  インプリメンテーション情報の取得
000450* 
000460      INVOKE IMPL-REP "LOOKUP_ID" USING REP-ID RETURNING OBJ.
000470      INVOKE CORBA-IMPLEMENTATIONDEF "NARROW" USING OBJ RETURNING IMPL.
000480* 
000490      SET OBJ TO NULL.
000500* 
000510*  サーバの活性化をODに通知する
000520* 
000530      MOVE "CORBA::BOA::IMPL_IS_READY" TO API-NAME.
000540      INVOKE BOA "IMPL_IS_READY" USING IMPL.
000550* 
000560      STOP RUN.
000570 END PROGRAM CALCSV.

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

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

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

000010 IDENTIFICATION DIVISION.
000020 PROGRAM-ID. SAMPLE-CALCSV--INIT.
000030 ENVIRONMENT DIVISION.
000040 CONFIGURATION SECTION.
000050 REPOSITORY.
000060      CLASS SAMPLE-CALCSV
000070      CLASS SAMPLE-CALCSV-IMPL
000080 .
000090 DATA DIVISION.
000100 WORKING-STORAGE SECTION.
000110 LINKAGE SECTION.
000120 01 RET USAGE OBJECT REFERENCE SAMPLE-CALCSV.
000130 PROCEDURE DIVISION
000140         RETURNING RET
000150                   .
000160      INVOKE SAMPLE-CALCSV-impl "new" RETURNING RET.
000170      EXIT PROGRAM.
000180 END PROGRAM SAMPLE-CALCSV-- INIT.
ビジネスメソッドの実装 (SAMPLE-CALCSV-IMPL.cob)

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

000010 CLASS-ID. SAMPLE-CALCSV-IMPL AS "SAMPLE-CALCSV-IMPL" INHERITS 
000020     SAMPLE-CALCSV
000030  .
000040 ENVIRONMENT DIVISION.
000050 CONFIGURATION SECTION.
000060 REPOSITORY.
000070      COPY CORBA--REP.
000080      COPY USCALCSV--REP.
000090  .
000100 SPECIAL-NAMES.
000110      SYMBOLIC CONSTANT
000120      COPY CORBA--CONST.
000121      COPY USCALCSV--CONST.
000130  .
000140 OBJECT.
000150 DATA DIVISION.
000160 WORKING-STORAGE SECTION.
000170 COPY CORBA--COPY.
000180 COPY USCALCSV--COPY.
000190 PROCEDURE DIVISION
000200                   .
000210 METHOD-ID. ADDOP AS "ADDOP" OVERRIDE.
000220* <IDL-INFO-START>
000230* void addop(inout S1 param1)
000240* <IDL-INFO-END>
000250 DATA DIVISION.
000260 WORKING-STORAGE SECTION.
000270 LINKAGE SECTION.
000280 01 PARAM1  TYPE SAMPLE-S1.
000290 PROCEDURE DIVISION
000300         USING 
000310                   PARAM1
000320                   .
000321      COMPUTE result OF param1 = item1 OF param1 + item2 OF param1.
000330 END METHOD ADDOP.
000340 METHOD-ID. SUBOP AS "SUBOP" OVERRIDE.
000350* <IDL-INFO-START>
000360* void subop(inout S1 param1)
000370* <IDL-INFO-END>
000380 DATA DIVISION.
000390 WORKING-STORAGE SECTION.
000400 LINKAGE SECTION.
000410 01 PARAM1  TYPE SAMPLE-S1.
000420 PROCEDURE DIVISION
000430         USING 
000440                   PARAM1
000450                   .
000451      COMPUTE result OF param1 = item1 OF param1 - item2 OF param1.
000460 END METHOD SUBOP.
000470 METHOD-ID. MLTOP AS "MLTOP" OVERRIDE.
000480* <IDL-INFO-START>
000490* void mltop(inout S1 param1)
000500* <IDL-INFO-END>
000510 DATA DIVISION.
000520 WORKING-STORAGE SECTION.
000521 01 W-EXCEPTION OBJECT REFERENCE SAMPLE-CDException.
000522 01 W-STRING OBJECT REFERENCE CORBA-STRING.
000530 LINKAGE SECTION.
000540 01 PARAM1  TYPE SAMPLE-S1.
000550 PROCEDURE DIVISION
000560         USING 
000570                   PARAM1
000580         RAISING 
000590                   SAMPLE-CDEXCEPTION
000600                   .
000601* 例外処理
000602       IF item1 OF param1 = 0
000603       THEN
000604          INVOKE SAMPLE-CDException "NEW" RETURNING W-EXCEPTION
000605          MOVE -1 TO CDEXCEPTIONCODE OF W-EXCEPTION
000606          INVOKE CORBA-STRING "NEW" RETURNING W-STRING
000607          INVOKE W-STRING "SET-VALUE" USING SAMPLE-MSG1
000608          SET CDEXCEPTIONMSG OF W-EXCEPTION TO W-STRING
000609          EXIT METHOD RAISING W-EXCEPTION
000610       END-IF
000611       IF item2 OF param1 = 0
000612       THEN
000613          INVOKE SAMPLE-CDException "NEW" RETURNING W-EXCEPTION
000614          MOVE -1 TO CDEXCEPTIONCODE OF W-EXCEPTION
000615          INVOKE CORBA-STRING "NEW" RETURNING W-STRING
000616          INVOKE W-STRING "SET-VALUE" USING SAMPLE-MSG2
000617          SET CDEXCEPTIONMSG OF W-EXCEPTION TO W-STRING
000618          EXIT METHOD RAISING W-EXCEPTION
000619       END-IF
000620       COMPUTE result OF param1 = item1 OF param1 * item2 OF param1.
000621
000622 END METHOD MLTOP.
000623 METHOD-ID. DIVOP AS "DIVOP" OVERRIDE.
000630* <IDL-INFO-START>
000640* void divop(inout S1 param1)
000650* <IDL-INFO-END>
000660 DATA DIVISION.
000670 WORKING-STORAGE SECTION.
000671 01 W-EXCEPTION OBJECT REFERENCE SAMPLE-CDException.
000672 01 W-STRING OBJECT REFERENCE CORBA-STRING.
000680 LINKAGE SECTION.
000690 01 PARAM1  TYPE SAMPLE-S1.
000700 PROCEDURE DIVISION
000710         USING 
000720                   PARAM1
000730         RAISING 
000740                   SAMPLE-CDEXCEPTION
000750                   .
000751* 例外処理
000752       IF item1 OF param1 = 0
000753       THEN
000754          INVOKE SAMPLE-CDException "NEW" RETURNING W-EXCEPTION
000755          MOVE -1 TO CDEXCEPTIONCODE OF W-EXCEPTION
000756          INVOKE CORBA-STRING "NEW" RETURNING W-STRING
000757          INVOKE W-STRING "SET-VALUE" USING SAMPLE-MSG1
000758          SET CDEXCEPTIONMSG OF W-EXCEPTION TO W-STRING
000759          EXIT METHOD RAISING W-EXCEPTION
000760       END-IF
000761       IF item2 OF param1 = 0
000762       THEN
000763          INVOKE SAMPLE-CDException "NEW" RETURNING W-EXCEPTION
000764          MOVE -1 TO CDEXCEPTIONCODE OF W-EXCEPTION
000765          INVOKE CORBA-STRING "NEW" RETURNING W-STRING
000766          INVOKE W-STRING "SET-VALUE" USING SAMPLE-MSG2
000767          SET CDEXCEPTIONMSG OF W-EXCEPTION TO W-STRING
000768          EXIT METHOD RAISING W-EXCEPTION
000769       END-IF
000770       COMPUTE result OF param1 = item1 OF param1 / item2 OF param1.
000771
000772 END METHOD DIVOP.
000773 END OBJECT.
000780 END CLASS SAMPLE-CALCSV-IMPL.

ポイント

  • 構造体「S1」は、固定長であるため、TYPE宣言されます。

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

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

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

SAMPLE-CALCSV-IMPL.cobの編集画面のコンテキストメニューから[保存]を選択してください。CORBAサーバアプリケーションが自動的にビルドされます。
ただし、メニューの[プロジェクト] > [自動的にビルド]のチェックを解除している場合はビルドがされないため、チェックしなおしてください。チェックをするとにCORBAサーバアプリケーションが自動的にビルドされます。

7. プログラムの実行

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

ポイント

MyCORBADebugについて

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

  1. 実行資産のコピー

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

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

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

  2. CORBAサーバアプリケーションの配備

    IJServerビューで右ボタンをクリックし、[Interstage管理コンソール]を選択します。Interstage Application Serverに未接続状態の場合には、Interstage Application Serverのコンテキストメニューから[接続/ログイン]を選択して、Interstage Application Serverに接続あるいはログインしてから[Interstage管理コンソール]を選択してください。
    Interstage管理コンソールの左側のツリーから配備先のワークユニットを選択し、画面右側の[配備]タブを選択します。
    インプリメンテーションリポジトリIDと実行プログラムファイルを指定します。

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

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

      C:\Interstage\APS\var\CORBA_WU\MyCORBADebug\work

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

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

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

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

    インタフェース定義の[表示]を選択します。[追加]ボタンを押し、以下のようにインタフェースリポジトリID、ネーミングサービス登録名、ライブラリ名を指定します。

    [一覧へ反映]ボタンを押した後、[配備]ボタンを押して、配備を行います。

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

    配備時に起動指定で、[配備完了後、ワークユニットを起動する]をチェックしていない場合は、以下のようにして作成したワークユニットを起動します。
    Interstage管理コンソールの左側のツリーからワークユニットを選択し、画面右側の[操作]タブを選択します。[起動]ボタンを押します。

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

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

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

8. デバッグ

ワークベンチではCORBAワークユニット起動構成を使用することで、ワークベンチと同一端末にインストールされているInterstage Application Serverのワークユニット上で動作するCORBAサーバアプリケーションをデバッグできます。デバッグの手順の詳細については、"6.2 プロジェクトをデバッグする"を参照してください。