JVM COBOL ラッパー クラスの使用例

次の例は、手続き型プログラムをまず JVM COBOL ラッパー クラスでラップすることで、JVM COBOL アプリケーションに公開する方法を示しています。その後、他の マネージ アプリケーションがオブジェクト指向 (OO) 構文を使用して、ラッパー クラスと対話できるようにします。ラッパー クラスは次に、手続き型プログラムと対話します。

ラッパー クラスを書く方法はさまざまあり、この例では、そのうち 2 つを紹介します。

基本的な算術操作を行う、シンプルな手続き型 COBOL プログラム (計算) を使用します。Enterprise Developer を使用して、手続き型プログラムのコードおよびその手続き型コードの JVM COBOL ラッパー クラスを保持する、JVM COBOL プロジェクトを作成します。また、ラッパー クラスを使用して手続き型モジュールとやり取りする、JVM COBOL フロントエンド アプリケーション用のプロジェクトも作成します。

JVM COBOL プロジェクトの作成

まず、手続き型プログラムおよびラッパー クラスを保持する JVM COBOL プロジェクトを作成する必要があります。

  1. Eclipse で、[ファイル > 新規作成 > COBOL JVM Project] をクリックします。
  2. calclib などの名前を指定し、[完了] をクリックします。

    これによって、ワークスペースに calclib プロジェクトが作成されます。このプロジェクトには、COBOL プログラムまたはクラス ファイルは含まれません。

  3. 手続き型コードを保持するプログラムを追加します。プロジェクトを右クリックし、[新規作成 > COBOL Program] をクリックします。

    これによって、[New COBOL Program] ウィザードが開きます。このウィザードで、プロジェクトの src サブフォルダーにプログラムを作成し、それをデフォルト パッケージに追加します。

  4. [名前] フィールドで Calc.cbl を指定し、[完了] をクリックします。

    プロジェクトに新しいプログラムが追加され、そのプログラムがエディターで開かれます。

  5. プログラムのコードを以下のものに置き換えます。
           program-id. Calc.
    
           data division.
           working-storage section.
           
           linkage section.
           01 operands. 
             03 op1 pic 9(4) comp-5.
             03 op2 pic 9(4) comp-5.
           
           01 the-result pic 9(8) comp-5.
           
           01 func-code pic x.
           78 add-op value '+'.
           78 sub-op value '-'.
           78 mult-op value 'x'.
           78 div-op value '/'.
          
           procedure division using by reference func-code operands the-result.
    
               evaluate func-code
                  when add-op
                     add op1 to op2 giving the-result
                  when sub-op
                      subtract op2 from op1 giving the-result
                  when mult-op
                       multiply op1 by op2 giving the-result
                  when div-op 
                        divide op1 by op2 giving the-result
               end-evaluate.
               
               goback.
               
           end program Calc.
    
  6. [ファイル > 保存] をクリックして変更を保存します。

    Eclipse では、デフォルトでプロジェクトを自動的にビルドするように設定されているため、変更を保存するとビルドが開始します。プロジェクトのコンパイル時にエラーは発生しません。

ラッパー クラスの作成

手続き型プログラム用のラッパー クラスの 1 つを作成します。

  1. プロジェクトに新しい JVM COBOL クラスを追加します。プロジェクトを右クリックし、[新規作成 > COBOL JVM Class] をクリックします。

    これによって、[New COBOL JVM Class] ウィザードが起動します。プロジェクトの src サブフォルダーに保存される、デフォルト パッケージのパブリック クラスを作成します。

  2. WrapperClass などの名前を指定し、[完了] をクリックします。

    プロジェクトにファイルが追加され、そのプログラムがエディターで開かれます。

  3. WrapperClass のコードを以下のものに置き換え、ファイルを保存します。
           class-id calclib.WrapperClass.
    
           working-storage section.
    
           method-id Add.
           local-storage section.
           01 operands. 
             03 op1 pic 9(4) comp-5.
             03 op2 pic 9(4) comp-5.
           
           linkage section.
           01 the-result pic 9(8) comp-5.
           
           procedure division using by value p1 as binary-short 
                                             p2 as binary-short
                                             returning the-result.
           
               move p1 to op1
               move p2 to op2
               
               call "calc" using '+' operands the-result
    
               goback.
           end method.
           
         
           end class.

    WrapperClass はメソッド Add を定義します。このメソッドは、手続き型コード プログラムで使用されるものと同じ comp-5 データ項目を使用します。このメソッドは、op1 および op2 を、マネージ コードで同等の型となる変数 p1 および p2 にマッピングします。このメソッドは、追加操作を実行する手続き型プログラムを呼び出します。

    他のマネージ言語が元の手続き型プログラムの機能にアクセスするには、OO 構文を使用して Add メソッドを呼び出します。

  4. 手続き型プログラムの他の 3 つの算術操作のメソッドはこのトピックに含まれていないため、ここでそれらを書き込みます。

