JVM COBOL サポート

Java 仮想マシン

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

  • 現在、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_ 環境変数は使用できません。代わりに、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 がインストールされている場合に、それより前のバージョンの 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 クラスで、JVM のすべての基準を満たす main メソッドが明示的に定義されていない場合でも、一部の COBOL クラスを COBOL JVM アプリケーションとして実行できます。JVM のすべての基準を満たすには、main メソッドを次のとおりにする必要があります。
    • main メソッドの名前がmain
    • main メソッドがpublic static
    • 使用する引数がstring occurs anyである

    ただし、アプリケーションには、1 つ以上の静的メソッドまたはクラス自体にusing句を含めることはできません。

    これらの基準をすべて満たすと、[Run as COBOL JVM Application] オプションを使用できます。

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

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

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