JVM COBOL サポート

Java 仮想マシン

Java 仮想マシン上で COBOL アプリケーションを実行できるように、COBOL アプリケーションを編集してデバッグし、JVM バイト コード (.class ファイル) にコンパイルすることができます。適用される制限事項は次のとおりです。

  • JVM COBOL は Mainframe Subsystem アプリケーションではサポートされていません。
  • 現在、JVM COBOL は、JIT コンパイラがコールド レベルの最適化のみを使用するように制限されている場合に、Linux 390 が動作する System z でのみサポートされます。

    このように制限するには、'cobjrun -Xjit:optLevel=cold ProgramName' (または 'java -Xjit:optLevel=cold ProgramName') を指定してプログラムを起動します。詳細については、IBM の Web サイトで閲覧できる Java SDK マニュアルの「Selectively disabling the JIT」のトピックを参照してください。

  • JVM_LOAD_NATIVE では、myLibrary パラメーターをリテラルとして渡す必要があります。このパラメーターを COBOL 記憶域セクションで宣言することはできません。
  • COBCONFIG または COBCONFIG_ environment 変数を使用することはできません。代わりに COBCONFIGJVM を使用する必要があります。
  • JVM チューナー ファイルのフォーマットは、ネイティブ ランタイムによって使用されるフォーマットではなく標準 Java プロパティのフォーマットである必要があります。
  • JVM COBOL コードでは XML PARSE はサポートされていません。XML GENERATE はサポートされています。
  • JVM COBOL コードでジェネリックを使用することはできません。
  • COBOL クラス パッケージおよびディレクトリ構造は強制されます。ソース コードの検索時にエラーが発生する可能性があります。

    次に例を示します。

    COBOLClass1.cblcom.microfocus.core パッケージ内にある場合、COBOLClass1.cbl は Project/src/com/microfocus/core/COBOLClass1.cbl ディレクトリに入っている必要があります。その場合、com.microfocus.core パッケージは com/microfocus/core ディレクトリにマップされます。

  • ネイティブ COBOL アプリケーションに JVM プロシージャ ポインターを渡すことはできません。
  • Java™ Attach API に対する IBM の JVM サポートには既知の問題があります。この問題により、Java™ Attach API は特定の条件下でセマフォをリークします。AIX 上で IBM の JVM を実行し、z390 上で Redhat または SUSE Linux を実行している場合は、この問題が原因でマシンがセマフォ領域を使い果たし、その結果、マシンの動作が遅くなったり、断続的な障害が生じたりする可能性があります。

    この問題が発生しているかどうかを確認するには、コマンド ラインで次のコマンドを入力し、0xa1 プレフィックスで始まるセマフォの数をチェックします。

    "ipcs -s -r | grep 0xa1 | wc –l"

    この数が非常に多く、さらに増え続けている場合は、『IBM Developer Kit and Runtime Environment Diagnostics Guide』の「Chapter 19.Attach API problem determination」(ftp://public.dhe.ibm.com/software/dw/jdk/diagnosis/diag50.pdf) に記載されているクリーンアップ手順に従う必要があります。

    Java™ Attach API を無効にすると、この問題を回避できます。ただし、Attach API を無効にすると、他の Java アプリケーションはユーザーのアプリケーションに接続できなくなり、jtop、jstat、jconsole、JMX エージェント、JVMTI エージェントなどの機能も働かなくなるので注意してください。

    Attach API は、デフォルトでは Java 6 SR6 以降に対して有効になります。この機能を無効にするには、IBM JVM プロパティの com.ibm.tools.attach.enable を "no" に設定する必要があります。

    このプロパティは、任意の Java トリガーで使用したり、コマンド ラインの変更なしに JVM に追加の引数を渡すことを許可する IBM の環境変数 IBM_JAVA_OPTIONS で使用したりすることができます。

    変数は次のように設定できます。

    export IBM_JAVA_OPTIONS=-Dcom.ibm.tools.attach.enable=no
  • 継続行および可変長のソース フォーマットを組み合わせて使用すると、画面表示が破損し、場合によっては JVM がクラッシュすることが知られています。回避策としては、source-format"fixed" 指令を設定してアプリケーションをコンパイルするか、これを実行できない場合は、継続行を含むコードの直前および直後に指令を設定してからこの設定を解除します。
  • COBOL JVM プロジェクトには Java 7 以降が必要です。Eclipse にバージョン 7 がインストールされているときに、それより前のバージョンの Java をターゲットにする COBOL JVM プロジェクトをビルドしようとすると、COBOL 構文エラー COBCH1561S ("JVM support not found: are you using a supported version of the JRE?") が発生します。[Quick Fix] コマンドを使用すると、問題を解決し、サポートされるバージョンの Java にリンクすることができます。
    1. [Problems] ビューで、エラーのある行を右クリックします。
    2. [Quick Fix] をクリックします。または、Ctrl+1 を押します。問題の推奨される修正を示す [Quick Fix] ダイアログ ボックスが開きます。
    3. 以前の JRE をサポートされるバージョンの JRE に置き換える修正を選択します。
    4. [Finish] をクリックします。
    サポートされる JRE がマシンにインストールされている場合は、JRE が正常に置き換えられたことを示すメッセージが表示されます。マシンにサポートされる JRE のビルド パスがない場合は、そのパスを追加する必要があります。詳細は、「Compiling JVM COBOL」を参照してください。

アプリケーション サーバー

さまざまなアプリケーション サーバーで動作する COBOL アプリケーションを編集、デバッグ、およびコンパイルできます。次はサポート対象外です。

  • COBOL ファイル処理 (ACUCOBOL-GT ファイル処理や Fileshare など)
  • START や WAIT などのスレッド構文、および CBL_THREAD ライブラリ ルーチン
  • PC_PRINTER ライブラリ ルーチン
  • ネイティブ COBOL ライブラリ ルーチンまたは OS ネイティブの API の CALL
  • クラス メンバーの STATIC キーワード
  • 拡張 ACCEPT/DISPLAY 文
  • EJB 仕様を実装したクラスを使用して JVM COBOL コードを実行する際に、SQL ランタイムを共有モデルでディプロイし、同時に COBOL ランタイムを Bean 単位モデルでディプロイすること