COBOL および JNI

Java プログラムからの COBOL プログラムの呼び出し

Java(TM) プログラムから COBOL プログラムを呼び出すには、以下のステップを実行してください。

COBOL プログラムのコーディング

このセクションでは、Java プログラムによって呼び出される COBOL プログラムをコーディングする方法について説明します。 ガイドラインを 2 つの COBOL プログラム例で示します。 後のセクションで、これらの COBOL プログラムと対話する 2 つの Java プログラムを示します。

COBOL プログラムを Java プログラムで呼び出す場合には、以下のようにしてください。

  1. PROCESS ステートメントの NOMONOPRC (大文字小文字を区別する名前に備えて) およびオプション THREAD(SERIALIZE) を使用します。 COBOL プログラムは、Java プログラムから呼び出されると、Java スレッド内で実行します。 バイナリー・データ項目の内容を保存するには、 NOSTDTRUNC Process オプションを指定します。
  2. 以下から構成される名前を使用して COBOL プログラムを識別してください。
  3. 事前定義インターフェース関数テーブルをプログラムにコピーします。 事前定義インターフェース関数テーブルのリストについては メンバー JNIを参照してください。
  4. COBOL プログラムから Java プログラムに変数を渡すために、CALL で BY VALUE 句を指定します。 以下の引き数を以下の順序で受け取ります。
    1. JNI インターフェース・ポインター
    2. Java クラス (静的ネイティブ・メソッドの場合) またはオブジェクト (非静的ネイティブ・メソッドの場合) への参照
    3. 必要なすべての追加の引き数。 これらの引き数は、通常の Java メソッドの引き数に対応します。
    COBOL と Java のデータ・タイプは完全に等価ではないことに注意してください。 COBOL および Java のデータ・タイプを参照してください。
図 61. COBOL プログラム HELLO
  PROCESS NOMONOPRC NOSTDTRUNC OPTIONS THREAD(SERIALIZE).      1 

*** COBOL native program called from Java
*** static method

  IDENTIFICATION DIVISION.
  PROGRAM-ID.    "Java_Hello_displayHello".     2 
  Author.
  INSTALLATION.   IBM Toronto Lab.
  DATE-WRITTEN.
  DATE-COMPILED.

  ENVIRONMENT DIVISION.
  CONFIGURATION SECTION.
  SOURCE-COMPUTER.    IBM-ISERIES
  OBJECT-COMPUTER.    IBM-ISERIES

  INPUT-OUTPUT SECTION.
  FILE-CONTROL.

  DATA DIVISION.
  FILE SECTION.
  WORKING-STORAGE SECTION.

  01 IS-COPY     PIC 1.
  01 NAME-PTR            USAGE POINTER.
  01 NAME-LENGTH PIC 9(4) BINARY.
  01 I           PIC 9(4) BINARY.

  01 NAME-X.
       05 CHAR-X OCCURS 20 TIMES PIC X.

  LINKAGE SECTION.

*** JNI interface function table

  COPY JNI.      3 

  01 NAME.
       05 CHAR OCCURS 20 TIMES PIC N USAGE NATIONAL.

  01 ENV-PTR              USAGE POINTER.
  01 CLASS-REF   PIC S9(9) BINARY.
  01 TITLE-CODE  PIC S9(9) BINARY.
  01 NAME-REF    PIC S9(9) BINARY.

  01 INTERFACE-PTR        USAGE POINTER.
  PROCEDURE DIVISION USING BY VALUE ENV-PTR      4a 
                                    CLASS-REF    4b 
                                    TITLE-CODE   4c 
                                    NAME-REF.    4c 

 MAIN-LINE SECTION.
 MAIN-PROGRAM-LOGIC.

             SET ADDRESS OF INTERFACE-PTR TO ENV-PTR.
             SET ADDRESS OF JNI-NATIVE-INTERFACE TO INTERFACE-PTR.

*** Callback JNI interface function GET-STRING-LENGTH to
*** retrieve the name length

             CALL GET-STRING-LENGTH USING BY VALUE ENV-PTR      4 
                                                   NAME-REF
                                    RETURNING INTO NAME-LENGTH.

