ここでは、CORBAサーバアプリケーションを開発する際の留意事項を示します。
以下に、CORBAデータ型とCOBOL言語のデータ型との対応を示します。
定義可能なデータ型は、“Interstage Studioユーザーズガイド”を参照してください。
CORBA型 | COBOL(オブジェクト指向COBOL)マッピング型 | COBOL Native型 |
---|---|---|
long | CORBA-long | PIC S9(9) COMP-5 |
unsigned long | CORBA-unsigned-long | PIC 9(9) COMP-5 |
short | CORBA-short | PIC S9(4) COMP-5 |
unsigned short | CORBA-unsigned-short | PIC 9(4) COMP-5 |
long long | CORBA-long-long | PIC S9(18) COMP-5 |
unsigned long long | CORBA-unsigned-long-long | PIC 9(18) COMP-5 |
float | CORBA-float | COMP-1 |
double | CORBA-double | COMP-2 |
char | CORBA-char | PIC X |
wchar | CORBA-wchar | PIC N |
octet | CORBA-octet | PIC X |
boolean | CORBA-boolean | PIC 1(1) |
fixed <m+n,n> | 使用できません | PIC S9(m+n,n) PACKED-DECIMAL |
string(固定長) | PIC X(n) | PIC X(n) |
string(可変長) | 使用できません | 使用できません |
wstring(固定長) | PIC N(n) | PIC N(n) |
wstring(可変長) | 使用できません | 使用できません |
enum | CORBA-enum | PIC 9(10) COMP-5 |
any | 使用できません | 使用できません |
構造体(固定長) | 集団項目 | 集団項目 |
構造体(可変長) | クラス | クラス |
共用体 | クラス | クラス |
sequence型(固定長) | クラス | クラス |
sequence型(可変長) | クラス | クラス |
array型 | 使用できません | 使用できません |
CORBAサーバアプリケーション生成ウィザードでは、以下のデータ型をサポートしていません。これらのデータ型を使用する場合、“Interstage Application Server アプリケーション作成ガイド(CORBAサービス編)”を参照して、ひな型生成後にIDLファイルおよびプログラムソースを修正してください。
octet
string(可変長)
wstring(可変長)
enum
構造体(可変長)
共用体
sequence型(可変長)
繰返し項目を、以下のようにsequenceデータ型にマッピングします。
次元数 | オブジェクト指向COBOL |
---|---|
1次元 | sequence型(固定長) |
2次元~5次元 | 使用できません |
繰り返し定義のIDLファイルへの展開
ここでは、繰り返し定義のIDLファイルへの展開について説明します。
1次元の場合は、sequence型にマッピングします。
データ型に4バイト整数、型名にa、繰り返し数に10を指定した場合の展開について示します。
typedef sequence<long, 10> a ;
繰返し項目の操作
ここでは、繰返し項目の操作について説明します。
繰返し項目の操作を以下に示します。以下のIDLファイルをコンパイルした場合、sequence型は、シーケンスクラスにマッピングされます。
module ODsample { typedef sequence<long,10> sampleseq; interface seqtest { sampleseq op1(in sampleseq param1, out sampleseq param2, inout sampleseq param3); }; };
シーケンスクラスのファクトリメソッド、オブジェクトメソッド、プロパティーを以下に示します。
カテゴリ | メソッド名/プロパティー名 | 機能 |
---|---|---|
ファクトリメソッド | NEW-WITH-LENGTH | 指定の長さでシーケンスクラスを作成します。 |
オブジェクトメソッド | GET-VALUE | 指定番号の要素の値を取得します。 |
SET-VALUE | 指定番号の要素に値を設定します。 | |
CLONE | シーケンスクラスを複製します。 | |
プロパティー | SEQ-MAXIMUM | シーケンス最大長の値を取得します。 |
SEQ-LENGTH | シーケンス長の値の取得/設定を行います。 |
METHOD-ID. OP1 AS "OP1" OVERRIDE. * <IDL-INFO-START> * sampleseq op1(in sampleseq param1,out sampleseq param2,inout sampleseq param3) * <IDL-INFO-END> DATA DIVISION. WORKING-STORAGE SECTION. 01 SEQ-VALUE TYPE CORBA-LONG. 01 I TYPE CORBA-UNSIGNED-LONG. LINKAGE SECTION. 01 復帰値 TYPE ODSAMPLE-SAMPLESEQ. 01 PARAM1 TYPE ODSAMPLE-SAMPLESEQ. 01 PARAM2 TYPE ODSAMPLE-SAMPLESEQ. 01 PARAM3 TYPE ODSAMPLE-SAMPLESEQ. PROCEDURE DIVISION USING PARAM1 PARAM2 PARAM3 RETURNING 復帰値 . * IN PARAMETER PERFORM VARYING I FROM 1 BY 1 UNTIL I > 10 INVOKE PARAM1 "GET-VALUE" USING I RETURNING SEQ-VALUE END-PERFORM. * OUT PARAMETER INVOKE SEQUENCE-LONG-10 "NEW" RETURNING PARAM2. MOVE 10 TO SEQ-LENGTH OF PARAM2. PERFORM VARYING I FROM 1 BY 1 UNTIL I > 10 COMPUTE SEQ-VALUE = I * 100 INVOKE PARAM2 "SET-VALUE" USING I SEQ-VALUE END-PERFORM. * INOUT PARAMETER PERFORM VARYING I FROM 1 BY 1 UNTIL I > 10 INVOKE PARAM3 "GET-VALUE" USING I RETURNING SEQ-VALUE COMPUTE SEQ-VALUE = SEQ-VALUE * 100 INVOKE PARAM3 "SET-VALUE" USING I SEQ-VALUE END-PERFORM. * RESULT INVOKE SEQUENCE-LONG-10 "NEW" RETURNING 復帰値. MOVE 10 TO SEQ-LENGTH OF 復帰値. PERFORM VARYING I FROM 1 BY 1 UNTIL I > 10 COMPUTE SEQ-VALUE = I * 10000 INVOKE 復帰値 "SET-VALUE" USING I SEQ-VALUE END-PERFORM. END METHOD OP1.
ポイント
inモードまたはinoutモードのパラメタの場合は、実際のデータ領域はすでに存在するため新たに確保する必要はありません。outモードのパラメタまたは復帰値の場合には実際の領域をサーバアプリケーションで確保する必要があります。
構造体を、以下のように集団項目にマッピングします。
種別 | オブジェクト指向COBOL |
---|---|
構造体(固定長) | 集団項目 |
構造体(可変長) | 使用できません |
以下のIDLファイルをコンパイルした場合の構造体の使用例を示します。
module ODsample { struct samplestruct { long item1; long item2; }; interface structtest { samplestruct op1(in samplestruct param1, out samplestruct param2, inout samplestruct param3); }; };
METHOD-ID. OP1 AS "OP1" OVERRIDE. * <IDL-INFO-START> * samplestruct op1(in samplestruct param1,out samplestruct param2,inout samplestruct param3) * <IDL-INFO-END> DATA DIVISION. WORKING-STORAGE SECTION. LINKAGE SECTION. 01 復帰値 TYPE ODSAMPLE-SAMPLESTRUCT. 01 PARAM1 TYPE ODSAMPLE-SAMPLESTRUCT. 01 PARAM2 TYPE ODSAMPLE-SAMPLESTRUCT. 01 PARAM3 TYPE ODSAMPLE-SAMPLESTRUCT. PROCEDURE DIVISION USING PARAM1 PARAM2 PARAM3 RETURNING 復帰値 . * IN PARAMETER * OUT PARAMETER * INOUT PARAMETER MOVE ITEM1 OF PARAM1 TO ITEM1 OF PARAM2. MOVE ITEM2 OF PARAM3 TO ITEM2 OF PARAM2. MOVE 2 TO ITEM1 OF PARAM3. MOVE 3 TO ITEM2 OF PARAM3. * RESULT MOVE 4 TO ITEM1 OF 復帰値. MOVE 5 TO ITEM2 OF 復帰値. END METHOD OP1.
IDL生成機能では、継承の記述および#include文を生成することはできません。
モジュール、インタフェースを継承する場合は、IDLファイルをエディターで編集して継承部分の記述を追加してください。
マルチインスタンスシステムで運用するプログラムの場合は、ウィザードで生成したプログラムのORBの初期化部分を修正する必要があります。
マルチインスタンスシステムおよびORB初期化の方法は、“Interstage Application Server アプリケーション作成ガイド(CORBAサービス編)"および“Interstage Application Server リファレンスマニュアル(コマンド編)”を参照してください。
データベースアクセスを行うCORBAサーバアプリケーションを作成する場合は、以下の2つの方法があります。
事前にデータベースをアクセスするためのクラスライブラリを作成し、そのクラスを使用するCORBAサーバアプリケーションを作成する。
クラスライブラリ化することで、部品として他アプリケーションでも流用できます。
CORBAサーバアプリケーションのビジネスメソッド内に、直接データベースアクセスする命令を記述する。
NetCOBOLの提供するデータベースアクセス方法(ESQL/COBOLなど)の詳細や注意事項は、“NetCOBOL ユーザーズガイド”および“NetCOBOLソフトウェア説明書”を参照してください。