Java での COBOL の呼び出し (別個のプロジェクト)

次の例では、あるプロジェクトの Java プログラムから別のプロジェクトの COBOL プログラムを呼び出す方法を示します。2 つの引数を COBOL に渡し、戻り値を受け取ります。

同じプロジェクト内にある Java と COBOL を使用する場合は、「Java での COBOL の呼び出し (COBOL/Java 相互運用プロジェクト)」を参照してください。

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

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

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

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

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

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

    3. テキストを次のように置き換えて、プログラムを保存します。
      package com.microfocus.java;
      import com.mycompany.demo3.*;
      
      public class Demo3
      {
          public static void main(String[] args)
          {
            String[] s = {"hello", "there", "pink", "green"};
            int int1 = 23;
            System.out.println("---------demo3---------");
            int[] i = com.mycompany.demo3.progs.demo3(s, int1);
            System.out.println("Hello from Java");
            for (int k=0; k<i.length; k++)
                System.out.println(i[k]);
      
          }
      }

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

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

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

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

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

    3. テキストを次のように置き換えて、プログラムを保存します。
            $set sourceformat(variable)
             >>JAVA-CALLABLE
             program-id. demo3 as "demo3" .
      
             working-storage section.
             01 i pic 9(9) comp-5.
             01 primes.
               03 pic 9(9) comp-5 occurs 10 value 2,3,5,7,11,13,17,19,23,27.
      
             linkage section.
             01 ltable1.
               03 str pic X(100) occurs 4.
             01 lint1 pic 9(9) comp-5.
             01 ltable2.
               03 int1 pic 9(9) comp-5 occurs 10.
             procedure division using ltable1 by value lint1 returning ltable2.
                 perform varying i from 1 by 1 until i > 4
                     display "COBOL " i " " str(i)
                 end-perform
                 display "COBOL " lint1
                 move primes to ltable2
             goback.
             end program demo3.
  5. COBOL プロジェクトのプロパティを設定します。
    1. CCall が選択されていることを確認し、[Project] メニューの [Properties] をクリックします。

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

    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.demo3"
    6. [Apply and Close] をクリックします。

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

  6. JShare で、src フォルダーを右クリックして [Refresh] を選択します。

    ネームスペースを表すフォルダー構造に demo3.native.sig ファイルが表示されます。これは、Java で COBOL プログラムを呼び出すために必要なファイルの 1 つです。

  7. 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] をクリックし、JCall プロジェクトの src フォルダーを選択します。
    6. [Arguments] フィールドにコマンドの引数を次のように入力します。

      <COBOL-Output-Name> -p demo3 -k com.mycompany.demo3

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

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

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

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

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

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

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

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

    6. [Run] をクリックします。
    コンソール ウィンドウに次の出力が生成されます。
    ---------demo3---------
    COBOL 0000000001 hello                                                                                               
    COBOL 0000000002 there                                                                                               
    COBOL 0000000003 pink                                                                                                
    COBOL 0000000004 green                                                                                               
    COBOL 0000000023
    Hello from Java
    2
    3
    5
    7
    11
    13
    17
    19
    23
    27

    コードと出力からわかるように、この Java プログラムでは 2 つの引数を COBOL プログラムに渡しています。それらの引数が COBOL で処理されて表示されます。さらに、COBOL プログラムから値が返され、その値が Java プログラムで処理されます。