*** Callback JNI interface function GET-STRING-CHARS to
*** retrieve the name characters

              CALL GET-STRING-CHARS USING BY VALUE ENV-PTR      4 
                                                   NAME-REF
                                                   IS-COPY
                                    RETURNING INTO NAME-PTR.

             SET ADDRESS OF NAME TO NAME-PTR.
             INITIALIZE NAME-X.

             PERFORM VARYING I FROM 1 BY 1 UNTIL (I > NAME-LENGTH)
                   MOVE CHAR(I) TO CHAR-X(I)
             END-PERFORM.

             EVALUATE TITLE-CODE
                   WHEN  1
                               DISPLAY "Hello, Mr. ", NAME-X
                   WHEN  2
                               DISPLAY "Hello, Ms. ", NAME-X
                   WHEN OTHER
                               DISPLAY "Hello, ", NAME-X
             END-EVALUATE.

             GOBACK.
図 62. COBOL プログラム BYE
  PROCESS NOMONOPRC NOSTDTRUNC OPTIONS THREAD(SERIALIZE).      1 

*** COBOL native program called from Java
*** instance method

  IDENTIFICATION DIVISION.
  PROGRAM-ID.    "Java_Bye_displayBye".      2 
  Author.
  INSTALLATION.   IBM Toronto Lab.
  DATE-WRITTEN.
  DATE-COMPILED.

  ENVIRONMENT DIVISION.
  CONFIGURATION SECTION.
  SOURCE-COMPUTER.    IBM-ISERIES
  OBJECT-COMPUTER.    IBM-ISERIES

  INPUT-OUTPUT SECTION.
  FILE-CONTROL.

  DATA DIVISION.
  FILE SECTION.

  WORKING-STORAGE SECTION.

  01 IS-COPY     PIC 1.
  01 NAME-PTR            USAGE POINTER.
  01 NAME-LENGTH PIC 9(4) BINARY.
  01 I           PIC 9(4) BINARY.

  01 NAME-X.
       05 CHAR-X OCCURS 20 TIMES PIC X.

  LINKAGE SECTION.

*** JNI interface function table

  COPY JNI.      3 

  01 NAME.
       05 CHAR OCCURS 20 TIMES PIC N USAGE NATIONAL.

  01 ENV-PTR              USAGE POINTER.
  01 OBJECT-REF  PIC S9(9) BINARY.
  01 TITLE-CODE  PIC S9(9) BINARY.
  01 NAME-REF    PIC S9(9) BINARY.

  01 INTERFACE-PTR        USAGE POINTER.
  PROCEDURE DIVISION USING BY VALUE ENV-PTR      4 
                                    OBJECT-REF
                                    TITLE-CODE
                                    NAME-REF.

  MAIN-LINE SECTION.
  MAIN-PROGRAM-LOGIC.

               SET ADDRESS OF INTERFACE-PTR TO ENV-PTR.
               SET ADDRESS OF JNI-NATIVE-INTERFACE TO INTERFACE-PTR.

*** Callback JNI interface function GET-STRING-LENGTH to
*** retrieve the name length

               CALL GET-STRING-LENGTH USING BY VALUE ENV-PTR      4 
                                                     NAME-REF
                                      RETURNING INTO NAME-LENGTH.

*** Callback JNI interface function GET-STRING-CHARS to
*** retrieve the name characters

              CALL GET-STRING-CHARS USING BY VALUE ENV-PTR      4 
                                                   NAME-REF
                                                   IS-COPY
                                    RETURNING INTO NAME-PTR.

               SET ADDRESS OF NAME TO NAME-PTR.
               INITIALIZE NAME-X.

               PERFORM VARYING I FROM 1 BY 1 UNTIL (I > NAME-LENGTH)
                       MOVE CHAR(I) TO CHAR-X(I)
               END-PERFORM.

               EVALUATE TITLE-CODE
                      WHEN  1
                                  DISPLAY "Bye, Mr. ", NAME-X
                      WHEN  2
                                  DISPLAY "Bye, Ms. ", NAME-X
                      WHEN  OTHER
                                  DISPLAY "Bye, ", NAME-X
               END-EVALUATE.

               GOBACK.
