マネージ COBOL ラッパー クラスの使用例

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

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

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

マネージ プロジェクトを作成します

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

  1. Eclipse で、マネージ COBOL プロジェクトを作成します。[ファイル] > [新規作成] > [COBOL JVM Project] をクリックします。
  2. calclib などの名前を指定し、[Finish] をクリックします。

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

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

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

  4. Name」フィールドの [Calc.cbl] をクリックして、[Finish] をクリックします。

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

  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. プロジェクトに新しいマネージ COBOL クラスを追加します。プロジェクトを右クリックし、[New] > [COBOL JVM Class] をクリックします。

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

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

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

  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 手続き型コード プログラムで使用されるものと同じ comp-5 データ項目を使用する、メソッド Add を定義します。このメソッドは、op1op2 を、マネージ コードで同等の型となる変数 p1p2 にマッピングします。このメソッドは、追加操作を実行する手続き型プログラムを呼び出します。

    他のマネージ言語が元の手続き型プログラムの機能にアクセスするには、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 elementaryoperands を使用すると、すべての基本グループ項目が ClassDTO のプロパティとして公開され、OO 構文 (他のマネージ 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. 手続き型プログラムで他の算術操作のメソッドを書き込めます。

COBOL にマネージ フロントエンド アプリケーションを書き込みます

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

  1. 新しい COBOL JVM プロジェクトを作成します。[New] > [COBOL JVM Project] をクリックします。
  2. OOCalc などの名前を指定し、[Finish] をクリックします。
  3. 新しい COBOL プログラムをプロジェクト Program1.cbl に追加し、それに calclib project でラッパー クラスとやり取りするマネージ 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 を右クリックして、[Properties] をクリックします。
  5. [Micro Focus] > [JVM Build Path] をクリックします。
  6. [Projects] タブをクリックし、[Add] をクリックします。
  7. calclib の前のチェックボックスを有効にし、[OK] をクリックします。

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

    Program1.cbl は、2 つのオブジェクト (calc1 の型のWrapperClass と型 calc2ClassDTO) を定義します。

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

    次に、calc2 のインスタンスが作成され、それは値を割り当てる op1 のプロパティとして公開される op2ClassDTO にアクセスします。追加を実行する AddClassDTO メソッドが呼び出されます。