Последовательное чтение набора данных мэйнфрейма с использованием программы Java
Я пытаюсь прочитать последовательный набор данных мэйнфрейма, используя программу Java.
Мой код Java:
import java.io.IOException;
import com.ibm.recordio.*;
public class Sequential {
public static void main(String[] args) {
try {
IRecordFile file = RecordFile.getInstanceOf("//" + args[0]);
IRandomAccessRecordFile randomFile = RandomAccessRecordFile.getInstanceOf(file, IConstants.JRIO_READ_MODE);
readSequentially(randomFile);
} catch (Exception e) {
e.printStackTrace();
System.exit(8);
}
}
// Reads the randomly accessible file sequentially.
private static void readSequentially(IRandomAccessRecordFile randomFile) throws IOException {
byte[] buffer = new byte[randomFile.getRecordLength()];
// Position at the beginning of the file.
randomFile.positionFirst();
while (randomFile.read(buffer) != -1) {
// Read bytes into buffer. Do something...
System.out.println(new String(buffer));
}
}
}
Я попытался скомпилировать этот код, используя ниже JCL.
//DMKSAMP1 JOB ('3000-000000-00-Z-00000000000'),
// 'P19314881-090817-0-S',REGION=0M,
// CLASS=G,MSGCLASS=H,NOTIFY=&SYSUID
/*JOBPARM LINECT=0,ROOM=ZZZZ
/*ROUTE PRINT PARSIP0
//BPXBATCH EXEC PGM=BPXBATCH,
// PARM='SH javac /u/dmksn/Sequential.java',
// REGION=0M
//STDOUT DD SYSOUT=*
//STDERR DD SYSOUT=*
//STDENV DD DUMMY
Я получил ошибку - package com.ibm.recordio does not exist
, Что мне нужно сделать, чтобы успешно скомпилировать программу?
2 ответа
Как уже упоминалось, JRIO устарела и слава богу, потому что это был паршивый API! Для чтения последовательных наборов данных вы должны обязательно использовать JZOS RecordReader
учебный класс. Он использует BSAM с перекрывающимся вводом-выводом и значительно быстрее, чем обычный ZFile
которая является простой оболочкой JNI над C stdio.
String ddname = ZFile.allocDummyDDName();
String cmd = "alloc fi("+ddname+") da(HLQ.MYDATA) reuse shr msg(2)";
ZFile.bpxwdyn(cmd);
RecordReader reader = null;
try {
reader = RecordReader.newReaderForDD(ddname);
byte[] recordBuf = new byte[reader.getLrecl()];
while ((bytesRead = reader.read(recordBuf)) >= 0) {
...
}
} finally {
if (reader != null) {
try {
reader.close();
} catch (ZFileException zfe) {
zfe.printStackTrace(); // but continue
}
}
try {
ZFile.bpxwdyn("free fi(" + ddname + ") msg(2)");
} catch (RcException rce) {
rce.printStackTrace(); // but continue
}
}
com.ibm.recordio был частью IBM Java Record I/O (JRIO) и устарел начиная с IBM Java SDK 6.0.1 около десяти лет назад на момент написания этой статьи.
IBM рекомендует перейти на инструментарий IBM JZOS. Это то, что установил бы ваш z/OS Systems Programmer.