ここでは、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ソフトウェア説明書”を参照してください。