ここでは、CORBAサーバアプリケーションで説明した2項演算プログラムを呼び出すクライアントアプリケーションの作成手順について説明します。
1. プロジェクトの作成
ここでは、オブジェクト指向COBOL言語を使用してCORBAアプリケーションを呼び出す方法を説明します。オブジェクト指向COBOLのプログラミング方法の詳細は、Interstage Application Server アプリケーション作成ガイド(CORBAサービス編)を参照してください。
COBOLパースペクティブを表示していない場合は、以下の手順でCOBOLパースペクティブを表示してください。
メニューバーから[ウィンドウ] > [パースペクティブを開く] > [その他]を選択すると[パースペクティブを開く]ダイアログボックスが表示されます。
[COBOL]を選択して[OK]ボタンをクリックします。
ワークベンチ のメニューバーから[ファイル] > [新規] > [COBOLプロジェクト]を選択すると、新規COBOLプロジェクトが表示されます。
プロジェクト名と保存フォルダを入力します。
設定項目 | 設定内容 |
---|---|
プロジェクト名 | CALCCL |
プロジェクトコンテンツ | [ワークスペース内に新規プロジェクトを作成]をチェック |
ターゲットに関する情報を指定する画面です。ここでは何も指定せずに次に進みます。
ビルド環境を指定する画面です。[CORBAクライアントのビルド環境を設定]をチェックします。それ以外についてはデフォルトの指定のままとします。
生成するコードを選択する画面です。コード生成ウィザードとして[COBOLソース]が選択されることを確認し、[終了]をクリックします。
2. COBOLソース生成ウィザードによるひな型作成
生成するコードを選択する画面です。コード生成ウィザードとして[COBOLソース]が選択されることを確認し、[終了]をクリックします。
ここではCOBOLソースの情報を以下のように指定します。
設定項目 | 設定内容 |
---|---|
プロジェクト名 | CALCCL |
ファイル名 | CALCCL |
PROGRAM-ID | CALCCL |
ファイルコメント | (任意のコメントを記載してください) |
[終了]ボタンを押すと、"CALCCL.cob"ファイルが作成されます。
3. Interstage基盤サービスの起動
テンプレートからCORBAサーバオブジェクト一覧を取得する場合や、CORBAスタブファイル生成ウィザードによってスタブファイルを作成する場合には、Interstage基盤サービス操作ツールによってJ2EE実行環境のためのサービスをあらかじめ起動しておく必要があります。デフォルトの状態では必要なサービスは起動されていないため、以下の手順でサービスを起動してください。
スタートメニューから[Interstage] > [Studio] > [Interstage基盤サービス操作ツール]を選択します。
Interstage基盤サービス操作ツールのウィンドウの[J2EE実行環境を使用する]チェックボックスをチェック状態にします。
[必須サービスのみ起動状態にする]ボタンが有効の場合、ボタンをクリックしてサービスを起動します。ボタンが無効の場合は操作は不要です。
<必要なサービス>が全て実行中となっていることを確認してから[閉じる]ボタンをクリックしてInterstage基盤サービス操作ツールを終了します。
4. プログラムの編集
ウィザードで生成されたCOBOLソースを修正します。
ワークベンチ のメニューより[ウィンドウ] > [ビューの表示] > [その他]を選択すると[ビューの表示]が開きます。
[Interstage Studioテンプレート] > [テンプレート]を選択して[OK]ボタンを押してください。
開いたビューは任意の箇所に移動できます。以降では、タスクビューやコンソールビューと同じ場所に移動して利用しています。
エディタ上で処理を追加する位置にカーソルを位置付けます。テンプレートビューから、[COBOL] > [CORBA] > [CORBAの初期化]を選択し、コンテキストメニューから[挿入]を選択して、処理を追加します。
この例では、CALCCL.cobの9行目(行番号90)に[CORBAの初期化]の処理を挿入します。
エディタ上で処理を追加する位置にカーソルを位置付けます。テンプレートビューから、[COBOL] > [CORBA] > [CORBAサーバオブジェクトの検索]を選択し、コンテキストメニューから[引き数の入力]を選択します。
この例では、CALCCL.cobの19行目(行番号100)の下に空行を1行作成し、そこに[CORBAサーバオブジェクトの検索]の処理を挿入します。
表示された[入力支援]ダイアログボックスで、置換キーに対する値を以下のように指定し、[OK]ボタンを押して処理を追加します。
エディタ上で処理を追加する位置にカーソルを位置付けます。テンプレートビューの[CORBAサーバオブジェクト一覧]から、[モジュール名] > [インタフェース名] > [メソッド]を選択し、コンテキストメニューから[引き数の入力]を選択します。
この例では、CALCCL.cobの37行目(行番号118)の下に空行を1行作成し、そこに[addop]メソッドの呼び出し処理を挿入します。
注意
テンプレートからCORBAサーバオブジェクト一覧を取得する場合は、InterstageおよびInterstageの管理に必要なサービス(基盤サービス)が起動している必要があります。
なお、基盤サービスの起動にはInterstage基盤サービス操作ツールを使用します。ツールを起動するには、スタートメニューから[Interstage] > [Studio] > [Interstage基盤サービス操作ツール]を選択してください。Interstageを起動する場合は、IJServerビューで右クリックし、[起動]を選択します。IJServerビューを表示する場合は、メニューバーから[ウィンドウ] > [ビューの表示] > [その他]を選択し、ビューの表示ダイアログで、[IJServer] > [IJServer]を選択して[OK]ボタンをクリックします。
置換キーに対応する値を設定し、[OK]ボタンを押して処理を追加します。
必要なデータ項目や処理記述を追加・修正し、以下のようなソースにします。
注意
最後に追加したメソッド呼び出し処理は、以下のソースでは修正して利用しています。ソースをコピーする場合は、あらかじめ追加したメソッド呼び出し処理を削除してください。
000010*> 000020 IDENTIFICATION DIVISION. 000030 PROGRAM-ID. CALCCL. 000040 ENVIRONMENT DIVISION. 000050 CONFIGURATION SECTION. 000060 REPOSITORY. 000070* ObjectDirectorの標準登録集(リポジトリ宣言用) 000080 COPY CORBA--REP. 000090* ネーミングサービスの標準登録集(リポジトリ宣言用) 000100 COPY CosNaming--REP. 000110* IDLコンパイラが出力した登録集(リポジトリ宣言用) 000120 COPY USCALCSV--REP. 000130* COBOLプラグインが提供しているCORBAクライアント開発用クラス 000140 CLASS CDCORBA. 000150 000160 SPECIAL-NAMES. 000170 ARGUMENT-NUMBER IS 引数番号 000180 ARGUMENT-VALUE IS 引数内容 000190 SYMBOLIC CONSTANT 000200* ObjectDirectorの標準登録集(定数宣言用) 000210 COPY CORBA--CONST. 000220* ネーミングサービスの標準登録集(定数宣言用) 000230 COPY COSNAMING--CONST. 000240* IDLコンパイラが出力した登録集(定数宣言用) 000250 COPY USCALCSV--CONST. 000260 . 000270 DATA DIVISION. 000280 WORKING-STORAGE SECTION. 000290 COPY CORBA--COPY. 000300 COPY USCALCSV--COPY. 000310 01 L-APL-NAME PIC X(50) VALUE "CALCCL". 000320 01 W-OBJECT OBJECT REFERENCE CORBA-OBJECT. 000330 01 W-TARGET OBJECT REFERENCE SAMPLE-CALCSV. 000340 01 STRUCT1 TYPE SAMPLE-S1. 000350 01 L-RETURN PIC S9(9) COMP-5. 000360 01 L-NAME PIC X(128) VALUE "SAMPLE::CALCSV". 000370 01 ERR-MSG PIC X(128). 000380 01 CDEXCEPTIONMSG OBJECT REFERENCE CORBA-STRING. 000390 01 CDEXCEPTIONCODE TYPE CORBA-LONG. 000400 000410 PROCEDURE DIVISION. 000420 DECLARATIVES. 000430 ERR SECTION. 000440 USE AFTER EXCEPTION SAMPLE-CDEXCEPTION. 000450 MOVE CDEXCEPTIONCODE OF EXCEPTION-OBJECT AS SAMPLE-CDEXCEPTION TO CDEXCEPTIONCODE. 000460 SET CDEXCEPTIONMSG TO CDEXCEPTIONMSG OF EXCEPTION-OBJECT AS SAMPLE-CDEXCEPTION. 000470 INVOKE CDEXCEPTIONMSG "GET-VALUE" RETURNING ERR-MSG. 000480 DISPLAY ERR-MSG. 000490 END DECLARATIVES. 000500 INVOKE CDCORBA "GET-ORB" USING L-APL-NAME RETURNING L-RETURN. 000510 IF L-RETURN NOT = 0 000520 THEN 000530 DISPLAY "ERROR OCCURRED AT GET-ORB" 000540 END-IF 000550 INVOKE CDCORBA "GET-COSNAMING" RETURNING L-RETURN. 000560 IF L-RETURN NOT = 0 000570 THEN 000580 DISPLAY "ERROR OCCURRED AT GET-COSNAMING" 000590 END-IF 000600 000610 MOVE "SAMPLE::CALCSV" TO L-NAME. 000620 INVOKE CDCORBA "GET-NAMEOBJ" USING L-NAME RETURNING L-RETURN. 000630 IF L-RETURN NOT = 0 000640 THEN 000650 DISPLAY "ERROR OCCURRED AT GET-NAMEOBJ" 000660 END-IF 000670 INVOKE CDCORBA "GET-NAMEOBJR" RETURNING W-OBJECT. 000680 IF W-OBJECT = NULL 000690 THEN 000700 DISPLAY "ERROR OCCURRED AT GET-NAMEOBJR" 000710 END-IF 000720 000730 SET W-TARGET TO NULL. 000740 INVOKE SAMPLE-CALCSV "NARROW" USING W-OBJECT RETURNING W-TARGET. 000750 IF W-TARGET = NULL 000760 THEN 000770 DISPLAY "ERROR OCCURRED AT NARROW" 000780 END-IF 000790 000800* サーバアプリケーションのメソッドの呼出し 000810 DISPLAY "第一引数を入力してください:" WITH NO ADVANCING. 000820 ACCEPT item1 OF STRUCT1. 000830 DISPLAY "第二引数を入力してください:" WITH NO ADVANCING. 000840 ACCEPT item2 OF STRUCT1. 000850 000860 INVOKE W-TARGET "addop" USING STRUCT1 000870 DISPLAY "加算結果:" result OF STRUCT1. 000880 000890 INVOKE W-TARGET "subop" USING STRUCT1 000900 DISPLAY "減算結果:" result OF STRUCT1. 000910 000920 MOVE 0 TO CDEXCEPTIONCODE. 000930 DISPLAY "乗算結果:" WITH NO ADVANCING. 000940 INVOKE W-TARGET "mltop" USING STRUCT1 000950 IF CDEXCEPTIONCODE NOT = -1 THEN 000960 DISPLAY result OF STRUCT1 000970 END-IF. 000980 000990 MOVE 0 TO CDEXCEPTIONCODE. 001000 DISPLAY "除算結果:" WITH NO ADVANCING. 001010 INVOKE W-TARGET "divop" USING STRUCT1 001020 IF CDEXCEPTIONCODE NOT = -1 THEN 001030 DISPLAY result OF STRUCT1 001040 END-IF. 001050 001060 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 |
生成されたファイルのうち、登録集以外のCOBOLソースが[依存]ビューにソースファイルとして登録されます。
6. 依存関係の解析
オブジェクト指向COBOLのソースファイルを含んだプロジェクトをビルドする場合、ビルドを行う前にCOBOLソースファイル間の依存関係を設定する必要があります。依存関係を設定することでCOBOLソースファイルが正しい順番でビルドされるようになります。依存関係が正しく設定されていないとビルド時に翻訳エラーが発生することがあります。
プロジェクトの新規作成時および[ソースフォルダ]にCOBOLソースファイルを追加した時には、追加されたソースファイルに対して依存関係が自動的に解析されて設定されます。しかし今回の例のようにCOBOLソースファイルのREPOSITORY段落を編集した場合には、ビルドを行う前に手動で依存関係の解析を実行する必要があります。
ワークベンチの依存ビューでプロジェクトを選択し、コンテキストメニューから [依存関係の解析] > [すべて]を選択して、依存関係の解析を行ってください。
注意
依存関係の解析を行うと、コンソールに“xxx.rep: は存在しません。”というメッセージが表示されます。プロジェクト内のオブジェクト指向COBOLソースファイルに対するリポジトリファイル(*.rep)はそのソースファイルを翻訳して初めて生成されるもののため、ビルドを行う前に依存関係の解析を行うとこのようなメッセージが表示されます。依存関係の解析自体は正しく行われていますので、そのままプロジェクトのビルドを行って構いません。
7. プロジェクトのビルド
ここまでの手順でCORBAクライアントアプリケーションのビルドは完了しています。
ただし、メニューの[プロジェクト] > [自動的にビルド]のチェックを解除している場合はビルドがされないため、チェックしなおしてください。チェックをするとにCORBAクライアントアプリケーションが自動的にビルドされます。
8. 動作確認
CORBAサーバアプリケーションを配備したワークユニットを起動後に、ワークベンチのビューでプロジェクトを選択して、メニューより[実行] > [実行] > [COBOLアプリケーション]を選択して、クライアントアプリケーションを実行します。