2016-02-09 114 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庫的掛載點。 –