プロパティ クラスとしても知られるデータ転送オブジェクト (DTO) を使用する、わずかに異なるラッパー クラスを作成します。他のマネージ言語に渡すため、ラッパー クラスのプロパティとして元のプログラムのデータ項目を公開します。

  1. 新しい COBOL JVM クラス ClassDTO をプロジェクトに追加し、次のコードをそれに貼り付けます。
           class-id calclib.ClassDTO.
           
           working-storage section.
           
           01 operands property all elementary. 
             03 op1 pic 9(4) comp-5.
             03 op2 pic 9(4) comp-5.
             
           method-id Add.
           linkage section.
           01 the-result pic 9(8) comp-5.
           procedure division returning the-result.
           
                call "calc" using '+' operands the-result
           
               goback.
           end method.
           
           end class.

    property all elementary を operands で使用すると、すべての基本グループ項目が ClassDTO のプロパティとして公開され、OO 構文 (他の JVM COBOL プログラムからアクセスする場合、ClassDTO::op1 など) を使用する他のマネージ プログラムからアクセスできます。

    ClassDTO は類似メソッド Add を定義します。このメソッドは、算術操作を実行する手続き型プログラムを呼び出します。

    グループ項目全体における property キーワードの使用の代替方法は、以下のとおり個別データ項目ごとにキーワードを設定することです。

           01 operands. 
             03 op1 pic 9(4) comp-5 property as "Operand1".
             03 op2 pic 9(4) comp-5 property as "Operand2".

    これによって、新しい名前 Operand1 およびOperand2 でクラスのプロパティとして個別データ項目のみ公開します。

  2. 手続き型プログラムで他の算術操作のメソッドを書き込めます。

JVM COBOL のフロントエンド アプリケーションの作成

両方のラッパー クラスとやり取りできる、JVM COBOL のフロントエンド アプリケーションのプロジェクトを作成します。

  1. 新しい COBOL JVM プロジェクトを作成します。[新規作成 > COBOL JVM Project] をクリックします。
  2. OOCalc などの名前を指定し、[完了] をクリックします。
  3. 新しい COBOL プログラムをプロジェクト Program1.cbl に追加し、[パッケージ] フィールドで [OOCalc] を指定していることを確認し、calclib プロジェクトのラッパー クラスとやり取りする JVM COBOL コードを追加します。
           program-id. Program1 as "OOCalc.Program1".
    
           data division.
           working-storage section.
           
           01 calc1 type calclib.WrapperClass.
           01 the-result pic 9(8) comp-5.
           
           01 calc2 type calclib.ClassDTO.
           
    
           procedure division.
            
           
               set calc1 to new type calclib.WrapperClass
               set the-result to calc1::Add(2, 2)
               
           
                set calc2 to new calclib.ClassDTO
                
                set calc2::op1 to 5
                set calc2::op2 to 4
                
                set the-result to calc2::Add
    
               goback.
               
           end program Program1.
    

    自動ビルドは、calclib プロジェクトからのクラス calclib.ClassDTO および calclib.WrapperClass を認識しないため、コードのコンパイルに失敗します。これを解決するには、OOCalc プロジェクトの JVM ビルド パスに calclib プロジェクトを追加する必要があります。

  4. OOCalc を右クリックして、[プロパティ] をクリックします。
  5. [Micro Focus > JVM Build Path] をクリックします。
  6. [プロジェクト] タブをクリックし、[追加] をクリックします。
  7. calclib の前のチェックボックスを有効にし、[OK] をクリックします。

    calclib は OOCalc の JVM ビルド パスにあるため、OOCalc のコードは calclib で定義されたクラスを検出し、以降のビルドが成功します。

    Program1.cbl は、2 つのオブジェクト (型 WrapperClass の calc1 および型 ClassDTO の calc2) を定義します。

    プログラム実行時、このコードは calc1 および calc2 のインスタンスを作成します。そして、このコード例では、calc1 のインスタンスを作成し、追加操作を実行する Add メソッド (WrapperClass) を呼び出す方法が示されています。

    次に、calc2 のインスタンスが作成され、op1 および op2 にアクセスします。これらは、ClassDTO のプロパティとして公開され、値が割り当てられます。その後、Add メソッド (ClassDTO) が呼び出されて追加操作を実行します。