JT400 - получать сообщения из очереди

Я хотел бы получать сообщения в AS400 из очереди, отличной от очереди из QSYS.LIB. Я использую следующий код, который работает хорошо, только если я использую очередь из QSYS.LIB:

public String getMessagesFromQsysopr(boolean needReply) {


    String messageStr = "";
    try {

    MessageQueue queue = new MessageQueue(this.as400, "/qsys.lib/qsysopr.msgq");
 // want only inquiry messages
    queue.setSelectMessagesNeedReply(needReply);
    queue.setSelectMessagesNoNeedReply(!needReply);
    queue.setSelectSendersCopyMessagesNeedReply(needReply);
    queue.setListDirection(false);

    Enumeration e = queue.getMessages();
    while (e.hasMoreElements()) {
        QueuedMessage message = (QueuedMessage) e.nextElement();
        messageStr += message.getText()+"\n";
    }


} catch (Exception e) {
    e.printStackTrace();
}

Если я заменю /qsys.lib/qsysopr.msgq для любой другой очереди из другой библиотеки, например, "/yaclib.lib/queueName.msgq", я получаю следующую ошибку:

com.ibm.as400.access.IllegalPathNameException: /yaclib.lib/queueName.msgq: объект отсутствует в файловой системе QSYS. по адресу com.ibm.as400.access.QSYSObjectPathName.parse(QSYSObjectPathName.java:599) по адресу com.ibm.as400.access.QSYSObjectPathName.(QSYSObjectPathName.java:169) по адресу com.ibm.Sject.PyNameYathSameYPSYPjectYSamePatSameYSPyPjectSameYSSPySyPjectYSSPySyPjectSameSPySyPject_SyPySySyPySyPySySPySySQSyPySySyPySySyPySySPySPySPO с_SAM_SyPySySySySySySSP0).java:177) в com.ibm.as400.access.MessageQueue.(MessageQueue.java:299) в br.com.operation.AS400Inspector.getMessagesFromYaclib(AS400Inspector.java:225) в br.com.operation.Main.main(Main.java:43)

Вопрос 1: Что я делаю не так?

Вопрос 2: Есть ли способ ограничить сообщения, которые не нуждаются в ответе? Как получать сообщения после определенной даты или только за последние 2 дня?

Благодарю.

1 ответ

Решение

@user2338816 правильно.

QSYS это специальная библиотека; на самом деле он содержит все остальные библиотеки в системе. Начиная с сеанса 5250, WRKOBJ *ALL *LIB подтвердит, что каждая библиотека системы находится в библиотеке QSYS. Интересно, что сам QSYS содержится в QSYS.

При использовании именования IFS обращаться к библиотеке YACLIB.LIBнужно использовать /QSYS.LIB/YACLIB.LIB

Что касается выбора по дате, нет, нет никакого способа сделать это. Если вы посмотрите на документы Java, то вы найдете NEW, NEWEST, OLD, OLDEST

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