例 1 - COBOL での Java 静的メソッドの呼び出し

この例では、Java 静的メソッドを実行するネイティブ COBOL プログラムを示します。

この COBOL プログラムを実行すると、Java プログラムに Java で処理する文字列配列が渡され、さらに Java が呼び出されます。その Java プログラムから COBOL プログラムで処理する配列が返されます。

重要: UNIX プラットフォームの場合、現在の作業フォルダーと libjvm.so を含むフォルダーが LD_LIBRARY_PATH (AIX では LIBPATH) 環境変数で使用できることを確認してください。
  1. 次の Java ファイル (Demo1.java) を作成します。
    import java.math.BigDecimal;
    import java.util.Arrays;
    
    public class Demo1
       {
        public static void static1(String[] d)
        {
            System.out.println("---Output from Java Demo1.static1 method---");
            for (int i = 0; i < d.length; i++)
            {
                System.out.println(d[i]);
            }
            Arrays.sort(d);
        }
        /* select colours from array */
        public static String[] static2(int[] s)
        {
            System.out.println("---Output from Java Demo1.static2 method---");
            for (int i: s)
                System.out.println(i);
            String[] rainbow = {"Red", "Orange", "Yellow", "Green", "Blue", "Indigo", "Violet"};
            String[] ret = {rainbow[s[0]], rainbow[s[1]], rainbow[s[2]], rainbow[s[3]], rainbow[s[4]]};
            return ret;
        }
    }
  2. Demo1.java をコンパイルします。
    javac Demo1.java

    これにより、現在のフォルダーに Demo1.class ファイルが生成されます。

  3. 同じフォルダーに、次の COBOL ファイル (demo1.cbl) を作成します。
          $set sourceformat(variable) nsymbol(national)
           78 MAX_OCC value 5.
           01 i pic xxxx comp-5.
           01 grp2.
              03 nat1 pic n(10) national occurs MAX_OCC
                     value n"Red" n"Green" n"Blue" n"Orange" n"Indigo".
           01 grp3.
             03 utf1 pic u(10) occurs MAX_OCC.
           01 grp4.
             03 num2 pic xxxx comp-5 occurs MAX_OCC
                      value 1 2 4 5 6. 
           procedure division.
          *> Sort COBOL array
            call "java.Demo1.static1" using grp2
            display "---Output from COBOL---"
            perform varying i from 1 by 1 until i > 5
                display nat1(i)
            end-perform
          *> Select colours of the rainbow from input array
          *> Careful Java has 0 based array indexes
             call "java.Demo1.static2" using grp4 returning grp3
             display "---Output from COBOL---"
             perform varying i from 1 by 1 until i > 5
                display utf1(i)
             end-perform.
  4. COBOL ファイルをコンパイルしてリンクします。

    Windows:

    cobol demo1.cbl; 
    cbllink demo1.obj

    UNIX:

    cob -x demo1.cbl  

    これにより、最終的な COBOL 実行可能ファイル demo1.exe (Windows) または demo1 (UNIX) が生成されます。

  5. 実行可能ファイルを実行します。

    Windows:

    demo1.exe

    UNIX:

    ./demo1
    COBOL プログラムと Java プログラムの両方からの出力を示すプログラム出力は次のようになります。
    ---Output from Java Demo1.static1 method---
    Red
    Green
    Blue
    Orange
    Indigo
    ---Output from COBOL---
    Blue
    Green
    Indigo
    Orange
    Red
    ---Output from Java Demo1.static2 method---
    1
    2
    4
    5
    6
    ---Output from COBOL---
    Orange
    Yellow
    Blue
    Indigo
    Violet

    このコードおよび出力は、COBOL コードが static1 メソッドを実行し、いくつかの COBOL 操作を処理した後、static2 メソッドを実行し、さらにいくつかの COBOL 操作を処理したことを示しています。