IBM JT400 получить очередь данных количество записей - PullRequest
0 голосов
/ 18 октября 2018

Я использую очереди данных в AS400 / iSeries и читаю из них, используя библиотеку jdbc jt400.

Поскольку это шаблон производителя (AS400) / потребителя (myapp), я хочу проверить, сколько записей вочередь данных теперь и определите, работает ли мое приложение достаточно быстро или мне нужно что-то изменить.

Я могу получить максимальную длину / размер очереди данных, но не текущую длину / размер.

Как я могу получить или рассчитать это значение?

Я могу использовать программу RPG и вызывать ее, но предпочитаю решение jt400 / jdbc.

Спасибо

Я редактирую этот вопрос, чтобы добавить код, который должен выполнять эту задачу, но я получаю Исключение:

    String pname = "/QSYS.LIB/QMHQRDQD.PGM";
    int param0_size = 120; // RDQD0100 size
    int size = -1;
    ProgramCall spgm = new ProgramCall(as400);
    ProgramParameter[] params = new ProgramParameter[4];
    params[0] = new ProgramParameter(param0_size);
    AS400Bin4 length = new AS400Bin4();
    params[1]  = new ProgramParameter(length.toBytes(param0_size));
    AS400Text formatname = new AS400Text(8);
    params[2] = new ProgramParameter(formatname.toBytes("RDQD0100"));
    AS400Text dataqueuename = new AS400Text(20);
    params[3] = new ProgramParameter(dataqueuename.toBytes("DTQDTQ    LIBFIC    "));
    byte[] RDQD0100 = new byte[120];

    try {
        spgm.setProgram(pname, params);
        if (spgm.run() == true) {
            AS400Text out = new AS400Text(param0_size);
            RDQD0100 = out.toBytes(params[0].getOutputData());
            ByteBuffer bb = ByteBuffer.wrap(RDQD0100);
            bb.position(76);  // Number of entries currently allocated
            size = bb.getInt();
        }
    }
    catch (Exception e){
        Logger.error(" ERROR {} ", e);
    }

    return size;

Я всегда получаю -1 в качестве ответа и Исключение в строке RDQD0100 = out.toB ..

Исключением является

java.lang.ClassCastException: [B не может быть приведен к java.base / java.lang.String

Есть какие-нибудь подсказки?Еще раз спасибо

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Окс, я обнаружил ошибку в своем коде, добавленную к моему вопросу, и хочу поделиться решением.

Этот код возвращает текущее количество записей в очереди данных DTQDTQ в библиотеке LIBFIC или -1, еслипроизошла ошибка / исключение.

int getDQSize() {

    String pname = "/QSYS.LIB/QMHQRDQD.PGM";
    int param0_size = 120; // RDQD0100 size
    int size = -1;
    ProgramCall spgm = new ProgramCall(as400);
    ProgramParameter[] params = new ProgramParameter[4];
    params[0] = new ProgramParameter(param0_size);
    AS400Bin4 length = new AS400Bin4();
    params[1]  = new ProgramParameter(length.toBytes(param0_size));
    AS400Text formatname = new AS400Text(8);
    params[2] = new ProgramParameter(formatname.toBytes("RDQD0100"));
    AS400Text dataqueuename = new AS400Text(20);
    params[3] = new ProgramParameter(dataqueuename.toBytes("DTQDTQ    LIBFIC    "));
    byte[] RDQD0100 = new byte[120];

    try {
        spgm.setProgram(pname, params);
        if (spgm.run() == true) {
            ByteBuffer bb = ByteBuffer.wrap(params[0].getOutputData());
            bb.position(72);
            size = bb.getInt();
        }
    }
    catch (Exception e){
        Logger.error(" ERROR {} ", e);
    }

    return size;
}

Еще раз спасибо Дэвиду G

0 голосов
/ 19 октября 2018

Используя базовый JT400, не представляется возможным получить количество записей в очереди данных.

Вы можете использовать QMHQRDQD api, чтобы получить числосообщения в очереди.

...