Javaプログラムを作成してバッチ・ジョブとして実行する

z/OSではまだまだ一般的ではありませんが、Javaプログラムを作成して、MVS上でバッチ・ジョブとして実行することもできます。JavaのコンパイルはUSS内で行う必要がありますが、できあがったクラス・ファイルはUSS内で実行するだけでなく、MVS上で直接実行することもできます。MVS上で直接実行するには、「IBM SDK for z/OS, Java Technology Edition」に含まれる「JZOS Batch Launcher」を起動して、JavaのJVM(Java virtual machine)をバッチ・ジョブとして実行します。

z/OS版Javaのはろ~わーるど

JCLLIBステートメントでJavaのカタログ・プロシージャー・ライブラリー、JOBLIB DDステートメントでJVMのロード・モジュール・ライブラリーを定義します。JVMのライブラリーは、3番目のJAVAステップでのみ使われるので、STEPLIBに変えてもかまいません。その場合は、DD名をJAVAJVM.STEPLIBにします。JVMのバージョンによってプロシージャー内ステップ名が変わる可能性もあるので、サンプルではJOBLIBを使用しています。
JVB800は、Java 8バージョンの64ビット版を示す第1修飾子です。システムにインストールされた「IBM SDK for z/OS, Java Technology Edition」に応じた修飾子を指定します。JavaのSDKがインストールされていれば、JVBnnn(もしくはJVAnnn)の第1修飾子のデータセットが作られているはずです。

ステップBUILDSRC

JCL内に記述したJavaのソース・コードをUSSファイルとして書き込みます。IEBGENERによって、SYSUT1 DDに定義されたストリーム内データセットとしてのJavaソース・プログラムが、SYSUT2 DDに定義された/u/yourdir/HelloWLD.javaファイルとしてコピーされます。ストリーム内データセットではなく、区分データセットのメンバーとしてプログラムを作成し格納して、SYSUT1をDSN=dsname(member)で定義してもかまいません。
MVS上でJavaを動かすということで、JavaソースをCOBOLやPL/I同様の80バイト固定長レコードでのサンプルを示していますが、TSOのISHELLやOEDITコマンドなどで直接USSファイル・システム内にソース・プログラムのファイルを作成することもできます。その場合、このBUILDSRCのステップは不要です。

ステップBPXBATCH

USSをバッチで起動してUSS内のJavaコンパイラーを実行します。USSのUNIXシェルを起動して、シェル内でjavacを実行しています。;記号で区切れば、シェル内で複数のコマンドを実行できます。このサンプルではコンパイル前に古いクラスファイルを削除しています。標準またはユーザー毎のprofile等でJavaコンパイラーへのパスが追加されていなければ、exportコマンドで追加できます。
コンパイルに成功すれば、ユーザーのデフォルト・ディレクトリー(このサンプルでは/u/yourdir)にJavaのクラスファイルが作成されます。

ステップJAVA

「JZOS Batch Launcher」を実行してJVMを起動し、先行ステップでコンパイルしたクラスファイルを実行します。プロシージャー名JVMPRC86は、「JZOS Batch Launcher」の起動プロシージャーです。こちらもシステムにインストールされた「IBM SDK for z/OS, Java Technology Edition」に応じたプロシージャー名を指定します。
クラスファイルは、ユーザーのデフォルト・ディレクトリー(このサンプルでは/u/yourdir)とCLASSPATHに定義されたディレクトリーから探されます。他のユーザーや共通のディレクトリー内にあるクラスファイルを実行する場合は、必要に応じてCLASSPATHにディレクトリーを追加します。
プログラムからの出力(System.out)は、STDOUT DDステートメントでリダイレクトできます(標準ではSYSOUT)

ステップBPXBATCH以降は、Java SDKがインストールされたzFSデータセットがUSSファイル・システムにマウントされている必要があります。マウント済みかどうかは「D△OMVS,FILE,N=JV*」コマンドまたはSDSFのFSパネルで確認できます。