Java Native Interface (JNI) は、COBOL と Java を併用するアプリケーションを開発する際に使用できる多くの呼び出し可能サービスを提供します。このサービスへの アクセスを円滑に行うには、COBOL プログラムの LINKAGE SECTION に JNI.cpy を コピーします。
この JNI.cpy コピーブックには、以下の定義が含まれています。
次の図に示すように、JNI 環境ポインターからの 2 つのレベルの 間接化技法によって JNI 環境構造を取得します。

特殊レジスター JNIEnvPtr を使用して、JNI 環境ポインターを参照し、JNI 環境構造のアドレスを取得します。JNIEnvPtr は、USAGE POINTER として暗黙的に定義されます。それを受取データ項目として使用することは できません。JNI 環境構造の内容を参照する前に、以下のステートメントをコーディングして、そのアドレス可能度を確立する必要があります。
Linkage section.
COPY JNI
. . .
Procedure division.
Set address of JNIEnv to JNIEnvPtr
Set address of JNINativeInterface to JNIEnv
. . .
上記コードは、以下の項目のアドレスを設定します。
上記のステートメントをコーディングした後に、関数ポインターを参照する CALL ステートメントを使用して、JNI 呼び出し可能サービスに アクセスすることができます。次の例に示すように、環境ポインターを必要とするサービスに、最初の 引数として JNIEnvPtr 特殊レジスターを渡すことができます。
01 InputArrayObj usage object reference jlongArray.
01 ArrayLen pic S9(9) comp-5.
. . .
Call GetArrayLength using by value JNIEnvPtr InputArrayObj
returning ArrayLen
重要: すべての引数を値によって JNI 呼び出し可能サービスに渡します。
一部の JNI 呼び出し可能サービスは、Java クラス・オブジェクト参照を引数として必要とします。クラスに関連付けられたクラス・オブジェクトへの参照を取得するには、以下の JNI 呼び出し可能サービスのどちらかを使用します。
制限: JNI 環境ポインターはスレッド固有のものです。 スレッドから別のスレッドに渡すことはできません。