COBOL モジュールの作成

COBOL モジュールを作成するには、以下の 2 つの画面の例に示すように、 CRTCBLMOD コマンドを使用します。

                         COBOL モジュールの作成 (CRTCBLMOD)

 選択項目を入力して、実行キーを押してください。

 モジュール . . . . . . . . . . . > BYE           名前 , *PGMID
  ライブラリー. . . . . . . . . . >   *CURLIB     名前 , *CURLIB
 ソース・ファイル . . . . . . . . > QCBLLESRC     名前
   ライブラリー . . . . . . . . . >   *LIBL       名前 , *LIBL, *CURLIB
 ソース・メンバー . . . . . . . . > BYE           名前 , *MODULE
 ソース・ストリーム・ファイル
 生成重大度レベル . . . . . . . .   30            0-30
 テキスト記述 . . . . . . . . . .   *SRCMBRTXT


                            追加のパラメーター

 モジュールの置き換え . . . . . . > *YES          *YES, *NO



                                                                         終わり
 F3= 終了  F4= プロンプト   F5= 最新表示   F10= 追加のパラメーター
 F12= 取り消し     F13= この画面の使用法        F24= キーの続き
                         COBOL モジュールの作成 (CRTCBLMOD)

 選択項目を入力して、実行キーを押してください。

 モジュール . . . . . . . . . . . > HELLO         名前 , *PGMID
  ライブラリー. . . . . . . . . . >   *CURLIB     名前 , *CURLIB
 ソース・ファイル . . . . . . . . > QCBLLESRC     名前
   ライブラリー . . . . . . . . . >   *LIBL       名前 , *LIBL, *CURLIB
 ソース・メンバー . . . . . . . . > HELLO         名前 , *MODULE
 ソース・ストリーム・ファイル
 生成重大度レベル . . . . . . . .   30            0-30
 テキスト記述 . . . . . . . . . .   *SRCMBRTXT


                            追加のパラメーター

 モジュールの置き換え . . . . . . > *YES          *YES, *NO



                                                                         終わり
 F3= 終了  F4= プロンプト   F5= 最新表示   F10= 追加のパラメーター
 F12= 取り消し     F13= この画面の使用法        F24= キーの続き
サービス・プログラムの作成

以下に示したように、CRTSRVPGM コマンドを使用して、1 つまたは複数のモジュールを 1 つのサービス・プログラムにバインドします。 EXPORT オプションを指定してください。

                       サービス・プログラムの作成 (CRTSRVPGM)

 選択項目を入力して、実行キーを押してください。

 サービス・プログラム . . . . . . SRVPGM       > HELLOBYE
   ライブラリー . . . . . . . . .              >   *CURLIB
 モジュール . . . . . . . . . . . MODULE       > HELLO
   ライブラリー . . . . . . . . .              >   *CURLIB
                           値の続きは +        > BYE
                                               >   *CURLIB
 エクスポート . . . . . . . . . . EXPORT       > *ALL
 ソース・ファイルのエクスポート . SRCFILE        QSRVSRC
   ライブラリー   . . . . . . . .                  *LIBL
 ソース・メンバーのエクスポート . SRCMBR         *SRVPGM
 テキスト '記述'  . . . . . . . . TEXT           *BLANK





                                                                        続く...
 F3= 終了   F4= プロンプト   F5= 最新表示   F12= 取り消し
 F13= この画面の使用法       F24= キーの続き
Java プログラムのコーディング

このセクションでは、COBOL プログラムを呼び出す Java プログラムをコーディングする方法について説明します。 上記の COBOL プログラムを呼び出す 2 つの Java プログラム例で、ガイドラインを示します。

Java ソース・ファイルは統合ファイル・システム (IFS) に保管されています。 これらのファイルは、ストリーム・ファイル・エディターである EDTF を使用して編集することができます。

