複数のオブジェクトの同時解放を Java に通知
RPG コードの、Java™ を使用するセクションの前で JNI 関数 PushLocalFrame を呼び出し、RPG コードの最後のセクションで PopLocalFrame を呼び出すと、
複数のローカル参照を同時に解放できます。PopLocalFrame を呼び出すと、PushLocalFrame の呼び出し以降に作成されたローカル参照すべてが解放されます。
これらの JNI 関数のパラメーターについて詳しくは、http://java.sun.com にある JNI の資料を参照してください。
*----------------------------------------------------------------
* beginObjGroup - 後にまとめて削除できる新しいオブジェクトの
* グループの開始
*----------------------------------------------------------------
P beginObjGroup b export
D beginObjGroup pi 10i 0
D env * const
D capacityParm 10i 0 value options(*nopass)
D rc s 10i 0
D capacity s 10i 0 inz(100)
/free
JNIENV_p = env;
if (%parms >= 2);
capacity = capacityParm;
endif;
rc = PushLocalFrame (JNIENV_p : capacity);
if (rc <> 0);
return JNI_GROUP_NOT_ADDED;
endif;
return JNI_GROUP_ADDED;
/end-free
P beginObjGroup e
*----------------------------------------------------------------
* endObjGroup - 最後に開始されたオブジェクトのグループの
* 終了
*----------------------------------------------------------------
P endObjGroup b export
D endObjGroup pi 10i 0
D env * const
D refObjectP o class(*java:'java.lang.Object')
D const
D options(*nopass)
D newObjectP o class(*java:'java.lang.Object')
D options(*nopass)
D retVal s o class(*java:'java.lang.Object')
D refObject s like(refObjectP) inz(*null)
D newObject s like(newObjectP)
/free
JNIENV_p = env;
if %parms() >= 2;
refObject = refObjectP;
endif;
newObject = PopLocalFrame (JNIENV_p : refObject);
if %parms() >= 3;
newObjectP = newObject;
endif;
return JNI_GROUP_ENDED;
/end-free
P endObjGroup e
注: このラッパーを呼び出すには、JNI 環境ポインター (下記の JNI 環境ポインターの入手で説明)
が必要です。