z/OS用のJava SDKには、MVSデータセットをアクセスするためのクラスライブラリーも提供されています。以下に、SYSUT1 DDステートメントに定義されたデータセットの内容をSYSUT2 DDステートメントに定義されたデータセットにコピーするプログラム・サンプルです。z/OS内でオープン系のシステムと連携した処理などを行う際に、従来のMVSデータセットにもアクセスする必要がある場合の参考資料です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
//jobname JOB ,CLASS=A,MSGCLASS=A,NOTIFY=&SYSUID // JCLLIB ORDER=JVB800.PROCLIB //JOBLIB DD DISP=SHR,DSN=JVB800.SIEALNKE //******************************************************************* //BUILDSRC EXEC PGM=IEBGENER //SYSPRINT DD DUMMY //SYSIN DD DUMMY //SYSUT2 DD PATHOPTS=(OWRONLY,OCREAT,OTRUNC), // PATH='/u/yourdir/MVSDSIO.java',PATHMODE=SIRWXU //SYSUT1 DD *,DLM='++' /* *********************************************************************** * Copy(Print) MVS Dataset to MVS Dataset(SYSOUT) * ============================================== * Original program code is ZFileCopy in jzos_samples.zip. * (Download available from 'JZOS Batch Launcher and Toolkit' overview * in IBM Knowledge Center) * (https://www.ibm.com/support/knowledgecenter/SSYKE2_8.0.0/ * com.ibm.java.zsecurity.80.doc/zsecurity-component/jzos.html) *********************************************************************** */ import com.ibm.jzos.ZFile; public class MVSDSIO { public static void main(String[] args) throws Exception { System.out.println("MVSDSIO: MVS Dataset Copy(Print) Program."); ZFile zFile_SYSUT1 = new ZFile("//DD:SYSUT1", "rb,type=record,noseek"); ZFile zFile_SYSUT2 = new ZFile("//DD:SYSUT2", "wb,type=record,noseek"); long count = 0; try { byte[] recBuf = new byte[zFile_SYSUT1.getLrecl()]; int nRead; while((nRead = zFile_SYSUT1.read(recBuf)) >= 0) { zFile_SYSUT2.write(recBuf, 0, nRead); count++; }; } finally { System.out.println("MVSDSIO: " + count + " records copied"); zFile_SYSUT1.close(); zFile_SYSUT2.close(); } } } ++ //********************************************************************* //BPXBATCH EXEC PGM=BPXBATCH,REGION=0M //STDOUT DD SYSOUT=* //STDERR DD SYSOUT=* //STDPARM DD * SH export PATH="$PATH:/usr/lpp/java/J8.0_64/bin" ; rm MVSDSIO.class ; javac MVSDSIO.java /* //********************************************************************* //JAVA EXEC PROC=JVMPRC86,JAVACLS='MVSDSIO',ARGS= //SYSUT1 DD DISP=SHR,DSN=prefix.PSFS.INPUT,UNIT=SYSDA,VOL=SER=volnam //SYSUT2 DD SYSOUT=* //SYSUT2 DD DISP=(,CATLG),DSN=prefix.PSFS.JAVAOUT1, // UNIT=SYSDA,SPACE=(CYL,(10,10)) ※DCB省略時は、PS VB 1028 6144 がデフォルト設定される。 //SYSUT2 DD DISP=(,CATLG),DSN=prefix.PSFS.JAVAOUT2, // UNIT=SYSDA,SPACE=(CYL,(10,10)),RECFM=FB,LRECL=130 //STDENV DD * # This is a shell script which configures # any environment variables for the Java JVM. # Variables must be exported to be seen by the launcher. . /etc/profile export JAVA_HOME=/usr/lpp/java/J8.0_64 export PATH=/bin:"${JAVA_HOME}"/bin LIBPATH=/lib:/usr/lib:"${JAVA_HOME}"/bin LIBPATH="$LIBPATH":"${JAVA_HOME}"/lib/s390x LIBPATH="$LIBPATH":"${JAVA_HOME}"/lib/s390x/j9vm LIBPATH="$LIBPATH":"${JAVA_HOME}"/bin/classic export LIBPATH="$LIBPATH": # Customize your CLASSPATH here APP_HOME=$JAVA_HOME CLASSPATH=$APP_HOME:"${JAVA_HOME}"/lib:"${JAVA_HOME}"/lib/ext # Add Application required jars to end of CLASSPATH for i in "${APP_HOME}"/*.jar; do CLASSPATH="$CLASSPATH":"$i" done export CLASSPATH="$CLASSPATH": # Set JZOS specific options # Use this variable to specify encoding for DD STDOUT and STDERR #export JZOS_OUTPUT_ENCODING=Cp1047 # Use this variable to prevent JZOS from handling MVS operator commands #export JZOS_ENABLE_MVS_COMMANDS=false # Use this variable to supply additional arguments to main #export JZOS_MAIN_ARGS="" # Configure JVM options IJO="-Xms16m -Xmx128m" # Uncomment the following to aid in debugging "Class Not Found" problems #IJO="$IJO -verbose:class" # Uncomment the following if you want to run with Ascii file encoding.. #IJO="$IJO -Dfile.encoding=ISO8859-1" export IBM_JAVA_OPTIONS="$IJO " // // |
JavaプログラムがアクセスするMVSデータセットは、JVM起動プロシージャーを呼び出すステップにDDステートメントで定義します。対応するDD名は、プログラム内で (“//DD:SYSUT1″…) 指定した名前に合わせます。このサンプルでは、入力データセットをSYSUT1、出力データセットをSYSUT2で定義します。
Javaをコンパイルしてプログラムを実行するためのサンプルJCLそのものの解説については、「Javaプログラムを作成してバッチ・ジョブとして実行する」を参照して下さい。
JZOSの解説やAPIの詳細、様々なサンプル・コードは、「JZOS Batch Launcher and Toolkit」からダウンロードできます。