Java プログラムで COBOL プログラムを呼び出すには、以下のステップを実行してください。

  1. システム・メソッド System.loadLibrary に対して静的初期設定呼び出しを行って、前のステップで作成した COBOL サービス・プログラムをロードします。 (この例では、サービス・プログラムの名前は HELLOBYE です。)
  2. キーワード native を使用して COBOL メソッドを宣言します。 ネイティブ・メソッドの本文として、セミコロンのみを指定します。 これは、インプリメンテーションが省略されていることを示します。

    短い名前 (引き数シグニチャーがない名前) を指定することができます。 JVM は、この名前を持つメソッドをネイティブ・ライブラリーで探します。 見つからない場合、JVM はロング・ネームを探します。 別のネイティブ・メソッドを多重定義したい場合には、ロング・ネームを使用してください。 ネイティブ・メソッドが Java メソッドと同じ名前を持っている場合には、Java メソッドはネイティブ・ライブラリーに存在していないので、ロング・ネームを指定する必要はありません。

図 63. Java プログラム Hello.java
 class Hello {
         static {
                 System.loadLibrary("HELLOBYE");      1 
         }

         static native void displayHello(int parm1, String parm2);      2 

         public static void main(String[ ] args) {
               int titleCode;
               String name;

               switch (args.length) {
               case 1:
                            titleCode = Integer.parseInt(args[0]);
                            name = "Someone";
                            break;
               case 2:
                            titleCode = Integer.parseInt(args[0]);
                            name = args[1];
                            break;
               default:
                            titleCode = 0;
                            name = "Someone";
                            break;
               }
               displayHello(titleCode, name);
               Bye bye = new Bye( );
               bye.displayBye(titleCode, name);
         }
 }
図 64. Java プログラム Bye.java
 class Bye {
          static {
                  System.loadLibrary("HELLOBYE");      1 
          }
          static native void displayBye(int parm1, String parm2);      2 
 }
Java プログラムのコンパイル

Java ソース・プログラムをコンパイルするために、Qshell インタープリター (QSH) を開始して、以下のコマンドを実行することができます。

javac Hello.java

javac Bye.java
Java プログラムの起動

Java ソース・プログラムを起動するために、Qshell インタープリター (QSH) を開始して、以下のコマンドを実行することができます。

>java Hello
Hello, Someone
Bye, Someone
>java Hello 1
Hello, Mr. Someone
Bye, Mr. Someone
>java Hello 2 USA
Hello, Ms. USA
Bye, Ms. USA 

javah ツールを使用すれば、Java プログラムのヘッダー・ファイルを生成することができます。 これらのヘッダー・ファイルは、COBOL コンパイラーではなく、C および C++ コンパイラーによって使用されますが、ネイティブ・プログラムの命名を検査する場合に役立ちます。

javah -jni Hello

javah -jni Bye

COBOL プログラムからの Java メソッドの呼び出し

COBOL プログラムから Java メソッドを呼び出すには、以下のステップを実行してください。

COBOL プログラムのコーディング

このセクションでは、Java メソッドを呼び出す COBOL プログラムをコーディングする方法について説明します。 ガイドラインを、COBOL プログラム例と Java プログラム例で示します。

COBOL プログラムで Java メソッドを呼び出す場合には、以下のようにしてください。

  1. PROCESS ステートメントの NOMONOPRC (大文字小文字を区別する名前に備えて) およびオプション THREAD(SERIALIZE) を使用します。
  2. JDKINIT および JNI メンバーをコピーします。 これらのメンバーのリストについては メンバー JNIおよび メンバー JDK11INITを参照してください。
  3. 適切な Java 呼び出し API 関数を呼び出します。 以下の API 関数が使用可能です。

    このような呼び出し API 関数に関連するパラメーターの詳細については、「Java Native Interface Specification Release 1.1 (Revised May, 1997)」を参照してください。

    以下の例で、

    1. JVM 用のクラスパスを指定します。
    2. JVM が起動されます。
    3. DestroyJavaVM() プロシージャーが JVM をアンロードし、そのリソースを再利用します。

