Последовательное чтение набора данных мэйнфрейма с использованием программы 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.

Другие вопросы по тегам