2016-02-09 140 views
1

我想从QSYS.LIB中的队列以外的队列中获取AS400中的消息。我使用的是运行良好,下面的代码,只有当我用从内QSYS.LIB队列:JT400 - 从队列中获取消息

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文件系统。 在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) at com.ibm.as400.access.MessageQueue。(MessageQueue.java:299) at br.com.operation.AS400Inspector.getMessagesFromYaclib(AS400Inspector.java:225) at br.com .operation.Main.main(Main.java:43)

问题1:我在做什么错?

问题2:有什么办法限制不需要回复的邮件吗?就像在特定的日期之后或仅在最后2天的消息中获取消息一样?

谢谢。

+2

'...例如“/yaclib.lib/queueName.msgq”'这不是一个有效的名称。没有_file system_名为**/yaclib.lib **。你想引用库YACLIB。使用IFS命名格式,您可以使用/qsys.lib文件系统启动路径,使其成为“/qsys.lib/yaclib.lib/queueName.msgq”。 – user2338816

+0

谢谢,它工作。 –

+0

有一种方法可以在某个IFS类中QSYS'化给定的库+成员。非常方便的做到这一点(有很多规则可以遵循)。 –

回答

2

@ user2338816是正确的。

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

当使用IFS命名,指的YACLIB.LIB库,你需要使用/QSYS.LIB/YACLIB.LIB

至于按日期选择,没有就没有办法做到这一点。如果你看java docs最接近你会发现是NEW, NEWEST, OLD, OLDEST

+0

IFS命名是一种解决方法,允许通过除/ usr和/ tmp之外的类Unix文件树来访问库。对于这个问题,考虑将它作为AS/400库的挂载点。 –