拡張 JNI コーディング

RPG IV コンパイラーの Java™ メソッド呼び出しのサポート、および RPG ネイティブ・メソッドの作成のサポートでは、ほとんどすべての JNI コーディングは、RPG プログラマーからは見えません。ただし、RPG のサポートが最も効果的であるとは限りません。例えば、RPG は 呼び出しの時およびネイティブ・メソッドの入り口と出口において必ず、RPG と Java との間の配列の変換を行ないますが、パフォーマンスを向上させるにはユーザー自身で配列の変換を行なった方がよい場合もあります。

RPG のサポートは、ユーザーに Java メソッドへのアクセスを提供しているに過ぎません。 クラスの中のフィールドにアクセスしたい場合は Java クラスに対して「入手」メソッドと「設定」メソッドを追加するか、または JNI コーディングをすることが必要になります (Java クラスの中のフィールドへのアクセス を参照)。

図 1 は、RPG における JNI 呼び出しの例です。

図 1. RPG における JNI 呼び出し
 /COPY JNI
D objectId        s                   like(jobject)
D methodId        s                   like(jmethodID)
D string          s                   like(jstring)
D parms           ds                   likeds(jvalue) dim(3)

 /free
  parms(1).i = 10;                // parameter 1 is an int
  parms(2).l = refToInt(string);  // parameter 2 is an object
  parms(3).d = 2.5e3;             // parameter 3 is a double
  CallVoidMethodA (JNIEnv_P : objectId : methodId : parms);
 /end-free

ポインター JNIEnv_P は JNI /COPY ファイルの中で定義されていることに 注意してください。