拡張 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 ファイルの中で定義されていることに 注意してください。