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.cbl が com.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 以降が必要です。Visual Studio にバージョン 7 がインストールされているときに、それより前のバージョンの 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」を参照してください。
アプリケーション サーバー
さまざまなアプリケーション サーバーで動作する COBOL アプリケーションを編集、デバッグ、およびコンパイルできます。次はサポート対象外です。
- COBOL ファイル処理 (ACUCOBOL-GT ファイル処理や Fileshare など)
- START や WAIT などのスレッド構文、および CBL_THREAD ライブラリ ルーチン
- PC_PRINTER ライブラリ ルーチン
- ネイティブ COBOL ライブラリ ルーチンまたは OS ネイティブの API の CALL
- クラス メンバーの STATIC キーワード
- 拡張 ACCEPT/DISPLAY 文
- EJB 仕様を実装したクラスを使用して JVM COBOL コードを実行する際に、SQL ランタイムを共有モデルでディプロイし、同時に COBOL ランタイムを Bean 単位モデルでディプロイすること