追加の考慮事項

一般的な実行時エラー

コンパイラーはコンパイル時にはクラスの解決を行ないません。実行時にクラスが見付からない場合、実行時エラーが発生します。 これは、Java(TM) 環境から UnresolvedLinkException オブジェクトを受け取ったことによって示されます。

コンパイラーは、コンパイル時にはパラメーターのタイプのチェックは行ないません。 プロトタイプと呼び出されるメソッドとの間に矛盾があった場合、エラーを実行時に受け取ることになります。

デバッグのヒント

Java オブジェクトは、RPG においてはオブジェクト参照子として見られます。 このオブジェクト参照子は整数値で、ポインターのように動作します。通常のオブジェクト参照子は正の値で、1 から始まって順に割り当てられます。JNI 機能 NewGlobalRef を使用して作成することができるグローバル参照は、負の値になります。 これらの値は、最小の負の数 (-2147483647) から始まって順に割り当てられます。

通常、これらの値は RPG コードの中では見えませんが、この情報が RPG コードをデバッグする時には役に立つことがあります。

RPG での String オブジェクトの作成

String オブジェクトを Java メソッドに渡す必要がある場合は、次のようにして String オブジェクトを作成することができます。

D newString       PR              O   EXTPROC(*JAVA
D                                           : 'java.lang.String'
D                                           : *CONSTRUCTOR)
D   value                    65535A   CONST VARYING 
D string          S                   like(jstring)
  /free
     string = newString ('abcde');
     ...
  /end-free

ストリングを、UCS-2 データまたはグラフィック・データとして指定して作成したい場合は、以下のコーディングを使用します。

D newStringC      PR              O   EXTPROC(*JAVA
D                                           : 'java.lang.String'
D                                           : *CONSTRUCTOR)
D   value                    16383C   CONST VARYING 
D string          S                   like(jstring)
D graphicData     S             15G
D ucs2Data        S            100C
  /free
     string = newStringC (%UCS2(graphicData));
     ...
     string = newStringC (ucs2Data);
  /end-free

呼び出された Java メソッドからスローされた例外に関する情報の取得

RPG が呼び出した Java メソッドが例外で終了した場合、RPG は Java 例外とシグナル・エスケープ・メッセージ RNX0301 を処理します。 このメッセージには例外のストリング値が含まれますが、Java が例外で終了するメソッドを呼び出した場合に通常使用可能なトレース情報は含まれません。

Java 例外トレース情報を参照するには、次のコマンドを実行します。

  1. ADDENVVAR ENVVAR(QIBM_USE_DESCRIPTOR_STDIO) VALUE('Y')
    注:
    このステップは JVM を開始する前に行う必要があります。
  2. SystemProperties.default ファイル内の os400.stderr オプションが file:myfilename に設定されていることを確認してください。 例えば os400.stderr=file:/home/mydir/stderr.txt などです。 Java 仮想マシンのセットアップ方法の制御を参照してください。
    注:
    このステップは JVM を開始する前に行う必要があります。
  3. ADDENVVAR ENVVAR(QIBM_RPG_JAVA_EXCP_TRACE) VALUE('Y')
    注:
    このステップはいつ実行しても構いません。 RPG が行っている例外トレースを停止するには、環境変数を除去するか、または環境変数に 'Y' 以外の値を設定します。
  4. 例外が発生すると、トレース情報は os400.stderr オプションで指定したファイルに書き込まれます。