COBOL プログラム HELLOWORLD

       PROCESS MAP NOMONOPRC OPTIONS THREAD(SERIALIZE).     1 

       Author.
       INSTALLATION.   IBM Toronto Lab.
       DATE-WRITTEN.
       DATE-COMPILED.

       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SOURCE-COMPUTER.    IBM-ISERIES.
       OBJECT-COMPUTER.    IBM-ISERIES.

       INPUT-OUTPUT SECTION.
       FILE-CONTROL.

       DATA DIVISION.
       FILE SECTION.

       WORKING-STORAGE SECTION.

      *** JDK 1.2 VM initialization arguments

       01 VM-INIT-ARGS.
          05  VERSION             PIC S9(9) BINARY VALUE 65538.
          05  NUMBER-OF-OPTIONS   PIC S9(9) BINARY.
          05  OPTIONS-PTR                          USAGE POINTER.
          05  FILLER              PIC  X(1).

       01 VM-OPTIONS.
          05  OPTIONS-STRING-PTR                   USAGE POINTER.
          05  EXTRA-INFO-PTR                       USAGE POINTER.

      ***

       01 JVM-PTR                           USAGE POINTER.
       01 ENV-PTR                           USAGE POINTER.

       01 RC1                     PIC S9(9) BINARY VALUE 1.
       01 RC2                     PIC S9(9) BINARY VALUE 1.
       01 RC3                     PIC S9(9) BINARY VALUE 1.

       01 CLASS-NAME              PIC X(30).
       01 CLASS-NAME-PTR                    USAGE POINTER.

       01 METHOD-NAME             PIC X(30).
       01 METHOD-NAME-PTR                   USAGE POINTER.

       01 SIGNATURE-NAME          PIC X(30).
       01 SIGNATURE-NAME-PTR                USAGE POINTER.


      *** CLASSPATH Parameters
       01 CLASSPATH               PIC X(500).

      *** Object Reference Variables
       01 MY-CLASS-REF            PIC S9(9) BINARY.
       01 STRING-CLASS-REF        PIC S9(9) BINARY.
       01 METHOD-ID               PIC S9(9) BINARY.
       01 INIT-METHOD-ID          PIC S9(9) BINARY.
       01 STATIC-METHOD-ID        PIC S9(9) BINARY.
       01 OBJECT-REF              PIC S9(9) BINARY.
       01 ARG-REF                 PIC S9(9) BINARY.
       01 STRING-REF              PIC S9(9) BINARY.

      *** Parameter Array for calling METHODA
       01 PARM-ARRAY.
          05 PARM-ARRAY-ELEMENT OCCURS 10 TIMES.
             10 PARM-ARRAY-ELEMENT-VALUE  PIC S9(9) BINARY.
             10 FILLER                    PIC X(4).

       01 PARM-ARRAY-PTR                    USAGE POINTER.


       LINKAGE SECTION.

      *** JNI interface function table

       COPY JNI.    2 

     
       01 INTERFACE-PTR                     USAGE POINTER.
       01 JVM                     PIC S9(9) BINARY.


       PROCEDURE DIVISION.

       MAIN-LINE SECTION.
       MAIN-PROGRAM-LOGIC.

      *** In V5R3, the procedure call JNI_GetDefaultJavaVMInitArgs
      *** is no longer required.
      *** Retrieve default JVM initiliazion arguments
      *
      *      SET VM-ARGS-PTR TO ADDRESS OF VM-INIT-ARGS.
      *      CALL PROCEDURE "JNI_GetDefaultJavaVMInitArgs"
      *           USING VM-INIT-ARGS
      *           RETURNING INTO RC1.
      *
      *      DISPLAY RC1.
      *
      *** Append my classpath (:/home/myclass) to CLASSPATH
      *
      *      SET ADDRESS OF CLASSPATH-DEFAULT TO CLASSPATH.
      *

             STRING FUNCTION UTF8STRING("-Djava.class.path=/home/myclass")
 3a                           DELIMITED BY SIZE
                    X"00" DELIMITED BY SIZE
               INTO CLASSPATH

             SET OPTIONS-STRING-PTR TO ADDRESS OF CLASSPATH.
             MOVE 1 TO NUMBER-OF-OPTIONS.
             SET OPTIONS-PTR TO ADDRESS OF VM-OPTIONS.

      *** Load and initializes the Java VM
 3b 
             CALL PROCEDURE "JNI_CreateJavaVM"
                  USING JVM-PTR ENV-PTR VM-INIT-ARGS
                  RETURNING INTO RC2.

             DISPLAY RC2.

             SET ADDRESS OF INTERFACE-PTR TO ENV-PTR.
             SET ADDRESS OF JNI-NATIVE-INTERFACE TO INTERFACE-PTR.

      *** Callback JNI interface function FIND-CLASS "HelloWorld"

             STRING FUNCTION UTF8STRING("HelloWorld") DELIMITED BY SIZE
                    X"00" DELIMITED BY SIZE
               INTO CLASS-NAME.

             SET CLASS-NAME-PTR TO ADDRESS OF CLASS-NAME.

             CALL FIND-CLASS USING BY VALUE ENV-PTR
                                            CLASS-NAME-PTR
                             RETURNING INTO MY-CLASS-REF.

             DISPLAY MY-CLASS-REF.

      *** Callback JNI interface function FIND-CLASS "java/lang/String"

             STRING FUNCTION UTF8STRING("java/lang/String")
                          DELIMITED BY SIZE
                    X"00" DELIMITED BY SIZE
               INTO CLASS-NAME.

             SET CLASS-NAME-PTR TO ADDRESS OF CLASS-NAME.

             CALL FIND-CLASS USING BY VALUE ENV-PTR
                                            CLASS-NAME-PTR
                             RETURNING INTO STRING-CLASS-REF.

             DISPLAY STRING-CLASS-REF.

      *** Callback JNI interface function GET-METHOD-ID "<init>"
      *** to retrieve constructor method ID

             STRING FUNCTION UTF8STRING("<init>") DELIMITED BY SIZE
                    X"00" DELIMITED BY SIZE
               INTO METHOD-NAME.

             STRING FUNCTION UTF8STRING("()V") DELIMITED BY SIZE
                    X"00" DELIMITED BY SIZE
               INTO SIGNATURE-NAME.

             SET METHOD-NAME-PTR TO ADDRESS OF METHOD-NAME.
             SET SIGNATURE-NAME-PTR TO ADDRESS OF SIGNATURE-NAME.

             CALL GET-METHOD-ID USING BY VALUE ENV-PTR
                                               MY-CLASS-REF
                                               METHOD-NAME-PTR
                                               SIGNATURE-NAME-PTR
                                RETURNING INTO INIT-METHOD-ID.

             DISPLAY INIT-METHOD-ID.

      *** Callback JNI interface function NEW-OBJECT "HelloWorld"

             CALL NEW-OBJECT USING BY VALUE ENV-PTR
                                            MY-CLASS-REF
                                            INIT-METHOD-ID
                             RETURNING INTO OBJECT-REF.

             DISPLAY OBJECT-REF.

      *** Callback JNI interface function GET-STATIC-METHOD-ID "main"

             STRING FUNCTION UTF8STRING("main") DELIMITED BY SIZE
                    X"00" DELIMITED BY SIZE
               INTO METHOD-NAME.

             STRING FUNCTION UTF8STRING("([Ljava/lang/String;)V")
                          DELIMITED BY SIZE
                    X"00" DELIMITED BY SIZE
               INTO SIGNATURE-NAME.

             SET METHOD-NAME-PTR TO ADDRESS OF METHOD-NAME.
             SET SIGNATURE-NAME-PTR TO ADDRESS OF SIGNATURE-NAME.

             CALL GET-STATIC-METHOD-ID USING BY VALUE ENV-PTR
                                                      MY-CLASS-REF
                                                      METHOD-NAME-PTR
                                                      SIGNATURE-NAME-PTR
                                       RETURNING INTO STATIC-METHOD-ID.

             DISPLAY STATIC-METHOD-ID.

      *** Callback JNI interface function NEW-OBJECT-ARRAY

             CALL NEW-OBJECT-ARRAY USING BY VALUE ENV-PTR
                                                  0
                                                  STRING-CLASS-REF
                                                  0
                                   RETURNING INTO ARG-REF.

             DISPLAY ARG-REF.

      *** Callback JNI interface function CALL-STATIC-VOID-METHODA

             SET PARM-ARRAY-PTR TO ADDRESS OF PARM-ARRAY.

             INITIALIZE PARM-ARRAY.

             MOVE ARG-REF TO PARM-ARRAY-ELEMENT-VALUE(1).

             CALL CALL-STATIC-VOID-METHODA USING BY VALUE ENV-PTR
                                                          MY-CLASS-REF
                                                        STATIC-METHOD-ID
                                                          PARM-ARRAY-PTR.

      *** Callback JNI interface function GET-METHOD-ID "display"

             STRING FUNCTION UTF8STRING("display") DELIMITED BY SIZE
                    X"00" DELIMITED BY SIZE
               INTO METHOD-NAME.

             STRING FUNCTION UTF8STRING("([II)V") DELIMITED BY SIZE
                    X"00" DELIMITED BY SIZE
               INTO SIGNATURE-NAME.

             SET METHOD-NAME-PTR TO ADDRESS OF METHOD-NAME.
             SET SIGNATURE-NAME-PTR TO ADDRESS OF SIGNATURE-NAME.

             CALL GET-METHOD-ID USING BY VALUE ENV-PTR
                                               MY-CLASS-REF
                                               METHOD-NAME-PTR
                                               SIGNATURE-NAME-PTR
                                RETURNING INTO METHOD-ID.

             DISPLAY METHOD-ID.

      *** Callback JNI interface function NEW-INT-ARRAY

             CALL NEW-INT-ARRAY USING BY VALUE ENV-PTR
                                               10
                                RETURNING INTO ARG-REF.

             DISPLAY ARG-REF.

      *** Callback JNI interface function CALL-VOID-METHODA

             SET PARM-ARRAY-PTR TO ADDRESS OF PARM-ARRAY.

             INITIALIZE PARM-ARRAY.

             MOVE ARG-REF TO PARM-ARRAY-ELEMENT-VALUE(1).
             MOVE 2       TO PARM-ARRAY-ELEMENT-VALUE(2).

             CALL CALL-VOID-METHODA USING BY VALUE ENV-PTR
                                                   OBJECT-REF
                                                   METHOD-ID
                                                   PARM-ARRAY-PTR.

      *** Destroy the Java VM
 3c 

             SET ADDRESS OF JVM TO JVM-PTR.

             CALL PROCEDURE "DestroyJavaVM"
                  USING JVM
                  RETURNING INTO RC3.

             DISPLAY RC3.

             GOBACK.


