Rational Developer for System z
Enterprise COBOL for z/OS バージョン 4.1 プログラミング・ガイド


JNI サービスへのアクセス

Java Native Interface (JNI) は、COBOL と Java を併用するアプリケーションを開発する際に使用できる多くの呼び出し可能サービスを提供します。このサービスへの アクセスを円滑に行うには、COBOL プログラムの LINKAGE SECTION に JNI.cpy を コピーします。

この JNI.cpy コピーブックには、以下の定義が含まれています。

次の図に示すように、JNI 環境ポインターからの 2 つのレベルの 間接化技法によって JNI 環境構造を取得します。

この図は、JNI 環境構造を表しています。JNIEnvPtr は、スレッドごとのポインターを指し、スレッドごとのポインターは、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 環境ポインターはスレッド固有のものです。 スレッドから別のスレッドに渡すことはできません。


ご利用条件 | フィードバック

このインフォメーション・センターでは Eclipse テクノロジーが採用されています。(http://www.eclipse.org)