ページの先頭行へ戻る
NetCOBOL V11.0 NetCOBOL Studio ユーザーズガイド
FUJITSU Software

12.5.2 CORBAサーバアプリケーション開発時の留意事項

ここでは、CORBAサーバアプリケーションを開発する際の留意事項を示します。

12.5.2.1 使用可能なデータ型

以下に、CORBAデータ型とCOBOL言語のデータ型との対応を示します。

定義可能なデータ型は、“Interstage Studioユーザーズガイド”を参照してください。

表12.19 COBOL(オブジェクト指向COBOL)マッピング

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ファイルおよびプログラムソースを修正してください。

12.5.2.2 繰返し項目の操作

繰返し項目を、以下のようにsequenceデータ型にマッピングします。

表12.20 繰返し項目のマッピング

次元数

オブジェクト指向COBOL

1次元

sequence型(固定長)

2次元~5次元

使用できません

繰り返し定義のIDLファイルへの展開

ここでは、繰り返し定義のIDLファイルへの展開について説明します。

1次元の場合

1次元の場合は、sequence型にマッピングします。

オブジェクト指向COBOLの場合

データ型に4バイト整数、型名にa、繰り返し数に10を指定した場合の展開について示します。

    typedef sequence<long, 10> a ;

繰返し項目の操作

ここでは、繰返し項目の操作について説明します。

1次元の場合(オブジェクト指向COBOL)

繰返し項目の操作を以下に示します。以下のIDLファイルをコンパイルした場合、sequence型は、シーケンスクラスにマッピングされます。

IDLファイル
module ODsample {
      typedef sequence<long,10> sampleseq;
      interface seqtest {
               sampleseq op1(in sampleseq param1,
                        out sampleseq param2,
                        inout sampleseq param3);
      };
};

シーケンスクラスのファクトリメソッド、オブジェクトメソッド、プロパティを以下に示します。

表12.21 シーケンスクラス

カテゴリ

メソッド名/プロパティ名

機能

ファクトリメソッド

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モードのパラメタまたは復帰値の場合には実際の領域をサーバアプリケーションで確保する必要があります。

12.5.2.3 構造体の操作

構造体を、以下のように集団項目にマッピングします。

表12.22 構造体のマッピング

種別

オブジェクト指向COBOL

構造体(固定長)

集団項目

構造体(可変長)

使用できません

以下のIDLファイルをコンパイルした場合の構造体の使用例を示します。

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.

12.5.2.4 継承

IDL生成機能では、継承の記述および#include文を生成することはできません。

モジュール、インタフェースを継承する場合は、IDLファイルをエディタで編集して継承部分の記述を追加してください。

12.5.2.5 マルチインスタンスシステムについて

マルチインスタンスシステムで運用するプログラムの場合は、ウィザードで生成したプログラムのORBの初期化部分を修正する必要があります。

マルチインスタンスシステムおよびORB初期化の方法は、“Interstage Application Server アプリケーション作成ガイド(CORBAサービス編)"および“Interstage Application Server リファレンスマニュアル(コマンド編)”を参照してください。

12.5.2.6 データベースアクセス

データベースアクセスを行うCORBAサーバアプリケーションを作成する場合は、以下の2つの方法があります。

NetCOBOLの提供するデータベースアクセス方法(ESQL/COBOLなど)の詳細や注意事項は、“NetCOBOL ユーザーズガイド”および“NetCOBOLソフトウェア説明書”を参照してください。