ここでは、CORBAサーバアプリケーションで説明した2項演算プログラムを呼び出すクライアントアプリケーションの作成手順について説明します。
1.Interstage基盤サービスの起動
テンプレートからCORBAサーバオブジェクト一覧を取得する場合や、CORBAスタブファイル生成ウィザードによってスタブファイルを作成する場合には、Interstage基盤サービス操作ツールによってJ2EE実行環境のためのサービスをあらかじめ起動しておく必要があります。デフォルトの状態では必要なサービスは起動されていないため、“Interstage基盤サービスの起動”に示す手順でサービスを起動してください。
なお、“11.2.2 CORBAサーバアプリケーションの作成”ですでにInterstage基盤サービスを起動している場合は、この操作は不要です。
2. COBOLプロジェクトの作成
Interstage Studioワークベンチを起動します。
COBOLパースペクティブが表示されていない場合は、以下の手順でCOBOLパースペクティブを表示します。
メニューバーから[ウィンドウ] > [パースペクティブ] > [パースペクティブを開く] > [その他]を選択すると[パースペクティブを開く]ダイアログボックスが表示されます。
[COBOL]を選択して[OK]ボタンをクリックします。
メニューバーから[ファイル] > [新規] > [COBOLプロジェクト]を選択します。
→ 新規COBOLプロジェクト生成ウィザードが表示されます。
以下を入力し、[次へ]ボタンをクリックします。
設定項目 | 設定内容 |
---|---|
プロジェクト名 | CALCCL |
プロジェクトコンテンツ | [ワークスペース内に新規プロジェクトを作成]をチェック |
→ ターゲットに関する情報を指定する[COBOLプロジェクト]ページが表示されます。
ここでは何も指定せずに、[次へ]ボタンをクリックします。
→ [ビルド環境]ページが表示されます。
[CORBAクライアントのビルド環境を設定]をチェックします。それ以外についてはデフォルトの指定のままとし、[次へ]ボタンをクリックします。
→ [選択]ページが表示されます。
[コード生成を行う]をチェックし、[使用可能なコード生成ウィザード]から[COBOLソース]を選択して、[完了]ボタンをクリックします。
→ COBOLプロジェクトが生成され、[COBOLソース生成ウィザード]が起動されます。
3. COBOLソース生成ウィザードによるひな型作成
COBOLソース生成ウィザードが起動されると、以下の[COBOLソースファイルの作成]ページが表示されます。
COBOLソースの情報を以下のように指定し、[完了]ボタンをクリックします。
設定項目 | 設定内容 |
---|---|
プロジェクト名 | CALCCL |
ファイル名 | CALCCL |
PROGRAM-ID | CALCCL |
ファイルコメント | (任意のコメントを記載してください) |
→ “CALCCL.cob”と“CDCORBA.cob(*1)”が作成されます。
*1: [ビルド環境]ページで[CDCORBAクラスを使用する]をチェックした場合に作成されます。
4. プログラムの編集
ウィザードで生成されたCOBOLソース(この例では、CALCCL.cob)を修正します。
[テンプレート]ビューを表示します。
[テンプレート]ビューが表示されていない場合、メニューバーから[ウィンドウ] > [ビューの表示] > [その他]を選択します。
→ [ビューの表示]ダイアログボックスが表示されます。
[COBOL] > [テンプレート]を選択して[OK]ボタンをクリックします。
CORBAの初期化処理を追加します。
エディター上で処理を追加する位置にカーソルを位置付けます。この例では、CALCCL.cobの9行目(行番号90)にカーソルを位置付けます。
[テンプレート]ビューから、[COBOL] > [CORBA] > [CORBAの初期化]を選択し、コンテキストメニューから[挿入]を選択します。
→ 以下の手続きが追加されます。
INVOKE CDCORBA "GET-ORB" USING L-APL-NAME RETURNING L-RETURN. IF L-RETURN NOT = 0 THEN DISPLAY "ERROR OCCURRED AT GET-ORB" END-IF. INVOKE CDCORBA "GET-COSNAMING" RETURNING L-RETURN. IF L-RETURN NOT = 0 THEN DISPLAY "ERROR OCCURRED AT GET-COSNAMING" END-IF.
CORBAサーバオブジェクトの検索処理を追加します。
エディター上で処理を追加する位置にカーソルを位置付けます。この例では、CALCCL.cobの19行目(行番号100)の下に空行を1行作成し、カーソルを位置付けます。
[テンプレート]ビューから、[COBOL] > [CORBA] > [CORBAサーバオブジェクトの検索]を選択し、コンテキストメニューから[引き数の入力]を選択します。
表示された[入力支援]ダイアログボックスで、置換キーに対応する値を設定し、[OK]ボタンをクリックします。
→ 以下の手続きが追加されます。
MOVE "SAMPLE::CALCSV" TO L-NAME. INVOKE CDCORBA "GET-NAMEOBJ" USING L-NAME RETURNING L-RETURN. IF L-RETURN NOT = 0 THEN DISPLAY "ERROR OCCURRED AT GET-NAMEOBJ" END-IF. INVOKE CDCORBA "GET-NAMEOBJR" RETURNING W-OBJECT. IF W-OBJECT = NULL THEN DISPLAY "ERROR OCCURRED AT GET-NAMEOBJR" END-IF. SET W-TARGET TO NULL. INVOKE SAMPLE-CALCSV "NARROW" USING W-OBJECT RETURNING W-TARGET. IF W-TARGET = NULL THEN DISPLAY "ERROR OCCURRED AT NARROW" END-IF.
メソッド呼び出し処理を追加します。
エディター上で処理を追加する位置にカーソルを位置付けます。この例では、CALCCL.cobの37行目(行番号118)の下に空行を1行作成し、カーソルを位置付けます。
[テンプレート]ビューの[CORBAサーバオブジェクト一覧]から、モジュール名 > インタフェース名 > メソッドを選択し、コンテキストメニューから[引き数の入力]を選択します。この例では、[CORBAサーバオブジェクト一覧] > [SAMPLE] > [CALCSV] > [void addop(inout struct param1)]を選択し、コンテキストメニューから[引き数の入力]を選択します。
注意
テンプレートからCORBAサーバオブジェクト一覧を取得する場合は、InterstageおよびInterstageの管理に必要なサービス(基盤サービス)が起動している必要があります。
なお、基盤サービスの起動にはInterstage基盤サービス操作ツールを使用します。ツールを起動するには、スタートメニューから[Interstage Studio] > [Interstage基盤サービス操作ツール]を選択してください。
[CORBAサーバオブジェクト一覧]で「オブジェクトが見つかりません。」が表示された場合、コンテキストメニューから[最新表示]を選択してください。
置換キーに対応する値を設定し、[OK]ボタンをクリックします。
→ 以下の手続きが追加されます。
INVOKE W_TARGET "addop" USING param1
(注)上記のメソッド呼び出し処理は、以下のソースプログラムでは修正して利用しています。
ソースプログラムに必要なデータ項目や手続きを追加・修正します。(青色(下線付き)部分)
*> IDENTIFICATION DIVISION. PROGRAM-ID. CALCCL. ENVIRONMENT DIVISION. CONFIGURATION SECTION. REPOSITORY. * ObjectDirectorの標準登録集(リポジトリ宣言用) COPY CORBA--REP. * ネーミングサービスの標準登録集(リポジトリ宣言用) COPY CosNaming--REP. * IDLコンパイラが出力した登録集(リポジトリ宣言用) COPY USCALCSV--REP. * COBOLプラグインが提供しているCORBAクライアント開発用クラス CLASS CDCORBA. SPECIAL-NAMES. ARGUMENT-NUMBER IS 引数番号 ARGUMENT-VALUE IS 引数内容 SYMBOLIC CONSTANT * ObjectDirectorの標準登録集(定数宣言用) COPY CORBA--CONST. * ネーミングサービスの標準登録集(定数宣言用) COPY COSNAMING--CONST. * IDLコンパイラが出力した登録集(定数宣言用) COPY USCALCSV--CONST. .
DATA DIVISION. WORKING-STORAGE SECTION. COPY CORBA--COPY. COPY USCALCSV--COPY. 01 L-APL-NAME PIC X(50) VALUE "CALCCL". 01 W-OBJECT OBJECT REFERENCE CORBA-OBJECT. 01 W-TARGET OBJECT REFERENCE SAMPLE-CALCSV. 01 STRUCT1 TYPE SAMPLE-S1. 01 L-RETURN PIC S9(9) COMP-5. 01 L-NAME PIC X(128) VALUE "SAMPLE::CALCSV". 01 ERR-MSG PIC X(128). 01 CDEXCEPTIONMSG OBJECT REFERENCE CORBA-STRING. 01 CDEXCEPTIONCODE TYPE CORBA-LONG. PROCEDURE DIVISION. DECLARATIVES. ERR SECTION. USE AFTER EXCEPTION SAMPLE-CDEXCEPTION. MOVE CDEXCEPTIONCODE OF EXCEPTION-OBJECT AS SAMPLE-CDEXCEPTION TO CDEXCEPTIONCODE. SET CDEXCEPTIONMSG TO CDEXCEPTIONMSG OF EXCEPTION-OBJECT AS SAMPLE-CDEXCEPTION. INVOKE CDEXCEPTIONMSG "GET-VALUE" RETURNING ERR-MSG. DISPLAY ERR-MSG. END DECLARATIVES. INVOKE CDCORBA "GET-ORB" USING L-APL-NAME RETURNING L-RETURN. IF L-RETURN NOT = 0 THEN DISPLAY "ERROR OCCURRED AT GET-ORB" END-IF INVOKE CDCORBA "GET-COSNAMING" RETURNING L-RETURN. IF L-RETURN NOT = 0 THEN DISPLAY "ERROR OCCURRED AT GET-COSNAMING" END-IF MOVE "SAMPLE::CALCSV" TO L-NAME. INVOKE CDCORBA "GET-NAMEOBJ" USING L-NAME RETURNING L-RETURN. IF L-RETURN NOT = 0 THEN DISPLAY "ERROR OCCURRED AT GET-NAMEOBJ" END-IF INVOKE CDCORBA "GET-NAMEOBJR" RETURNING W-OBJECT. IF W-OBJECT = NULL THEN DISPLAY "ERROR OCCURRED AT GET-NAMEOBJR" END-IF SET W-TARGET TO NULL. INVOKE SAMPLE-CALCSV "NARROW" USING W-OBJECT RETURNING W-TARGET. IF W-TARGET = NULL THEN DISPLAY "ERROR OCCURRED AT NARROW" END-IF * サーバアプリケーションのメソッドの呼出し DISPLAY "第一引数を入力してください:" WITH NO ADVANCING. ACCEPT item1 OF STRUCT1. DISPLAY "第二引数を入力してください:" WITH NO ADVANCING. ACCEPT item2 OF STRUCT1. INVOKE W-TARGET "addop" USING STRUCT1 DISPLAY "加算結果:" result OF STRUCT1. INVOKE W-TARGET "subop" USING STRUCT1 DISPLAY "減算結果:" result OF STRUCT1. MOVE 0 TO CDEXCEPTIONCODE. DISPLAY "乗算結果:" WITH NO ADVANCING. INVOKE W-TARGET "mltop" USING STRUCT1 IF CDEXCEPTIONCODE NOT = -1 THEN DISPLAY result OF STRUCT1 END-IF. MOVE 0 TO CDEXCEPTIONCODE. DISPLAY "除算結果:" WITH NO ADVANCING. INVOKE W-TARGET "divop" USING STRUCT1 IF CDEXCEPTIONCODE NOT = -1 THEN DISPLAY result OF STRUCT1 END-IF. END PROGRAM CALCCL.
ソースプログラムを保存します。(自動ビルドが実行された場合、この時点では翻訳エラーとなります。)
5. スタブの追加
CORBAサーバアプリケーションを呼び出すには、IDLファイルからCORBAクライアントに必要なスタブファイルおよびその他のファイルを生成し、プロジェクトに追加する必要があります。CORBAスタブファイル生成ウィザードを利用してスタブファイルおよびその他のファイルを生成し、プロジェクトに追加します。
メニューバーから[ファイル] > [新規] > [その他]を選択します。
→ 新規ウィザードが表示されます。
[COBOL] > [ソース] > [CORBAスタブファイル]を選択します。
→ CORBAスタブファイル生成ウィザードが表示されます。
IDLファイル、登録先プロジェクト、および生成言語を入力し、[完了]ボタンをクリックします。
設定項目 | 設定内容 |
---|---|
IDLファイル | CALCSVプロジェクトのUSCALCSV.idlを指定してください |
登録先プロジェクト | CALCCL |
生成言語 | オブジェクト指向COBOL |
→ プロジェクトに以下のファイルが生成されます。
ファイル種別 | ファイル名 |
---|---|
リポジトリ段落宣言用登録集 | USCALCSV--REP.cbl |
定数宣言用登録集 | USCALCSV--CONST.cbl |
TYPEDEF型宣言用登録集 | USCALCSV--COPY.cbl |
インタフェースファイル | SAMPLE-CALCSV.cob |
Helperクラスファイル | SAMPLE-CALCSV--HELPER.cob |
スタブファイル | SAMPLE-CALCSV--STUB.cob |
Narrowスタブファイル | SAMPLE-CALCSV_NARROW.cob |
データ型クラスファイル | SAMPLE-CDEXCEPTION.cob |
データ型Helperファイル | SAMPLE-S1--HELPER.cob SAMPLE-CDEXCEPTION--HELPER.cob |
生成されたファイルのうち、登録集ファイル(.cbl)は[依存]ビューの[その他のファイル]に登録され、COBOLソースファイル(.cob)は[ソースファイル]に登録されます。
6. 依存関係の解析
オブジェクト指向COBOLのソースファイルを含んだプロジェクトをビルドする場合、ビルドを行う前にCOBOLソースファイル間の依存関係を設定する必要があります。依存関係を設定することでCOBOLソースファイルが正しい順番でビルドされるようになります。依存関係が正しく設定されていないとビルド時に翻訳エラーが発生することがあります。
プロジェクトの新規作成時および[ソースファイル]フォルダにCOBOLソースファイルを追加した時には、追加されたソースファイルに対して依存関係が自動的に解析されて設定されます。しかし今回の例のようにCOBOLソースファイルのリポジトリ段落を編集した場合には、ビルドを行う前に手動で依存関係の解析を実行する必要があります。
[依存]ビューでプロジェクトを選択し、コンテキストメニューから [依存関係の解析] > [すべて]を選択して、依存関係の解析を行ってください。
注意
依存関係の解析を行うと、コンソールに“xxx.rep: は存在しません。”というメッセージが表示されることがあります。プロジェクト内のオブジェクト指向COBOLソースファイルに対するリポジトリファイル(*.rep)はそのソースファイルを翻訳して初めて生成されるもののため、ビルドを行う前に依存関係の解析を行うとこのようなメッセージが表示されます。依存関係の解析自体は正しく行われていますので、そのままプロジェクトをビルドしてかまいません。
7. プロジェクトのビルド
自動ビルドが設定されている場合、COBOLソースプログラムを保存した直後にビルドが実行されます。自動ビルドが設定されていない場合は、[依存]ビューまたは[構造]ビューで、プロジェクトを選択し、メニューバーから[プロジェクト] > [プロジェクトのビルド]を選択して、ビルドを実行します。
8. 動作確認
CORBAサーバアプリケーションを配備したワークユニットを起動した後に、[依存]ビューまたは[構造]ビューからプロジェクトを選択し、メニューバーから[実行] > [実行(S)] > [COBOLアプリケーション]を選択して、クライアントアプリケーションを実行します。
コンソールが表示されるため、第一引数を入力し、Enterキーを押します。
第二引数を入力し、Enterキーを押します。
→ 加算、減算、乗算、除算が行われ、結果が表示されます。