例 4 - Java での COBOL の呼び出しと作業場所節項目へのアクセス

この例では、Java プログラムを使用して 2 つの COBOL プログラムを呼び出し、それらのプログラムの 1 つから作業場所節項目にアクセスします。

この例は例 2 と 3 を組み合わせた内容になっていますが、それに加え、Java プログラムで複数の COBOL プログラムを呼び出すために必要な genjava ユーティリティの使用方法も示しています。

重要: UNIX プラットフォームの場合、現在の作業フォルダーと libjvm.so を含むフォルダーが LD_LIBRARY_PATH (AIX では LIBPATH) 環境変数で使用できることを確認してください。
  1. 次の COBOL ファイル (demo4.cbl) を作成します。
          $set nsymbol(national) 
           >>JAVA-CALLABLE
           program-id. "demo4".
           working-storage section.
           >>JAVA-SHAREABLE ON
           01 Int1 pic 9(9) comp-5 value 10.
           01 Alpha1 pic x(100) value "Pink".
           01 Group1.
              03 colour1 pic x(10) occurs 10 value "Red" "Green" "Blue".
           01 Num1 pic S9(5)v9(5) comp-3 value 3141.59265.
           01 Nat1 pic n(20) value n"Unicode" national.
           >>JAVA-SHAREABLE OFF
           01 ed-num1 pic +9(5).9(5).
           procedure division.
               display "--In COBOL Program demo4--"
               display "Int1= " Int1
               display "Alpha1= " Alpha1
               display "colour1(1)= "colour1(1)
               display "colour1(2)= "colour1(2)
               display "colour1(3)= "colour1(3)
               move num1 to ed-num1
               display "Num1= " ed-num1
               display "Nat1= " Nat1
           goback.
  2. 次の COBOL ファイル (demo5.cbl) を作成します。
          $set nsymbol(national) 
           >>JAVA-CALLABLE
           program-id. "demo5".
           working-storage section.
           >>JAVA-SHAREABLE ON
           01 Group1.
              03 Group2.
                05 item1 pic x(10) value "Purple".
                05 Group3.
                  07 item2 pic x(10) value "Green".
           >>JAVA-SHAREABLE OFF
           01 3item pic 9(10).
           procedure division.
               display "--In COBOL Program demo5--"
               display "Item1= " item1
               display "Item2= " item2
           goback.
  3. 現在の作業フォルダーに src4 サブフォルダーを作成します。
  4. 必要な Java 固有の指令を使用して demo4.cbl ファイルをコンパイルします。

    Windows:

    cobol demo4.cbl java-package-name(com.mycompany.demo4) java-output-path(src4);

    UNIX:

    cob demo4.cbl -yc -C "java-package-name(com.mycompany.demo4) java-output-path(src4)"  

    COBOL ライブラリ ファイル (UNIX のみ) が生成され、そのサポート クラス ファイルが com.mycompany.demo4 パッケージ名を使用して生成されて src4 フォルダーに配置されます。

  5. 必要な Java 固有の指令を使用して demo5.cbl ファイルをコンパイルします。

    Windows:

    cobol demo5.cbl java-package-name(com.mycompany.demo4) java-output-path(src4);

    UNIX:

    cob demo5.cbl -yc -C "java-package-name(com.mycompany.demo4) java-output-path(src4)"  

    COBOL ライブラリ ファイル (UNIX のみ) が生成され、そのサポート クラス ファイルが com.mycompany.demo4 パッケージ名を使用して生成されて src4 フォルダーに配置されます。

  6. コンパイルされたオブジェクト ファイルから必要なライブラリ ファイルを作成します。

    Windows:

    cbllink -D -Oapp4 demo4.obj demo5.obj

    app4.dll ライブラリ ファイルが生成されます。

    UNIX:

    cob -yo libapp4.so demo4.o demo5.o  -Q -znoexecstack 
    注: AIX プラットフォームの場合、-Q -znoexecstack フラグは省略します。

    libapp4.so ライブラリ ファイルが生成されます。

  7. genjava ユーティリティを使用して、必要な progs.java ファイルと strg.java ファイルを作成します。

    Windows:

    genjava app4 -p demo4 demo5 -s demo4 demo5 -o src4 -k com.mycompany.demo4

    UNIX:

    genjava libapp4 -p demo4 demo5 -s demo4 demo5 -o src4 -k com.mycompany.demo4
    注: 複数の COBOL ファイルを呼び出してデータを共有できるようにするため、JAVA-GEN-PROGS 指令と JAVA-GEN-STRG 指令ではなく genjava ユーティリティを使用する必要があります。
  8. 次の Java ソース ファイル (Demo4.java) を作成します。
    import com.mycompany.demo4.*;
    import java.math.BigDecimal;
    
    public class Demo4
    {
        public static void main(String[] args)
        {
          System.out.println("--Java--");
          int i = strg.demo4.Int1.get();
          System.out.println("Int1= " + i);
          strg.demo4.Int1.put(10201);
    
          String s = strg.demo4.Alpha1.get();
          System.out.println("Alpha1= " + s);
          strg.demo4.Alpha1.put("Purple");
    
          strg.demo4.Group1.colour1[2].put("Yellow");
          strg.demo4.Group1.colour1[3].put("Cyan");
    
          BigDecimal num1 = strg.demo4.Num1.get();
          System.out.println("Num1= " + num1);
          strg.demo4.Num1.put(new BigDecimal("1579.1113"));
    
          String n = strg.demo4.Nat1.get();
          System.out.println("Nat1= " + n);
          strg.demo4.Nat1.put("abcdeFGHIJ");
    
          String i1 = strg.demo5.Group1.Group2.item1.get();
          System.out.println("Item1= " + i1);
          strg.demo5.Group1.Group2.item1.put("Orange");
    
          String i2 = strg.demo5.Group1.Group2.Group3.item2.get();
          System.out.println("Item1= " + i2);
          strg.demo5.Group1.Group2.Group3.item2.put("Yellow");
    
          progs.demo4();
          progs.demo5();
        }
    }

    この Java コードにより、COBOL のコンパイルで使用したネームスペースがインポートされます。現在の作業フォルダーと src4 フォルダーが CLASSPATH にあることを確認してください。

  9. Java バイトコードをコンパイルして実行します。
    javac Demo4.java
    java Demo4
    [/task/taskbody/steps/step/info/div {"- topic/div "})
    注: 一部の Linux プラットフォームでは、-Xrs オプションを使用して Java バイトコードを実行する必要がある場合があります。115 Unexpected signal (Signal 4) エラー メッセージが表示される場合は、このオプションを使用してください。
    (div]

    次の出力が生成されます。

    --Java--
    Int1= 10
    Alpha1= Pink
    Num1= 3141.59265
    Nat1= Unicode
    Item1= Purple
    Item1= Green
    --In COBOL Program demo4--
    Int1= 0000010201
    Alpha1= Purple
    colour1(1)= Red
    colour1(2)= Green
    colour1(3)= Yellow
    Num1= +01579.11130
    Nat1= abcdeFGHIJ
    --In COBOL Program demo5--
    Item1= Orange
    Item2= Yellow

    このコードおよび出力は、Java プログラムが COBOL プログラム内の作業場所節データにアクセスし、COBOL 項目の値を使用して Java 変数を宣言していることを示しています。Java コードは両方の COBOL プログラムも呼び出しています。