Java での COBOL の呼び出しと COBOL 作業場所節へのアクセス (別個のプロジェクト)

次の例では、あるプロジェクトの Java プログラムから別のプロジェクトの 2 つの COBOL プログラムを呼び出し、それらの共有の作業場所節項目にアクセスして更新する方法を示します。

同じプロジェクト内にある Java と COBOL を使用する場合は、「Java からの COBOL の呼び出しおよび COBOL 作業場所節へのアクセス (COBOL/Java 相互運用プロジェクト)」を参照してください。

この例では、デモンストレーション用に 2 つの新しいプロジェクトを作成しますが、既存のネイティブ COBOL プロジェクトおよび Java プロジェクトを使用するように適応させることもできます。
  1. Java プロジェクトを作成します。
    1. [File > New > Other] をクリックし、[Java] フォルダーから [Java Project] を選択します。

      [Create a Java Project] ウィザードが表示されます。

    2. [Project name] フィールドに「JCallShare」と入力し、プロジェクトに必要な JRE を選択して [Next] をクリックします。
      注: 選択した JRE と作成する COBOL プロジェクトでビット体系が一致している必要があります。
    3. [Libraries] タブで、[Classpath] を選択して [Add Library] をクリックします。
    4. [COBOL JVM Runtime System] をダブルクリックし、[Finish] をクリックします。
    5. [Finish] をクリックします。

    Java パースペクティブを開くように求められた場合は、[No] を選択します。JCallShare プロジェクトが作成されます。COBOL プロジェクトと Java プロジェクトの両方を表示するには、COBOL エクスプローラー ビューを選択し、[View menu] アイコン ([View menu]) をクリックして [Filters and Customization] をクリックします。[Filters and Customization] ダイアログ ボックスが開きます。[Pre-set filters] タブをクリックし、[Non-COBOL projects] をオフにして [OK] をクリックします。

  2. Java プログラム (Demo4.java) を作成します。
    1. COBOL エクスプローラー ビューで JCallShare を選択し、[File > New > Other > Class] をクリックして [Next] をクリックします。
    2. [Source folder] フィールドで JCallShare/src が指定されていることを確認し、[Package] フィールドに「com.microfocus.java」、[Name] フィールドに「Demo4」と入力して [Finish] をクリックします。

      プログラムがエディターで開きます。

    3. テキストを次のように置き換えて、プログラムを保存します。
      package com.microfocus.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();
          }
      }

      自動的にビルドするようにワークスペースが設定されている場合、プログラムがコンパイルされます。自動的にビルドするようにワークスペースが設定されていない場合は、[Project] メニューの [Build Project] をクリックします。この時点では、まだ COBOL プログラムが存在していないためエラーが発生します。これらは以降の手順で解決されます。

  3. ネイティブ COBOL プロジェクトを作成します。
    1. [File > New > COBOL Project] をクリックします。

      [COBOL Project] ウィザードが表示されます。

    2. [Project name] フィールドに「CCallShare」と入力し、[Finish] をクリックします。
      注: 選択したプロジェクト テンプレートと JCallShare プロジェクトで選択した JRE でビット体系が一致している必要があります。
    CCallShare プロジェクトが作成され、ワークスペースに表示されます。
  4. 1 つ目の COBOL プログラム (demo4.cbl) を作成します。
    1. COBOL エクスプローラー ビューで CCallShare プロジェクトを選択し、[File > New > COBOL Program] をクリックします。
    2. [New file name] フィールドに「demo4.cbl」と入力し、[Finish] をクリックします。

      プログラムがエディターで開きます。

    3. テキストを次のように置き換えて、プログラムを保存します。
            $set nsymbol(national) 
             >>JAVA-CALLABLE
             program-id. demo4 as "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.
             end program demo4.
  5. 2 つ目の COBOL プログラム (demo5.cbl) を作成します。
    1. COBOL エクスプローラー ビューで CCallShare プロジェクトを選択し、[File > New > COBOL Program] をクリックします。
    2. [New file name] フィールドに「demo5.cbl」と入力し、[Finish] をクリックします。

      プログラムがエディターで開きます。

    3. テキストを次のように置き換えて、プログラムを保存します。
            $set nsymbol(national) 
             >>JAVA-CALLABLE
             program-id. demo5 as "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.
             end program demo5.
  6. COBOL プロジェクトのプロパティを設定します。
    1. CCallShare が選択されていることを確認し、[Project] メニューの [Properties] をクリックします。

      [Properties for CCallShare] ダイアログ ボックスが表示されます。

    2. [Micro Focus > Build Configurations > Link] を選択します。

      [Link] 設定が表示されます。

    3. 次の設定を変更し、[Apply] をクリックします。

      Windows:

      オプション
      [Target type] [Single Native Library File]

      UNIX:

      オプション
      [Output name] 現在の値の前に「lib」を付加
      [Target type] [Single Native Library File]
      [Callable by non-COBOL applications] [Yes]
      [Multi-threaded] [Yes]
    4. [Micro Focus > Project Settings > COBOL] を選択します。
    5. [Additional directives] フィールドで Ellipsis button をクリックし、次のコンパイラ指令を追加して [OK] をクリックします。
      • java-output-path"<path-to-src-folder-of-Java-project>"
      • java-package-name"com.mycompany.demo4"
    6. [Apply and Close] をクリックします。

      自動的にビルドするようにワークスペースが設定されている場合、プログラムがコンパイルされます。自動的にビルドするようにワークスペースが設定されていない場合は、[Project] メニューの [Build Project] をクリックします。これで、2 つのプロジェクトがエラーなしでビルドされるはずです。

  7. JCallShare プロジェクトで、src フォルダーを右クリックして [Refresh] を選択します。 ネームスペースを表すフォルダー構造に demo4.native.sigdemo5.native.sigdemo4ws.java、および demo5ws.java の各ファイルが表示されます。これらは、Java で COBOL プログラムを呼び出して COBOL データ項目を操作するために必要なファイルです。
  8. genjava ユーティリティを構成します。 genjava ユーティリティは、COBOL プログラムと相互運用するいくつかの Java 成果物を生成するために必要です。
    1. [Run] メニューの [External Tools] をポイントし、[External Tools Configurations] を選択します。

      [Create, manage, and run configurations] ダイアログ ボックスが表示されます。

    2. [Program] をダブルクリックします。

      新しい構成が表示されます。

    3. [Name] フィールドに「genjava」と入力します。
    4. [Location] フィールドで [Browse File System] をクリックし、genjava ユーティリティのフル パスと実行可能ファイル名を選択します。

      デフォルトでは、実行可能ファイル (genjava) は製品インストール フォルダーの bin サブフォルダーにあります。

    5. [Working Directory] フィールドで [Browse Workspace] をクリックし、JCallSharesrc フォルダーを選択します。
    6. [Arguments] フィールドにコマンドの引数を次のように入力します。

      <COBOL-Output-Name> -p demo4 demo5 -s demo4 demo5 -k com.mycompany.demo4

    7. [Run] をクリックします。

      JCallSharesrc フォルダーを再度更新すると、progs.java ファイルと strg.java ファイルが追加されます。

  9. 実行構成を作成し、アプリケーションを実行します。
    1. JCallShare を右クリックし、[Run As > Run Configurations] を選択します。

      [Run Configurations] ダイアログ ボックスが表示されます。

    2. 左側のペインで [Java Application] 起動構成タイプをダブルクリックします。

      新しい構成が右側のペインに表示されます。

    3. [Name] フィールドに構成の名前を入力します。
    4. [Main class] フィールドに「com.microfocus.java.Demo4」と入力します。
    5. [Arguments] タブをクリックし、[VM arguments] フィールドに次のように入力します。
      -Djava.library.path=<path-to-COBOL-project-output-folder> 

      <path-to-COBOL-project-output-folder> は、CCallShare プロジェクトの出力フォルダーのフル パス名に置き換えます。

    6. [Run] をクリックします。
    コンソール ウィンドウに次の出力が生成されます。
    --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 プログラムでは 2 つの引数を COBOL プログラムに渡しています。それらの引数が COBOL で処理されて表示されます。さらに、COBOL プログラムから値が返され、その値が Java プログラムで処理されます。