Java からの COBOL の呼び出し例

制約事項: 次の説明はネイティブ コードのみに該当します。

ここでは、Java プログラムから COBOL プログラムを呼び出す 2 つの短いコード例を示します。最初の例は次の処理を実行します。

簡単な COBOL のサブルーチン、legacy.cbl を示します。

working-storage section.
copy "javatypes.cpy".
01 wsResult       jint.

linkage section.
01 wsOperand1     jint. *> type defined in javatypes.cpy
01 wsOperand2     jint.
01 wsOperation    pic x.

procedure division using wsOperand1 wsOperand2 wsOperation.
    evaluate wsOperation
    when "a"
        add wsOperand1 to wsOperand2 giving wsResult
    when "s"
        subtract wsOperand1 from wsOperand2 giving wsResult
    end-evaluate
    exit program returning wsResult.

次に、このサブルーチンを呼び出す Java プログラムを示します。

import com.microfocus.cobol.* ;
class SimpleCall
{
   public static void main(String argv[]) throws Exception
   {
       int i = RuntimeSystem.cobcall_int("legacy",
                                new ParameterList()
                                                .add((int)4
                        .add((int)7
                                                .add((byte)'a'));
       System.out.println(i) ;
   }
}

2 つ目の例では、複数の異なる USAGE 句に相当する配列を使用して、COBOL プログラムへデータを渡す方法を示します。使用されている cobcall() メソッドは値を戻しませんが、最初のパラメーターとしてオブジェクトを渡し、COBOL プログラムから同じオブジェクト型を返すことができます。次の SimpleCall2 は、最初のパラメーターを参照で、2 番目のパラメーターを値で、3 番目のパラメーターを内容 (by content) で、それぞれ渡します。

import com.microfocus.cobol.* ;

class SimpleCall2
{
   public static void main(String argv[]) throws Exception
   {
      RuntimeSystem.cobcall(null, "usages",
                    new ParameterList()
                    .add((int)1, RuntimeSystem.BY_REFERENCE)
                    .add((int)2, RuntimeSystem.BY_VALUE)
                    .add((int)3, RuntimeSystem.BY_CONTENT));
   }
}