Java 仮想マシン上で COBOL アプリケーションを実行できるように、COBOL アプリケーションを編集してデバッグし、JVM バイト コード (.class ファイル) にコンパイルすることができます。適用される制限事項は次のとおりです。
環境:
- XML プリプロセッサおよび XML 拡張は JVM COBOL ではサポートされていません。XML PARSE/GENERATE はサポートされています。
- 現在、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」のトピックを参照してください。
- 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
- ビルドで java.lang.OutOfMemoryError エラーが生成される場合は、ヒープで使用可能なメモリの量を増やしてみてください。インストール ディレクトリの etc サブディレクトリにある cobjvm.cfg ファイルで、-Xmx パラメーターを使用して許容される最大量を増やします。たとえば、使用可能なメモリを 64MB に設定するには次を追加します。
-Xmx64m
- JVM COBOL アプリケーションのランタイム構成ファイルの場所および名前を指定するには、COBCONFIGJVM 環境変数を使用します (COBCONFIG 環境変数ではありません)。
- JVM チューナー ファイルの形式は、ネイティブ ランタイムが使用する形式ではなく、標準 Java プロパティ形式である必要があります。
-
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 へのリンクが可能です。
- [Problems] ビューで、エラーのある行を右クリックします。
- [Quick Fix] をクリックします。または、Ctrl+1 を押します。推奨される問題修正を示す [Quick Fix] ダイアログ ボックスが開きます。
- 古い JRE を、サポート対象のバージョンの JRE に置き換える修正を選択します。
- [Finish] をクリックします。
サポートされる JRE がマシンにインストールされている場合は、JRE が正常に置き換えられたことを示すメッセージが表示されます。マシンにサポートされる JRE のビルド パスがない場合は、そのパスを追加する必要があります。詳細については、「
Compiling JVM COBOL」を参照してください。
JVM COBOL コード:
- JVM COBOL コードではジェネリックを使用できません。
- JVM_LOAD_NATIVE では、myLibrary パラメーターをリテラルとして渡す必要があります。このパラメーターを COBOL 記憶域セクションで宣言することはできません。
- COBOL クラス パッケージおよびディレクトリ構造は強制されます。ソース コードの検索時にエラーが発生する可能性があります。
次に例を示します。
COBOLClass1.cbl が com.microfocus.core パッケージ内にある場合、COBOLClass1.cbl は Project/src/com/microfocus/core/COBOLClass1.cbl ディレクトリに入っている必要があります。その場合、com.microfocus.core パッケージは com/microfocus/core ディレクトリにマップされます。
- ネイティブ COBOL アプリケーションに JVM 手続きポインターを渡すことはできません。
- 継続行および可変長のソース フォーマットを組み合わせて使用すると、画面表示が破損し、場合によっては JVM がクラッシュすることが知られています。回避策としては、source-format"fixed" 指令を設定してアプリケーションをコンパイルするか、これを実行できない場合は、継続行を含むコードの直前および直後にこの指令を設定してからこの設定を解除します。
- COBOL クラスで、JVM のすべての基準を満たす main メソッドが明示的に定義されていない場合でも、一部の COBOL クラスを COBOL JVM アプリケーションとして実行できます。JVM のすべての基準を満たすには、main メソッドを次のとおりにする必要があります。
- main メソッドの名前が main
- main メソッドが public static
- string occurs any 引数を使用
ただし、アプリケーションには、1 つ以上の静的メソッドまたはクラス自体に using 句を含めることはできません。
これらの基準をすべて満たすと、[Run as COBOL JVM Application] オプションを使用できます。