JT400 - 从Queue获取消息

时间:2016-02-09 02:46:54

标签: java ibm-midrange jt400

我想从QSYS.LIB中的队列以外的队列中获取AS400中的消息。我正在使用以下运行良好的代码,只有在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替换为来自其他lib的任何其他队列,例如" /yaclib.lib/queueName.msgq"我收到以下错误:

com.ibm.as400.access.IllegalPathNameException:/yaclib.lib/queueName.msgq:对象不在QSYS文件系统中。     at com.ibm.as400.access.QSYSObjectPathName.parse(QSYSObjectPathName.java:599)     在com.ibm.as400.access.QSYSObjectPathName。(QSYSObjectPathName.java:169)     在com.ibm.as400.access.QSYSObjectPathName。(QSYSObjectPathName.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 个答案:

答案 0 :(得分:3)

@ user2338816是正确的。

QSYS是一个特殊的图书馆;它实际上包含系统中的每个其他库。在5250会话中,WRKOBJ * ALL * LIB将确认每个库都是QSYS库中的系统。有趣的是,QSYS本身包含在QSYS中。

使用IFS命名时,要引用YACLIB.LIB库,您需要使用/QSYS.LIB/YACLIB.LIB

就按日期选择而言,没有办法做到这一点。如果您查看最近的java docs,我会发现NEW, NEWEST, OLD, OLDEST