COBOL プログラムの作成

COBOL モジュールを作成するには、以下に示したように CRTBNDCBL コマンドを使用します。

                     バインド COBOL PGM の作成 (CRTBNDCBL)

 選択項目を入力して、実行キーを押してください。

 プログラム . . . . . . . . . . . > HELLOWORLD    名前, *PGMID
   ライブラリー. . . . . . . . .      *CURLIB     名前, *CURLIB
 ソース・ファイル . . . . . . . . > QCBLLESRC     名前
   ライブラリー . . . . . . . . . >   *CURLIB     名前, *LIBL, *CURLIB
 ソース・メンバー . . . . . . . . > HELLOWORLD    名前, *PGM
 ソース・ストリーム・ファイル
 生成重大度レベル . . . . . . . .   30            0-30
 テキスト記述 . . . . . . . . . .   *SRCMBRTXT


                            追加のパラメーター

 プログラムの置き換え . . . . . . > *YES          *YES, *NO



                                                                         終わり
 F3= 終了  F4= プロンプト   F5= 最新表示   F10= 追加のパラメーター
 F12= 取り消し     F13= この画面の使用法        F24= キーの続き
Java プログラムのコーディング
図 65. Java プログラム HelloWorld.java
class HelloWorld {

     public static void main(String[] args) {

          System.out.println("Hello World");

     }

     void display(int[] args, int i) {

          System.out.println("Length of integer array is " + args.length);
          System.out.println("Value of integer variable is " + i);
          System.out.println("Bye World");

     }

}
Java プログラムのコンパイル

Java ソース・プログラムをコンパイルするために、Qshell インタープリター (QSH) を開始して、以下のコマンドを実行することができます。

  javac HelloWorld.java